无法通过 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 脚本。
程序
- 使用 [资源管理器 API getIampolicy] 在 Google 云平台上获取当前所有策略。
- 添加用户并修复 1.response json.
- 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进行部署。
我一直在尝试使用 api 在 Google Cloud Platform 中添加项目编辑器的用户。
API我用的是Resource Manager API setIampolicy
.
添加用户正在使用 Google Apps 脚本。
程序
- 使用 [资源管理器 API getIampolicy] 在 Google 云平台上获取当前所有策略。
- 添加用户并修复 1.response json.
- 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进行部署。