本指南介绍如何安全地完成 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 Console 中,前往 IAM & Admin → Service Accounts

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

输入服务账号的名称和说明,例如:
Service account name: clickhouse-gcs-access (or your preferred name)
Service account description: Service account for ClickHouse Cloud to access GCS buckets点击 Create and continue

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

此角色提供对 GCS object 的读写权限
点击 Continue,然后点击 Done
记下服务账号的电子邮件地址:

向服务账号授予存储桶访问权限
您可以在项目级别或单个存储桶级别授予访问权限。
选项 1:向特定存储桶授予访问权限 (推荐)
- 导航到
Cloud Storage→Buckets - 点击您要授予访问权限的存储桶
- 转到
Permissions选项卡 - 在 "Permissions" 下,点击为前面步骤中创建的主体授予访问权限的
Grant access - 在 "New principals" 字段中,输入您的服务账号电子邮件地址
- 选择适当的角色:
- Storage Object User 用于读写访问
- Storage Object Viewer 用于只读访问
- 点击
Save - 对其他需要授权的存储桶重复此操作
选项 2:授予项目级别访问权限
- 导航到
IAM & Admin→IAM - 点击
Grant access - 在
New principals字段中输入您的服务账号电子邮件地址 - 选择 Storage Object User (只读则选择 Storage Object Viewer)
- 点击 SAVE
为服务账号生成 HMAC 密钥
前往 Cloud Storage → Settings → Interoperability:

如果未看到 “Access keys” 部分,请点击 Enable interoperability access
在 “Access keys for service accounts” 下,点击 Create a key for a service account:

选择你之前创建的服务账号 (例如 clickhouse-gcs-access@your-project.iam.gserviceaccount.com)
点击 Create key:

系统会显示 HMAC 密钥。 请立即保存 Access Key 和 Secret——之后将无法再次查看该 secret。
下面显示的是示例密钥:
Access Key: GOOG1EF4YBJVNFQ2YGCP3SLV4Y7CMFHW7HPC6EO7RITLJDDQ75639JK56SQVD
Secret: nFy6DFRr4sM9OnV6BG4FtWVPR25JfqpmcdZ6w9nV在 ClickHouse Cloud 中使用 HMAC 密钥
现在,你可以使用 HMAC 凭据从 ClickHouse Cloud 访问 GCS。 为此,请使用 GCS 表函数:
SELECT *
FROM gcs(
'https://storage.googleapis.com/clickhouse-docs-example-bucket/epidemiology.csv',
'GOOG1E...YOUR_ACCESS_KEY',
'YOUR_SECRET_KEY',
'CSVWithNames'
);使用通配符匹配多个文件:
SELECT *
FROM gcs(
'https://storage.googleapis.com/clickhouse-docs-example-bucket/*.parquet',
'GOOG1E...YOUR_ACCESS_KEY',
'YOUR_SECRET_KEY',
'Parquet'
);ClickPipes 中 GCS 的 HMAC 身份验证
ClickPipes 使用 HMAC (基于哈希的消息身份验证码) 密钥与 Google Cloud Storage 进行身份验证。
- 在 ClickPipe 设置过程中,在
Authentication method下选择Credentials - 提供在前面步骤中获取的 HMAC 凭据

HMAC 密钥必须关联到具有 roles/storage.objectViewer 角色的服务账号,该角色包含以下权限:
storage.objects.list:列出存储桶中的对象storage.objects.get:拉取/读取对象
最佳实践
为不同环境使用单独的服务账号
为开发、暂存和生产环境分别创建独立的服务账号。例如:
clickhouse-gcs-dev@project.iam.gserviceaccount.comclickhouse-gcs-staging@project.iam.gserviceaccount.comclickhouse-gcs-prod@project.iam.gserviceaccount.com
这样,你就可以轻松撤销特定环境的访问权限,而不会影响其他环境。
采用最小权限原则
仅授予完成所需操作的最少权限:
- 对于只读访问,使用 Storage Object Viewer
- 将访问权限授予特定桶,而非整个项目
- 可考虑使用桶级条件,将访问限制在特定路径下
定期轮换 HMAC 密钥
建立密钥轮换计划:
- 生成新的 HMAC 密钥
- 用新密钥更新 ClickHouse 配置
- 使用新密钥验证功能是否正常
- 删除旧的 HMAC 密钥
使用 Cloud Audit Logs 监控访问
为 Cloud Storage 启用并监控 Cloud Audit Logs:
- 前往 IAM & Admin → Audit Logs
- 在列表中找到 Cloud Storage
- 启用
Admin Read、Data Read和Data Write logs - 使用这些日志监控访问行为并检测异常