无法通过Google Cloud Platform中的api为角色/编辑者用户添加用户

时间:2019-12-20 06:22:35

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

我一直在尝试使用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"
      }
    ]
  }
}

其他信息 我可以通过[尝试!]文件来做,但是不能通过Google Apps脚本来做。

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

为什么?

2 个答案:

答案 0 :(得分: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相比,更改更简单,工作量更少,出错率更低
  • 您将避免出现竞争条件,因为您可以同时进行多个角色绑定,而且它们不会相互冲突。

答案 1 :(得分:0)

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

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