javascript - 无法通过 Google Cloud Platform 中的 api 为角色/编辑用户添加用户
问题描述
我一直在尝试使用 api 在 Google Cloud Platform 中添加项目编辑器的用户。
我使用的 API 是Resource Manager API setIampolicy
.
添加用户正在使用 Google Apps 脚本。
程序
- 使用 [Resource Manager API getIampolicy] 获取 Google Cloud Platform 上的当前所有政策。
- 添加用户并修复 1.response json。
- 使用 [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 身份验证。
为什么?
解决方案
不要使用您尝试执行的此方法(使用 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 相比,更改更简单、工作更少且更不容易出错
- 您将避免竞争条件,因为您可以同时进行多个角色绑定并且它们不会相互冲突。
推荐阅读
- javascript - Vue JS 重新创建根组件
- ios - ReplayKit 在反复进入后台后停止缓冲
- php - 如何在shopware的订单页面上添加价格
- c++ - 运算符重载以显示用户定义的数据类型
- visual-studio - 通过 VS Test Explorer 运行但通过 Resharper 时单元测试失败
- python - Python 3.7.0 和 PyQt5.11.2:模块“PyQt5.uic”没有属性“loadUI”
- heroku - API 密钥不允许从 IP 访问(Heroku)
- rust - 用子切片引用覆盖切片引用时出错
- javascript - 如何在每个刻度上绘制网格线?
- android - 无法创建 ViewModel - my_package.App 无法转换为 android.arch.lifecycle.LifecycleOwner