安全访问 GCS 数据
本指南演示如何安全地对 Google Cloud Storage (GCS) 进行身份验证,并从 ClickHouse Cloud 访问您的数据。
介绍
ClickHouse Cloud 使用与 Google Cloud 服务账号关联的 HMAC(基于哈希的消息认证码)密钥连接到 GCS。 这种方式为访问 GCS 存储桶提供了安全机制,而无需在查询中直接嵌入凭证。
工作原理如下:
- 创建一个具备相应 GCS 权限的 Google Cloud 服务账号
- 为该服务账号生成 HMAC 密钥
- 将这些 HMAC 凭证提供给 ClickHouse Cloud
- ClickHouse Cloud 使用这些凭证访问 GCS 存储桶
通过这种方式,可以通过服务账号上的 IAM 策略统一管理对 GCS 存储桶的所有访问,无需修改单个存储桶策略即可更方便地授予或撤销访问权限。
前提条件
要按照本指南进行操作,您需要准备:
- 一个有效的 ClickHouse Cloud 服务
- 一个已启用 Cloud Storage 的 Google Cloud 项目
- 在您的 GCP 项目中创建服务账号并生成 HMAC 密钥的权限
安装和配置
创建 Google Cloud 服务账号
- 在 Google Cloud 控制台中,转到 “IAM 和管理” → “服务帐号”

- 在左侧菜单中点击
Service accounts,然后点击Create service account:

为您的服务账户输入名称和描述,例如:
点击 Create and continue(创建并继续)

为服务账号授予 Storage Object User 角色:

该角色提供对 GCS 对象的读写访问权限
对于只读访问权限,请使用 Storage Object Viewer
如需更精细的控制,可以创建自定义角色
点击 Continue,然后点击 Done
记录服务账号的电子邮件地址:

为服务账户授予存储桶访问权限
您可以在项目级别或单个存储桶级别授予访问权限。
选项 1:授予特定存储桶的访问权限(推荐)
- 转到
Cloud Storage→Buckets - 点击要授予访问权限的存储桶
- 进入
Permissions选项卡 - 在“Permissions”部分中,为在前面步骤中创建的 principal 点击
Grant access - 在“New principals”字段中输入您的服务账户电子邮件地址
- 请选择合适的角色:
- 用于读写访问的对象存储用户
- 用于只读访问的 Storage Object Viewer 角色
- 单击
Save - 如有其他 bucket,请重复上述步骤
选项 2:授予项目级别访问权限
- 前往
IAM & Admin→IAM - 单击
Grant access - 在
New principals字段中输入您的服务账号电子邮箱地址 - 选择 Storage Object User(只读访问请选择 Storage Object Viewer)
- 点击“保存”
仅授予 ClickHouse 访问所需特定存储桶的权限,而非项目级权限。
为服务账户生成 HMAC 密钥
导航至 Cloud Storage → Settings → Interoperability:

如果您没有看到"Access keys"部分,请单击 Enable interoperability access
在"Access keys for service accounts"下,点击 Create a key for a service account:

选择您之前创建的服务账号(例如 [email protected])
点击 Create key:

系统将显示 HMAC 密钥。 请立即保存访问密钥和密钥 - 之后将无法再次查看该密钥。
示例密钥如下所示:
请妥善保管这些凭据。 关闭此页面后将无法再次获取该密钥。 如果丢失密钥,您需要重新生成。
在 ClickHouse Cloud 中使用 HMAC 密钥
现在您可以使用 HMAC 凭据从 ClickHouse Cloud 访问 GCS。 为此,请使用 GCS 表函数:
使用通配符匹配多个文件:
ClickPipes for GCS 中的 HMAC 身份验证
ClickPipes 使用 HMAC(基于哈希的消息身份验证码)密钥向 Google Cloud Storage 进行身份验证。
当设置 GCS ClickPipe 时:
- 在 ClickPipe 设置过程中,将
Authentication method设置为Credentials - 提供在前述步骤中获取的 HMAC 凭据

当前不支持服务账号身份验证 - 必须使用 HMAC 密钥
GCS 存储桶 URL 必须使用格式:https://storage.googleapis.com/<bucket>/<path>(不支持 gs://)
HMAC 密钥必须与具有 roles/storage.objectViewer 角色的服务账号关联,该角色包含:
storage.objects.list: 用于列出存储桶中的对象storage.objects.get:用于获取/读取对象
最佳实践
为不同环境使用单独的服务账户
为开发、预发布和生产环境创建单独的服务账户。例如:
这样可以在不影响其他环境的情况下,轻松撤销某个特定环境的访问权限。
应用最小权限访问原则
仅授予完成任务所需的最小权限:
- 对只读访问使用 Storage Object Viewer
- 仅授予对特定存储桶的访问权限,而不是整个项目级别
- 考虑使用存储桶级条件,将访问限制到特定路径
定期轮换 HMAC 密钥
制定并执行密钥轮换计划:
- 生成新的 HMAC 密钥
- 使用新密钥更新 ClickHouse 配置
- 使用新密钥验证功能是否正常
- 删除旧的 HMAC 密钥
Google Cloud 不强制 HMAC 密钥过期,因此需要自行制定并实施轮换策略。
使用 Cloud Audit Logs 监控访问
为 Cloud Storage 启用并监控 Cloud Audit Logs:
- 前往 IAM & Admin → Audit Logs
- 在列表中找到 Cloud Storage
- 启用
Admin Read、Data Read和Data Write日志 - 使用这些日志来监控访问模式并检测异常