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

Posted

技术标签:

【中文标题】如何列出与 gcp 服务帐户关联的角色?【英文标题】:How do I list the roles associated with a gcp service account? 【发布时间】:2018-04-10 21:22:04 【问题描述】:

在谷歌云 gui 控制台中,我转到“IAM & admin”>“服务帐户”并创建了一个名为“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' \
  ;" 

【问题讨论】:

【参考方案1】:

在 Google Cloud 中,您有针对项目和服务帐号的 IAM 政策。

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

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

要获取包含成员及其相应角色的项目的 IAM 策略,您可以运行 the following command:

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

【讨论】:

服务帐户可以跨项目吗?是否有一些功能可以让我查询服务帐户并查看其访问权限(而不是像您的命令示例那样相反)? 你的意思是创建一个新的跨度项目?要创建一个项目,仅仅成为项目的所有者是不够的。所以我不确定,我明天测试,第二个答案是可以cloud.google.com/sdk/gcloud/reference/iam/service-accounts/…gcloud iam service-accounts get-iam-policy SERVICE_ACCOUNT @red888 是的,我相信通过resourcemanager.projects.create cloud.google.com/resource-manager/docs/access-control-proj权限是可能的 gcloud project 现在被命名为 gcloud projects【参考方案2】:

要过滤特定的服务帐户,以下 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

格式参数当然可以根据您的特定需求进行调整。

【讨论】:

超级有帮助!我对此进行了修改以列出具有特定角色的服务帐户:gcloud projects get-iam-policy $PROJECT --flatten="bindings[].members" --format="table(bindings.members)" --filter="bindings.role:$ROLE" --format 行的末尾有一个空格,它打破了换行符 这太棒了! 是否有用于过滤的 REST API? 将此标记为答案正是我想要的【参考方案3】:

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

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

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

更多详情:How to list, find, or search iam policies across services (APIs), resource types, and projects in google cloud platform (GCP)?

【讨论】:

以上是关于如何列出与 gcp 服务帐户关联的角色?的主要内容,如果未能解决你的问题,请参考以下文章

如何列出我的 Google Cloud 项目的所有 IAM 用户

GCP IAM REST API 服务帐号密钥问题

Terraform GCP 将 IAM 角色分配给服务帐户

如何将 Firebase 帐户关联到 Google Play 游戏帐户

使用Sheets API v4获取与Google帐户关联的所有电子表格列表

如何找到与 Android Market 关联的 Gmail 帐户?