【问题标题】:Can't add user for role/editor user via api in Google Cloud Platform无法通过 Google Cloud Platform 中的 api 为角色/编辑用户添加用户
【发布时间】:2020-04-12 16:46:43
【问题描述】:

我一直在尝试使用 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 身份验证。

为什么?

【问题讨论】:

  • 您不能以编程方式让未接受 Google Cloud Platform 服务条款的用户成为所有者。确保用户接受服务条款或使用组织(项目和用户都是组织/域的一部分)
  • 我应该如何接受谷歌云平台的服务条款
  • 通过访问 console.cloud.google.com
  • 我接受了 TOS。但我无法添加用户。 [试穿]没问题。但是 GAS 是错误的。cloud.google.com/resource-manager/reference/rest/v1/projects/…

标签: javascript google-apps-script google-cloud-platform google-cloud-iam


【解决方案1】:

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

【讨论】:

  • 谢谢!如何使用 gcloud 命令自动添加项目编辑器的用户?云调度程序或 GAE 或 GCE 或 Composer 的 cron ?我想每周一自动添加电子表格中列出的用户。
  • 嘿@takechoco,你应该为此创建另一个stackoverflow问题。但简单地说,如果你想实现你所要求的用例:1-创建一个Cloud function,添加问题中的角色2-创建一个每周一运行的Cloud Scheduler job,它的目标应该是函数的url你创造的。最后一件事,请接受我的回答,以便在社区中获得更好的可见性。
  • @MethkalKhalawi 是否有任何 REST 等价物? gcloud [GROUP] remove-iam-policy-binding [RESOURCE-NAME] --role [ROLE-ID-TO-GRANT] --member user:[USER-EMAIL]
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2017-07-22
    • 2018-02-18
    • 2020-05-16
    • 2014-07-14
    • 2018-05-09
    • 1970-01-01
    • 2014-09-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多