83

在谷歌云 gui 控制台中,我转到“IAM 和管理员”>“服务帐户”,并使用查看者角色创建了一个名为“my-service-account”的服务帐户。

然后我运行了这个命令:

gcloud iam service-accounts get-iam-policy my-service-account@mydomain.iam.gserviceaccount.com

并看到了这个输出:

etag: ACAB

根据文档,这意味着此服务帐户没有与之关联的策略。所以我给它分配了一个不包含在它的“政策”中的“角色”。

如何列出与服务帐户关联的角色?

编辑:感谢对这个问题的出色回答,我现在可以遍历所有项目并得到我想要的。因此,根据这些 cmd 工具的版本,这应该列出所有项目中单个服务帐户的所有角色绑定:

gcloud projects list | \
  awk '{print $1}' | \
  xargs -I % sh -c "echo ""; echo project:% && \
  gcloud projects get-iam-policy % \
  --flatten='bindings[].members' \
  --format='table(bindings.role)' \
  --filter='bindings.members:YOU-SERVICE-ACCOUNT@blah.com' \
  ;" 
4

3 回答 3

139

要过滤特定的服务帐户,可以使用以下 gcloud 命令:

gcloud projects get-iam-policy <YOUR GCLOUD PROJECT>  \
--flatten="bindings[].members" \
--format="table(bindings.role)" \
--filter="bindings.members:<YOUR SERVICE ACCOUNT>"

给出了很好的输出:

ROLE
roles/cloudtrace.agent
roles/servicemanagement.serviceController
roles/viewer

当然可以调整格式参数以满足您的特定需求。

于 2018-05-23T10:09:25.003 回答
34

在 Google Cloud 中,您拥有适用于项目和服务帐号的 IAM 政策。

使用项目的 IAM 政策,您可以定义谁可以对 Google Cloud 项目中的资源执行特定操作。将“查看者”角色添加到您修改了项目策略的服务帐户(即您的服务帐户可以在项目中执行的操作)

另一方面,服务账户的 IAM 策略用于控制谁拥有所有权以及谁可以访问服务账户及其设置。这是您使用发布的命令检索的内容,但是您没有获得任何东西,因为您获得的是服务帐户的策略,而不是项目的策略。

为了获取将包含成员及其相应角色的项目的 IAM 策略,您可以运行以下命令

gcloud projects get-iam-policy PROJECT_ID

您可以在以下链接中找到有关服务帐户的更多信息:

https://cloud.google.com/iam/docs/service-accounts

https://cloud.google.com/iam/docs/granting-roles-to-service-accounts

于 2017-10-31T16:26:30.237 回答
6

您可以使用此命令列出分配给服务帐户的资源和角色:

gcloud beta asset search-all-iam-policies --scope=organizations/123 --query="policy:456@cloudservices.gserviceaccount.com" | egrep "role:|resource:|gserviceaccount"

只要您对范围具有 cloudasset.assets.searchAllIamPolicies 权限,就可以将范围更改为文件夹或项目。

更多详情:如何在谷歌云平台 (GCP) 中跨服务 (API)、资源类型和项目列出、查找或搜索 iam 策略?

于 2020-02-29T05:02:40.573 回答