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

Adding roles to service accounts on Google Cloud Platform using REST API

我想使用调用 REST API 的 python 脚本在 GCP 上创建一个服务帐户,然后为其指定特定角色 - 最好是 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 为服务帐户编写 role/scope 脚本吗?

您似乎在尝试在服务帐户上设置角色(作为资源)。那是为了设置谁可以使用服务帐户。

如果您想为服务帐户(作为身份)赋予项目及其资源的特定角色,请参阅此方法:https://cloud.google.com/resource-manager/reference/rest/v1/projects/setIamPolicy

您可以向 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 应包含服务帐户的电子邮件符号。
  • 感谢 格式精美的读数。