首页 > 解决方案 > 无法通过 Google Cloud Platform 中的 api 为角色/编辑用户添加用户

问题描述

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

我使用的 API 是Resource Manager API setIampolicy.

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

程序

  1. 使用 [Resource Manager API getIampolicy] 获取 Google Cloud Platform 上的当前所有政策。
  2. 添加用户并修复 1.response json。
  3. 使用 [Resource Manager API setIampolicy] 发布 2.json。

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

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

但是,我无法添加用户。出现以下错误/异常:

{
  "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 身份验证。

为什么?

标签: javascriptgoogle-apps-scriptgoogle-cloud-platformgoogle-cloud-iam

解决方案


不要使用您尝试执行的此方法(使用 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 相比,更改更简单、工作更少且更不容易出错
  • 您将避免竞争条件,因为您可以同时进行多个角色绑定并且它们不会相互冲突。

推荐阅读