FEATURED · 精选文章

Teleport 会话录制存储接入 Google Cloud Storage(GCS)实战指南

发布时间 / 2026/9/20 23:53:27
来源 / 创域科博编辑部
栏目 / 资讯中心
Teleport 会话录制存储接入 Google Cloud Storage(GCS)实战指南 网络安全认证鉴权运维后端【免费下载链接】teleportThe easiest, and most secure way to access and protect all of your infrastructure.项目地址https://gitcode.com/gh_mirrors/tel/teleport点击查看免费下载导读本文聚焦 Teleport 开源仓库中的lib/events/gcssessions包讲解如何让 Teleport auth server 将会话录制session recording持久化到 Google Cloud StorageGCS。你将掌握 GCS 后端的启用方式gcs构建标签、audit_sessions_uri完整配置语法与全部参数、三种客户端认证模式以及底层对象存储布局、上传合并与失败重试机制最终能在自己的集群中安全、可靠地落地 GCS 会话存储。一、GCS 会话存储解决了什么问题Teleport 在审计 SSH、Kubernetes、数据库等会话时会产生会话录制文件session recording默认情况下这些录制内容随 auth server 本地文件系统或audit_sessions_uri指定的存储后端一起持久化。当集群规模较大、审计合规要求集中留存时把录制文件放到对象存储是常见做法——Teleport 原生支持 S3、Azure Blob 与 GCS。lib/events/gcssessions/README.md 明确指出该包让 Teleport auth server 将会话录制存储在 GCP 的 GCSGoogle Cloud Storage上且文档特别警告使用 GCS 会产生 GCP 持续计费recurring charge这是选型前必须评估的成本因素。该包由社区贡献原 README 标注了贡献者 joshdurbin 中当audit_sessions_uri的 scheme 为gs时会调用gcssessions.Config{}SetFromURLDefaultNewHandler构造会话存储 Handler。二、启用 GCS 后端编译期特性GCS 会话存储默认不编译进二进制必须通过gcs构建标签build tag显式开启ADDFLAGS-tags gcs make teleport命令说明ADDFLAGS是 Teleport Makefile 体系见根目录 Makefile 与 common.mk用来向go build传递附加参数的变量-tags gcs对应gcssessions包文件中的//go:build gcs类约束使 GCS 相关依赖cloud.google.com/go/storage、google.golang.org/api等进入编译构建完成后将新生成的teleport二进制部署到 auth server 节点重启服务即可。如果不带该标签配置gs://的audit_sessions_uri会因缺少对应 scheme 的分支而报错lib/service/service.go 会提示unsupported scheme for audit_sessions_uri。三、配置文件中的快速开始示例所有配置参数通过URI/URL 查询串传递给 GCS Handler。在 config 文件默认/etc/teleport.yaml的teleport段配置如下teleport: storage: audit_sessions_uri: gs://teleport-session-storage-2?projectIDgcp-projcredentialsPath/var/lib/teleport/gcs_credsgs://是 GCS 专用 scheme定义于 constants.go主机部分host portion即GCS bucket 名称查询参数逐项对应 Handler 配置。配置后重启 auth serverTeleport 会以 lib/service/service.go 中的流程解析 URI、构造 Handler并在启动日志中输出Setting up GCS bucket相关记录lib/events/gcssessions/gcshandler.go。四、完整可配置属性一览以下是该后端支持的全部配置参数取自 lib/events/gcssessions/README.md 的 Full Properties 一节并结合源码 gcshandler.go 的常量与Config结构逐一验证参数类型是否必填说明URI 主机部分bucketstring必填GCS bucket 名称用于持久化会话录制credentialsPathstring否GCP 服务账号 JSON 凭据文件路径projectIDstring必填GCP 项目 IDendpointstring否GCS 客户端 endpoint如localhost:8618仅用于测试pathstring否bucket 内用作存储根目录的路径keyNamestring否用户自定义的 GCP KMS 密钥名用于加密源码层面的校验逻辑SetFromURLprojectID缺省时直接返回BadParameter因此它是硬性必填项URI 主机为空没有 bucket 名同样返回BadParametercredentialsPath、endpoint、path、keyName均为可选仅在查询串中出现且非空时写入Config。五、三种 GCS 客户端认证模式原文档定义了三种认证/授权模式源码 DefaultNewHandler 精确实现了这一分支逻辑1. 不配置credentialsPath、不配置endpoint—— 使用 Google Application Default CredentialsADC此时args为空storage.NewClient(ctx)走 ADC 默认链路。原文档强调这只适用于 Teleport 安装在 GCE 实例的场景——实例必须挂载了带有相应 IAM 角色/权限的服务账号使该 GCE 实例被授权访问 GCS。2. 仅配置endpoint—— 无认证客户端源码会追加option.WithoutAuthentication()、option.WithEndpoint(cfg.Endpoint)以及grpc.WithTransportCredentials(insecure.NewCredentials())。原文档明确指出此模式仅用于测试配合本地模拟 GCS 服务使用详见下文测试章节。3. 配置credentialsPath—— 服务账号 JSON 凭据认证源码追加option.WithCredentialsFile(cfg.CredentialsPath)客户端将使用该 JSON 密钥文件绑定的服务账号对真实 GCS 进行认证。六、源码级原理从参数到存储布局6.1 自动建桶与安全默认值NewHandler在初始化时会调用 ensureBucket先检查 bucket 是否存在不存在则由 Teleport 创建创建时启用版本控制VersioningEnabled: true开启默认 KMS 加密Encryption.DefaultKMSKeyName取自keyName参数并设置projectPrivate的 ACL 与默认对象 ACL若 bucket 由其他实体管理、Teleport 只有写权限检查失败会记录一条可忽略的警告日志不会中断启动。6.2 bucket 内的对象路径布局Handler 根据path参数存储根目录生成对象键gcshandler.go 与 gcsstream.go对象类型默认路径未配置path配置path/audit后会话录制sessionID.taraudit/sessionID.tar最终会话摘要sessionID.summary.jsonaudit/sessionID.summary.json进行中摘要pending/sessionID.summary.jsonaudit/pending/sessionID.summary.json会话元数据sessionID.metadataaudit/sessionID.metadata缩略图sessionID.thumbnailaudit/sessionID.thumbnail多部分上传占位uploads/uploadID/sessionID.uploadaudit/uploads/...上传分片parts/uploadID/partNum.partaudit/parts/...合并中间对象merges/uploadID/hash.mergeaudit/merges/...上传完成后返回的对象 URL 形如gs://bucket/path见 gcshandler.go该 URL 会写入审计事件供后续检索。6.3 录制文件的上传与下载上传Upload 通过条件写入storage.Conditions{DoesNotExist: true}保证不覆盖已存在的录制UploadPendingSummary 允许覆盖会话进行中可反复更新摘要的最终化UploadSummary 写入最终摘要并删除pending版本下载gcsRetrier 先取对象Attrs检查存在性与大小空对象返回空流再用NewRangeReader实现从任意 offset 续传的断点重试下载配合lib/utils/downloadretrier的 Retrier 机制摘要读取兜底StreamSessionSummary 采用最终摘要 → pending 摘要 → 再查最终摘要的三段式顺序避免最终版与 pending 版被并发删除/创建时的竞态。6.4 多部分上传解决 GCS 32 对象合成上限大录制采用分片上传gcsstream.goCreateUpload 生成 UUID 上传 ID写入.upload占位对象条件写入保证幂等UploadPart 逐片写入parts/uploadID/n.partCompleteUpload 用 GCSComposeComposer把分片合成最终.tar。关键设计GCS 单次 Compose 最多 32 个源对象常量maxParts 32gcsstream.go。当分片超过 32 个时CompleteUpload 会先把每 32 个对象合并成merges/下的中间对象以对象名的 sha256 哈希命名保证合并幂等再逐层向上合并最终合成录制文件。完成或中止后cleanupUpload 会并行信号量限流批量删除uploads/、parts/、merges/下的全部临时对象若录制对象已存在则直接清理而不覆盖CompleteUpload 中先查recordingPath的存在性。6.5 可观测性指标Handler 注册了 4 个 Prometheus 指标gcshandler.go可用于监控 GCS 存储健康状况gcs_event_storage_uploadsGCS 上传次数Countergcs_event_storage_downloadsGCS 下载次数Countergcs_event_storage_uploads_seconds上传延迟直方图1ms32.768s指数桶gcs_event_storage_downloads_seconds下载延迟直方图。七、测试与本地验证仓库为 GCS 后端提供了两层测试可直接作为集成验证参考1. 基于 fake-gcs-server 的本地模拟测试gcshandler_test.go 的TestFakeStreams使用github.com/fsouza/fake-gcs-server起一个内存 GCS通过Endpoint: server.URL()与server.Client()构造 Handler覆盖上传/下载、摘要上传下载、NotFound 等场景——这正是上文模式 2仅 endpoint无认证的典型用法。TestRetryOnRateLimit 用httptest模拟 429 限流响应验证 GCS 客户端在option.WithoutAuthentication模式下会按退避策略自动重试。2. 对接真实 GCS 的集成测试gcsstream_test.go 的TestStreams通过环境变量TEST_GCS_URI常量定义于 constants.go指定真实 GCS URI未设置时测试自动跳过。它额外覆盖了多分片流式上传以及两类故障恢复场景ResumeOnComposeFailure注入OnComposerRun让首次 Compose 失败验证会话可恢复续传ResumeOnCleanupFailure注入AfterObjectDelete模拟清理临时对象失败验证清理可重入、不破坏最终录制。这两个注入点在 Config 中定义为回调字段OnComposerRun、AfterObjectDelete是故障注入测试的设计基础。八、实操检查清单在真实集群启用 GCS 会话存储建议依次确认成本确认 GCS 存储与网络流量费用在预算内构建使用ADDFLAGS-tags gcs make teleport产出带 GCS 支持的二进制凭据按部署形态选择认证模式——GCE 实例用 ADC其他环境准备服务账号 JSON 并配置credentialsPath最小权限原则该账号只需对目标 bucket 的写入与读取权限配置在teleport.storage.audit_sessions_uri中填gs://bucket?projectIDprojectcredentialsPathpath可选path、keyName验证执行一次会话录制随后检查 bucket 内是否出现sessionID.tar、.summary.json、.metadata对象并通过tsh或 Web UI 回放会话验证可读性监控在 Grafana 中观测gcs_event_storage_*系列指标及时发现上传失败与延迟异常。九、注意事项与限制endpoint参数仅供测试使用指向本地模拟服务生产环境务必移除UploadReplayObject与StreamReplayObjectRange在 GCS 后端返回NotImplementedgcshandler.go、gcshandler.go即Beam 回放对象不受 GCS 后端支持需要回放能力时请评估其他后端若 bucket 由其他团队管理、Teleport 仅有写权限启动时的 bucket 检查失败日志可以忽略会话录制文件只写不覆盖重复上传同一会话 ID 会返回错误而非静默覆盖这保证了审计数据的不可篡改性。参考资源GCS 会话存储 README本主题原始文档Handler 核心实现配置解析、上传下载、建桶多部分上传与合并实现本地模拟测试fake-gcs-server真实 GCS 集成测试TEST_GCS_URIauth server 侧 URI 分发逻辑SchemeGCS 与 GCSTestURI 常量定义赞分享网络安全认证鉴权运维后端【免费下载链接】teleportThe easiest, and most secure way to access and protect all of your infrastructure.项目地址https://gitcode.com/gh_mirrors/tel/teleport点击查看免费下载相关推荐Agno 会话存储接入 Google Cloud Storage基于 GcsJsonDb 的 JSON Blob 持久化完整实战指南Agno 会话存储接入 Google Cloud Storage基于 GcsJsonDb 的 JSON Blob 持久化完整实战指南 导读 本指南聚焦于 ag人工智能大模型AI AgentAgent 框架多智能体工具调用RAGAgent 工作流Agent 记忆ToolJet 接入 Google Cloud StorageGCS数据源完整指南连接配置与六大存储操作实战ToolJet 接入 Google Cloud StorageGCS数据源完整指南连接配置与六大存储操作实战 Google Cloud StorageG低代码后端前端AI 应用MCP 服务Telegraf Google Cloud Storage 输入插件从 GCS 存储桶批量采集指标数据实战指南Telegraf Google Cloud Storage 输入插件从 GCS 存储桶批量采集指标数据实战指南 导读 Google Cloud Storage可观测性指标监控运维创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED — 相关阅读

相关资讯

LATEST — 最新资讯

最新发布

TODAY — 本日精选

新闻

WEEKLY — 本周精选

新闻

MONTHLY — 本月精选

新闻