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

如何移除GCP Spanner实例的继承IAM权限并仅保留指定主体权限?

解决GCP Spanner实例继承IAM主体的访问限制问题

你当前用的两种Terraform IAM绑定方式(google_spanner_instance_iam_policy和google_spanner_instance_iam_binding)只能管理Spanner实例自身的直接IAM绑定,无法影响从父项目继承来的权限——因为GCP IAM的权限是层级叠加的,父项目/文件夹/组织的IAM策略会自动向下继承到实例,实例级的直接绑定是在继承权限之上追加,而非替换继承内容。

要实现「仅保留指定主体访问,移除所有继承主体权限」的需求,你需要结合允许绑定和拒绝绑定来抵消继承的权限,具体操作如下:

步骤1:保留指定主体的允许权限

先用你熟悉的方式配置实例的直接允许绑定,确保指定主体拥有所需权限:

# 方式1:替换实例的整个直接IAM策略
data "google_iam_policy" "spanner_allowed" {
  binding {
    role = "roles/spanner.instanceAdmin"
    members = [
      "user:xuxy@fthtfhht.com",
      "serviceAccount:fhfhfh@xxxxx.iam.gserviceaccount.com"
    ]
  }
}

resource "google_spanner_instance_iam_policy" "instance" {
  instance    = module.spanner_instance.instance.name
  policy_data = data.google_iam_policy.spanner_allowed.policy_data
}

# 或者方式2:单独绑定某个角色
resource "google_spanner_instance_iam_binding" "spanner_owner" {
  instance = module.spanner_instance.instance.name
  role     = "roles/owner"
  members  = [
    "user:xuxy@fthtfhht.com",
    "serviceAccount:fhfhfh@xxxxx.iam.gserviceaccount.com"
  ]
}

步骤2:添加拒绝绑定抵消继承权限

通过google_spanner_instance_iam_deny_binding资源,拒绝所有非指定主体的相关权限,同时将允许的主体设为例外:

resource "google_spanner_instance_iam_deny_binding" "block_inherited" {
  instance = module.spanner_instance.instance.name
  
  deny_rule {
    # 拒绝所有用户的指定权限(覆盖继承来的访问)
    denied_principals = ["allUsers"]
    # 列出你需要阻止的Spanner相关权限,可根据需求调整
    denied_permissions = [
      "spanner.instances.get",
      "spanner.instances.list",
      "spanner.databases.get",
      "spanner.databases.query",
      "spanner.databases.update",
      "spanner.databases.delete"
    ]
    # 排除你允许的主体,让他们不受拒绝规则影响
    exception_principals = [
      "user:xuxy@fthtfhht.com",
      "serviceAccount:fhfhfh@xxxxx.iam.gserviceaccount.com"
    ]
  }
}

关键说明

  • GCP IAM的拒绝规则优先级高于允许规则,因此上述配置会先拒绝所有用户的权限,再豁免你指定的主体,最终只有这些主体能访问实例。
  • 你无法直接关闭IAM继承(这是GCP层级架构的设计),但通过拒绝规则可以完全抵消继承来的访问权限,达到预期效果。
  • 请根据实际需求调整denied_permissions列表,确保覆盖所有你想阻止的操作权限。

内容的提问来源于stack exchange,提问作者Sid P Tkf

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 13:41:35