You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

跨项目克隆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" {
│ 
╵

可行的解决方向:

  1. 补全源实例的完整资源路径
    跨项目克隆时,clone.source_instance_name必须使用源实例的完整资源路径,而非单纯的实例名。修改代码里的克隆配置,用self_link替代name:
clone {
  source_instance_name = data.google_sql_database_instance.source.self_link
}

self_link包含了项目ID和实例名的完整路径,能让GCP正确识别跨项目的源实例。

  1. 配置源实例的授权服务账号
    除了账号的IAM角色,还需要在源Cloud SQL实例的Connections → Service accounts中,添加目标项目的Cloud SQL服务账号:service-{preprod-project-number}@gcp-sa-cloudsql.iam.gserviceaccount.com,并给它分配Cloud SQL Editor或更高权限。

  2. 验证权限的实际生效状态
    虽然已经配置了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权限确实被包含在已分配的角色中。

  1. 检查组织级政策限制
    如果两个项目属于同一组织,可能存在组织政策禁止跨项目克隆操作。检查是否有constraints/sql.restrictCrossProjectClone这类政策,如有需要调整政策允许本次克隆。

内容的提问来源于stack exchange,提问作者Johevin Blesstowi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 13:51:13