如何列出与 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 用户
如何将 Firebase 帐户关联到 Google Play 游戏帐户