使用REST API在Google Cloud Platform上为服务帐户添加角色

时间:2017-03-02 19:20:21

标签: rest google-cloud-platform amazon-iam service-accounts

我想在GCP上使用调用REST API的python脚本创建一个服务帐户,然后为其提供特定的角色 - 最好是these的某些角色,例如roles/logging.logWriter

首先,我向create the account提出了一个工作正常的请求,我可以在Console / IAM中看到该帐户。
其次我想给它一个角色,this似乎是正确的方法。但是,它不接受roles/logging.logWriter,说HttpError 400,"Role roles/logging.logWriter is not supported for this resource.">
相反,如果我在控制台中设置了所需的策略,那么尝试getIamPolicy方法(使用gcloud工具),我得到的全部是响应etag: ACAB,没有提到我设置的实际角色。因此,我认为这些角色指的是不同的东西。

知道如何使用API​​编写服务帐户的角色/范围脚本吗?

2 个答案:

答案 0 :(得分:3)

You appear to be trying to set a role on the service account (as a resource). That's for setting who can use the service account.

If you want to give the service account (as an identity) a particular role on the project and its resources, see this method: https://cloud.google.com/resource-manager/reference/rest/v1/projects/setIamPolicy

答案 1 :(得分:0)

您可以为GCP项目中的GCP服务帐户授予权限,而不必重写整个项目策略!

为此使用gcloud projects add-iam-policy-binding ...命令(docs)。

例如,给定环境变量GCP_PROJECT_IDGCP_SVC_ACC,以下命令将container.admin角色的所有特权授予所选服务帐户:

gcloud projects add-iam-policy-binding ${GCP_PROJECT_ID} \
    --member=serviceAccount:${GCP_SVC_ACC}
    --role=roles/container.admin

要查看您所做的事情:

$ gcloud projects get-iam-policy $GCP_PROJECT_ID \
    --flatten="bindings[].members" \
    --format='table(bindings.role)' \
    --filter="bindings.members:${GCP_SVC_ACC}"

输出:

ROLE
roles/container.admin

(或更多角色,如果之前已授予这些角色)

注意:

  • 环境变量GCP_SVC_ACC应该包含服务帐户的电子邮件符号。
  • this answer表示赞赏,以了解格式正确的读数。