我想在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编写服务帐户的角色/范围脚本吗?
答案 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_ID
和GCP_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
应该包含服务帐户的电子邮件符号。