Google cloud platform 在GCP中创建IAM成员会引发错误策略的大小太大

Google cloud platform 在GCP中创建IAM成员会引发错误策略的大小太大,google-cloud-platform,google-iam,terraform-provider-gcp,google-cloud-iam,Google Cloud Platform,Google Iam,Terraform Provider Gcp,Google Cloud Iam,当我尝试在GCP中创建一个新的IAM用户时,出现以下错误 Request "Create IAM Members roles/dns.admin serviceAccount:dns-mngt-sa-prod@pprojectId.iam.gserviceaccount.com for \"project \\\"projectId\\\"\"" returned error: Error applying IAM policy f

当我尝试在GCP中创建一个新的IAM用户时,出现以下错误

Request "Create IAM Members roles/dns.admin serviceAccount:dns-mngt-sa-prod@pprojectId.iam.gserviceaccount.com 
for \"project \\\"projectId\\\"\"" returned error:
 Error applying IAM policy for project "projectId": Error setting IAM policy for project "projectId": googleapi: Error 400:
 The size of the policy is too large.
 Consider removing or merging some of the bindings or if using conditions remove 
any lengthy conditions., badRequest
上图是terraform应用命令的输出。当我尝试使用gcloud cli时,也会得到类似的输出
当我试图通过GCP控制台创建它时,它只显示“后端错误”

很可能是您碰到了IAM的一个错误。您在Terraform中指定的所有绑定都将在每次执行更新或创建时上载。正如错误所说,您可能正在创建许多可以合并在一起的绑定。我建议尝试找出您达到的配额限制以及原因,以下是一些调试命令:

iam绑定的数量:

gcloud projects get-iam-policy $PROJECT_ID --format=json | jq '.bindings | length'
gcloud projects get-iam-policy $PROJECT_ID --format=json | jq '.bindings' > iam.json
ls -l iam.json
gcloud projects get-iam-policy $PROJECT_ID --format=json | jq ".bindings[].members" | jq -s flatten
绑定的总大小:

gcloud projects get-iam-policy $PROJECT_ID --format=json | jq '.bindings | length'
gcloud projects get-iam-policy $PROJECT_ID --format=json | jq '.bindings' > iam.json
ls -l iam.json
gcloud projects get-iam-policy $PROJECT_ID --format=json | jq ".bindings[].members" | jq -s flatten
在所有绑定中出现的每个成员:

gcloud projects get-iam-policy $PROJECT_ID --format=json | jq '.bindings | length'
gcloud projects get-iam-policy $PROJECT_ID --format=json | jq '.bindings' > iam.json
ls -l iam.json
gcloud projects get-iam-policy $PROJECT_ID --format=json | jq ".bindings[].members" | jq -s flatten
然后,可以通过合并减少绑定的数量。例如,此绑定:

{
  "bindings": [
    {
      "members": [
        "user:user-a@example.com"
      ],
      "role": "roles/owner"
    },
    {
      "members": [
        "user:user-b@example.com"
      ],
      "role": "roles/owner"
    }
  ],
  "etag": "BwUjMhCsNvY=",
  "version": 1
}
可以合并为以下内容:

{
  "bindings": [
    {
      "members": [
        "user:user-b@example.com",
        "user:user-a@example.com"
      ],
      "role": "roles/owner"
    }
  ],
  "etag": "BwUjMhCsNvY=",
  "version": 1
}

你能分享遗漏敏感信息的地形代码吗?限制的计算方法并不明显。根据命令,我有434个绑定。然而,在从控制台中删除2个IAM用户之后,it workedI是可以理解的,但您可能已经达到了其他限制之一。例如,在所有绑定中可以有1500个成员出现。因此,您还可以计算绑定中的所有成员,以查看是否达到最大值。最有可能的情况是,删除用户后,也会将其从绑定中删除,从而暂时“治愈症状”。