如何授予用户仅导出数据到 Cloud Storage 的最小权限?
解读
在国内金融、政企类客户的面试中,考官往往把“最小权限原则”与“等保 2.0 对数据外泄的合规要求”放在一起追问。
本题的潜台词是:
- 只让指定身份能把 Cloud SQL 实例的数据导出到 Cloud Storage(GCS);
- 该身份不能登录实例、不能修改库表、不能删除备份、不能访问其他 Bucket;
- 整个链路要满足国内跨区域访问合规(即不走公网、不暴露全局权限)。
因此答案必须同时覆盖 IAM 权限、SQL 实例级权限、网络链路 三层,缺一不可。
知识点
- IAM 最小角色:roles/storage.objectAdmin 只授予“写对象”权限,不含“删桶”“改 IAM”等高危动作;
- IAM 条件属性:利用 resource.name 前缀 + request.time 窗口,实现“仅允许写入指定前缀的备份文件”;
- Cloud SQL 内置服务账号:每个实例对应一个 Google 管理的服务账号(形如 service-PROJECT_NUMBER@gcp-sa-cloud-sql.iam.gserviceaccount.com),必须显式授予该账号对目标 Bucket 的 roles/storage.objectCreator;
- 用户身份分离:
– 数据操作者(开发者/DBA)仅持有 roles/cloudsql.editor,可触发导出作业;
– 运行时身份(Cloud SQL 服务代理)负责真正写对象; - 国内合规加固:
– 开启 VPC-SC 服务边界,防止数据通过外网出口落到海外 Bucket;
– 使用 Cloud SQL Auth Proxy + Private Service Connect,确保导出流量走内网; - 审计留痕:在 Bucket 上启用 Cloud Audit Logs 的 DATA_WRITE 日志,并绑定 Log Router 到国内 Project,满足等保 2.0 对“操作可回溯”的要求。
答案
-
创建专用存储分区
gsutil mb -l asia-east1 -p myproject gs://myproject-sql-export/ -
授予 Cloud SQL 服务账号最小写权限
gcloud projects add-iam-policy-binding myproject \
--member="serviceAccount:service-123456789@gcp-sa-cloud-sql.iam.gserviceaccount.com" \
--role="roles/storage.objectCreator" \
--condition="expression=resource.name.startsWith('projects/_/buckets/myproject-sql-export/objects/backup/'),title=SQLExportOnly" -
授予数据操作者触发权限
gcloud projects add-iam-policy-binding myproject \
--member="user:dev@example.com" \
--role="roles/cloudsql.editor" -
执行导出(以 MySQL 为例)
gcloud sql export sql myinstance gs://myproject-sql-export/backup/20240613.dump \
--database=mydb --table=orders \
--offload=true -
验证
– 操作者无法登录实例、无法查看其他 Bucket;
– 服务账号只能写入指定前缀,不能列出或删除对象;
– 在 Cloud Logging 中可查看到 dev@example.com 触发了 export 作业,且目标对象写入成功。
拓展思考
- 如果客户要求“只能导出到已加密的 Bucket,且密钥在中国境内 KMS”,应把 CMEK 密钥环创建在 asia-east1,并在 Bucket 的 IAM 条件里再加一句
resource.matchLabels.kms-key-ring=locations/asia-east1; - 当实例开启 CMEK 加密时,Cloud SQL 服务账号还需
roles/cloudkms.cryptoKeyEncrypterDecrypter,否则导出会报 403 KmsAccessDenied; - 若使用 Terraform 统一治理,可把上述 IAM 绑定写成模块,通过变量
var.allowed_export_prefix实现“一次封装,多环境复用”,避免人工误授权; - 在多云容灾场景下,可进一步把 Bucket 配置为“双区域 asia-east1+asia-southeast1”,并通过 VPC-SC 跨边界策略限制仅中国内网 IP 可写入,既满足异地备份,又符合数据不出境的监管红线。