无法通过 Google Cloud Platform 中的 api 为 role/editor 用户添加用户

Can't add user for role/editor user via api in Google Cloud Platform

我一直在尝试使用 api 在 Google Cloud Platform 中添加项目编辑器的用户。

API我用的是Resource Manager API setIampolicy.

添加用户正在使用 Google Apps 脚本。

程序

  1. 使用 [资源管理器 API getIampolicy] 在 Google 云平台上获取当前所有策略。
  2. 添加用户并修复 1.response json.
  3. post 2.json 使用 [资源管理器 API setIampolicy]。

https://cloud.google.com/resource-manager/reference/rest/v1/projects/getIamPolicy

https://cloud.google.com/resource-manager/reference/rest/v1/projects/setIamPolicy

但是,我无法添加用户。 与下面 Error/Exception:

{
  "error": {
    "code": 400,
    "message": "Request contains an invalid argument.",
    "status": "INVALID_ARGUMENT",
    "details": [
      {
        "@type": "type.googleapis.com/google.cloudresourcemanager.v1.ProjectIamPolicyError",
        "type": "SOLO_REQUIRE_TOS_ACCEPTOR",
        "role": "roles/owner"
      }
    ]
  }
}

其他信息 我可以通过 [Try it!] 文档来完成,但不能通过 Google Apps Script 来完成。

我使用 Google Apps 脚本的 OAuth 库和 OAuth 身份验证。

为什么?

不要使用您正在尝试执行的此方法(使用 get-iam-policy 提取 iam 策略,编辑 JSON/YAML 文件,使用 set-iam-policy 推送更改)因为它不好文件中的实践和小错误可能会导致无法访问您的项目。同样,您处理的数据太多,并且正在拉取整个文件,对其进行编辑,然后将其推回以再次处理(所有文件)。

你应该使用

gcloud [GROUP] add-iam-policy-binding [RESOURCE-NAME] --role
   [ROLE-ID-TO-GRANT] --member user:[USER-EMAIL]

gcloud [GROUP] remove-iam-policy-binding [RESOURCE-NAME] --role
   [ROLE-ID-TO-GRANT] --member user:[USER-EMAIL] 

改为

示例:

gcloud projects add-iam-policy-binding $PROJECT_NAME \
    --role roles/editor \
    --member serviceAccount:$SA_EMAIL

这两种方法更好,因为:

  • 与编辑相比,更改更简单、工作更少、更不容易出错 JSON/YAML
  • 您将避免竞争条件,因为您可以同时进行多个角色绑定,并且它们不会相互冲突。

我发现通过使用 terraform 来完成这项任务不太容易出错。 terraform 模块“google_project_iam_binding”在不覆盖现有 iam 策略的情况下执行此操作(尤其是当我需要更新 IAM 条件策略时)。

我会用gcloud projects get-iam-policy PROJECT_ID --format json > policy.json拉取政策来了解政策。了解政策后,我会将需要更新的部分转换为terraform模板,然后使用terraform进行部署。