跨项目克隆Google Cloud SQL遇403权限错误,求解决方案
跨Google Cloud项目克隆Cloud SQL实例时遭遇403权限错误的解决思路
我尝试在两个不同Google Cloud项目(prod→preprod)间克隆Cloud SQL实例,执行Terraform代码时触发403错误:The caller does not have permission。
我的Terraform代码如下:
provider "google" { project = var.preprod_id region = var.reqion } provider "google" { alias = "source" project = var.prod_id region = var.reqion } data "google_sql_database_instance" "source" { provider = google.source name = "plan-flow-db" } resource "google_sql_database_instance" "clone" { provider = google name = "cloned-plan-flow-db" region = var.reqion database_version = data.google_sql_database_instance.source.database_version clone { source_instance_name = data.google_sql_database_instance.source.name } }
已配置的IAM权限:
- preprod项目(目标项目):账号拥有
Owner、Cloud SQL Admin、Cloud SQL Viewer、Cloud SQL Client角色 - prod项目(源项目):账号拥有
Owner、Cloud SQL Admin、Cloud SQL Viewer、Cloud SQL Client角色
但仍收到错误:
╷ │ Error: Error, failed to create instance cloned-plan-flow-db: googleapi: Error 403: The caller does not have permission, forbidden │ │ with google_sql_database_instance.clone, │ on main.tf line 16, in resource "google_sql_database_instance" "clone": │ 16: resource "google_sql_database_instance" "clone" { │ ╵
可行的解决方向:
- 补全源实例的完整资源路径
跨项目克隆时,clone.source_instance_name必须使用源实例的完整资源路径,而非单纯的实例名。修改代码里的克隆配置,用self_link替代name:
clone { source_instance_name = data.google_sql_database_instance.source.self_link }
self_link包含了项目ID和实例名的完整路径,能让GCP正确识别跨项目的源实例。
配置源实例的授权服务账号
除了账号的IAM角色,还需要在源Cloud SQL实例的Connections → Service accounts中,添加目标项目的Cloud SQL服务账号:service-{preprod-project-number}@gcp-sa-cloudsql.iam.gserviceaccount.com,并给它分配Cloud SQL Editor或更高权限。验证权限的实际生效状态
虽然已经配置了Owner等角色,但可能存在权限延迟或继承问题。可以通过以下命令确认账号在两个项目的权限:
# 验证源项目权限 gcloud projects get-iam-policy {prod-project-id} --filter="bindings.members:user:{your-email}" # 验证目标项目权限 gcloud projects get-iam-policy {preprod-project-id} --filter="bindings.members:user:{your-email}"
确保cloudsql.instances.clone权限确实被包含在已分配的角色中。
- 检查组织级政策限制
如果两个项目属于同一组织,可能存在组织政策禁止跨项目克隆操作。检查是否有constraints/sql.restrictCrossProjectClone这类政策,如有需要调整政策允许本次克隆。
内容的提问来源于stack exchange,提问作者Johevin Blesstowi
相关产品推荐
相关产品推荐

