google-cloud-platform - 在 GCP 中创建 IAM 成员会引发错误 The size of the policy is too large
问题描述
当我尝试在 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 apply 命令的输出。当我尝试使用 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
然后,您可以通过合并来减少绑定的数量。例如,这个绑定:
{
"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
}
推荐阅读
- node.js - 将 Node.js 应用程序与前端连接 (index.html)
- ajax - 如何在不破坏音乐的情况下使用 AJAX 实现网站页面的过渡?
- android - 问题:数据绑定不适用于 runtimeOnly gradle 依赖项
- c++ - exit(EXITT_FAILURE) 如何在 c 和 c++ 中工作?
- python - 在 tkinter 中,这是避免不必要的垃圾收集的好方法吗?
- apache-spark - Spark 写入 Hive 错误的 table_name 作为分区规范并抛出“分区规范包含非分区列”错误
- ios - 如何添加左右滑动动画显示视图
- python - 无法从我的节点在 firebase 中打印值
- python - Scrapy 每个起始 url 输出一个 CSV 文件
- javascript - sheet.cssRules 在内页上抛出错误,但在主页上工作正常