GCP组织能否创建多Access Context Manager访问策略?默认策略如何修改?
问题描述
本人对组织策略管理完全不熟悉,若问题较为浅显,敬请谅解。
我尝试通过Terraform定义google_access_context_manager_access_policy资源,代码如下:
resource "google_access_context_manager_access_policy" "org-policy" { parent = data.google_organization.org.name title = "Parent policy for ACL restrictions" }
但遇到如下错误:
╷ │ Error: Error creating AccessPolicy: googleapi: Error 409: Policy already exists with parent organizations/<my-org-id> │ │ with google_access_context_manager_access_policy.org-policy, │ on policies.tf line 1, in resource "google_access_context_manager_access_policy" "org-policy": │ 1: resource "google_access_context_manager_access_policy" "org-policy" { │ ╵
执行命令gcloud access-context-manager policies list --organization <my-org-id>后,发现存在一个从未手动设置过的默认组织策略:
NAME ORGANIZATION SCOPES TITLE ETAG <redacted-id> <my-org-id> default policy <what-s-even-this>
请问:我能否创建另一个组织级访问策略,作为后续google_access_context_manager_access_level等依赖策略的基础?若无法创建,该如何重新定义这个默认策略?
补充信息
Terraform及hashicorp/google版本:
- Terraform v1.2.9
terraform { required_providers { google = { source = "hashicorp/google" version = ">=3.85.0" } } }
解答
1. 能否创建多个组织级访问策略?
不能。Google Access Context Manager规定,每个组织只能存在一个访问策略,你看到的默认策略是系统自动为组织创建的,无需手动操作,因此无法再创建第二个组织级访问策略。
2. 如何用Terraform管理这个默认策略?
不需要重新创建,可通过以下两种方式纳入Terraform管理:
方法一:用数据源获取现有策略
定义数据源拉取默认策略的信息,后续的access_level等资源直接引用该数据源即可:
data "google_access_context_manager_access_policy" "default" { parent = data.google_organization.org.name } # 示例:创建访问级别并关联默认策略 resource "google_access_context_manager_access_level" "example" { access_policy = data.google_access_context_manager_access_policy.default.name name = "example-level" title = "Example Access Level" basic { conditions { ip_subnetworks = ["192.168.0.0/16"] } } }
方法二:将默认策略导入Terraform状态
如果需要修改默认策略的属性(比如标题),可先导入它:
- 执行导入命令,替换
<policy-id>为gcloud命令输出里的NAME值:
terraform import google_access_context_manager_access_policy.org-policy organizations/<my-org-id>/accessPolicies/<policy-id>
- 导入后,更新Terraform配置块,确保配置与现有策略属性匹配(也可直接修改标题等属性):
resource "google_access_context_manager_access_policy" "org-policy" { parent = data.google_organization.org.name title = "Parent policy for ACL restrictions" # 此处修改标题后,Terraform会自动更新现有策略 }
- 执行
terraform plan确认变更,再执行terraform apply完成修改。
注意事项
- 导入后,该默认策略将由Terraform接管,后续所有变更需通过Terraform操作,避免手动修改导致状态不一致。
- 访问策略是Access Context Manager所有资源(访问级别、服务边界等)的基础,所有相关资源必须关联到这个唯一的组织级策略。
内容的提问来源于stack exchange,提问作者Imad
相关产品推荐
相关产品推荐

