我一直在尝试使用api在Google Cloud Platform中添加项目编辑器的用户。
我使用的API是Resource Manager API setIampolicy
。
要添加用户正在使用Google Apps脚本。
过程
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身份验证。
为什么?
答案 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
这两种方法更好,因为:
答案 1 :(得分:0)
我发现使用 terraform 执行此任务时更不容易出错。 terraform 模块“google_project_iam_binding”执行此操作时不会覆盖现有的 iam 策略(尤其是当我需要更新 IAM 条件策略时)。
我将使用 gcloud projects get-iam-policy PROJECT_ID --format json > policy.json
拉取政策以了解政策。了解政策后,我会将需要更新的部分转换为 terraform 模板,然后使用 terraform 进行部署。