【发布时间】:2018-02-20 11:35:22
【问题描述】:
我一直在尝试使用 api 在 GCP 中创建服务帐户。
要创建服务帐户,我发送以下发布请求:
base_url = f"https://iam.googleapis.com/v1/projects/{project}/serviceAccounts"
auth = f"?access_token={access_token}"
data = {"accountId": name}
# Create a service Account
r = requests.post(base_url + auth, json=data)
这会返回 200 并创建一个服务帐户:
然后,这是我用来创建特定角色的代码:
sa = f"{name}@dotmudus-service.iam.gserviceaccount.com"
sa_url = base_url + f'/{sa}:setIamPolicy' + auth
data = {"policy":
{"bindings": [
{
"role": roles,
"members":
[
f"serviceAccount:{sa}"
]
}
]}
}
如果角色设置为roles/viewer、roles/editor 或roles/owner 之一,则此方法确实有效。
但是,如果我想使用,特别是roles/cloudsql.viewer api 告诉我不支持此选项。
这里是角色。 https://cloud.google.com/iam/docs/understanding-roles
我不想为此服务帐户授予我项目的完整查看者权限,这违反了最小权限原则。
如何通过 api 设置特定角色?
编辑:
这是使用资源管理器 api 的响应:roles/cloudsql.admin 作为角色
POST https://cloudresourcemanager.googleapis.com/v1/projects/{project}:setIamPolicy?key={YOUR_API_KEY}
{
"policy": {
"bindings": [
{
"members": [
"serviceAccount:sa@{project}.iam.gserviceaccount.com"
],
"role": "roles/cloudsql.viewer"
}
]
}
}
{
"error": {
"code": 400,
"message": "Request contains an invalid argument.",
"status": "INVALID_ARGUMENT",
"details": [
{
"@type": "type.googleapis.com/google.cloudresourcemanager.projects.v1beta1.ProjectIamPolicyError",
"type": "SOLO_REQUIRE_TOS_ACCEPTOR",
"role": "roles/owner"
}
]
}
}
【问题讨论】:
-
我在这里面临同样的问题。您是如何解决这个问题的?
-
我通过roles.get 提取整个策略对象解决了这个问题。然后将所需角色附加到对象并使用 data = 整个 json 对象调用此 api。
标签: python-requests google-cloud-platform