如何列出我的 Google Cloud 项目的所有 IAM 用户
Posted
技术标签:
【中文标题】如何列出我的 Google Cloud 项目的所有 IAM 用户【英文标题】:How do I list all IAM users for my Google Cloud Project 【发布时间】:2017-11-28 12:07:14 【问题描述】:我希望能够列出与我的项目关联的所有用户和服务帐户(最好使用gcloud
CLI 工具,但如果需要,我很乐意进行 API 调用)。
我可以使用this 轻松列出与项目关联的所有服务帐户,但是如何也列出所有用户呢?我希望出现以下内容,但我在文档中看不到任何内容:
gcloud beta iam users list
【问题讨论】:
【参考方案1】:List all service accounts in a project
以下命令列出与项目关联的所有服务帐户:
$ gcloud iam service-accounts list
NAME EMAIL
Compute Engine default service account 12345678-compute@developer.gserviceaccount.com
dummy-sa-1 dummy-sa-1@MY_PROJECT.iam.gserviceaccount.com
List all Users and Service accounts in a project with their IAM roles
如果您想列出在指定项目中被授予任何 IAM 角色的所有用户/服务账户,您可以使用以下命令:
$ gcloud projects get-iam-policy MY_PROJECT
bindings:
- members:
- serviceAccount:12345678-compute@developer.gserviceaccount.com
- user:alice@foobar.com
role: roles/editor
- members:
- user:you@yourdomain.com
- user:someoneelse@yourdomain.com
role: roles/owner
etag: ARBITRARY_ETAG_HERE
version: 1
Formatting the output
gcloud
supports formatting the output as json
and lot of other customizations as needed,在某些情况下可能更容易解析或仅打印您需要的信息。
例子:
# Prints the output as json instead of the default yaml format
$ gcloud projects get-iam-policy MY_PROJECT --format=json
# Display just the bindings in json format
$ gcloud projects get-iam-policy MY_PROJECT --format='json(bindings)'
# Display the bindings in a flattened format
$ $ gcloud projects get-iam-policy MY_PROJECT --format='flattened(bindings)'
【讨论】:
我想我发现了一个错误 - 使用gcloud projects get-iam-policy MY_PROJECT
时,它没有列出任何具有继承权限的用户/电子邮件(例如从文件夹)。还是与他们有什么特别的关系?
如何让所有用户跨所有项目?
@james 要获得所有项目中的所有用户,您必须首先列出所有项目,然后对于每个项目,您必须使用上述建议获取该项目的绑定。跨度>
@GrahamPolley 要获取该信息,您将获得项目的祖先,然后您将获得项目的 IAM 策略绑定,然后您将获得它的每个父项的 IAM 绑定到树直到组织。
@lukwam 你能分享一下 bash 吗?提前致谢【参考方案2】:
列出服务帐号
$ gcloud iam service-accounts list
列出项目角色的成员
$ gcloud projects get-iam-policy [project]
向角色添加/影响用户
$ gcloud projects add-iam-policy-binding [project] \
--member="user:name@gmail.com" \
--role="roles/iam.serviceAccountUser"
删除用户:
$ gcloud projects remove-iam-policy-binding [project] \
--member="user:name@gmail.com" \
--role="roles/iam.serviceAccountUser"
将 google-group 添加/影响到角色
$ gcloud projects add-iam-policy-binding [project] \
--member="group:my_group@googlegroups.com" \
--role="roles/storage.admin"
【讨论】:
【参考方案3】:以下命令将列出整个 GCP 组织中的所有非服务帐户:
gcloud organizations get-iam-policy ORGANIZATION_ID | grep user\: | sort | uniq
获取组织ID
gcloud organizations list
【讨论】:
【参考方案4】:使用以下命令可以清楚地查看属于给定项目的所有成员:
gcloud projects get-iam-policy $GCP_PROJECT_NAME \
--flatten="bindings[].members" \
--format="table(bindings.members)"
【讨论】:
【参考方案5】:您可以使用 search-all-iam-policies 列出项目/文件夹/组织的所有 IAM 策略,并 grep 用户:
$ gcloud asset search-all-iam-policies --scope=projects/123 | grep user:
这不仅会显示在项目本身中被授予角色的用户,还会显示在计算实例或 bigquery 数据集等子资源中被授予角色的用户。
只要对范围有cloudasset.assets.searchAllIamPolicies
权限,就可以将范围改为organizations/123在整个组织中搜索。
更多详情请见另一篇文章:How to list, find, or search iam policies across services (APIs), resource types, and projects in google cloud platform (GCP)?
【讨论】:
【参考方案6】:很遗憾,无法列出所有使用的用户
gcloud iam . . .
命令树;但是,我们可以通过
列出 Google Cloud Platform (GCP) 项目 ($GCP_PROJECT_NAME
) 下的所有帐户
gcloud projects get-iam-policy
改为命令树:
gcloud projects get-iam-policy $GCP_PROJECT_NAME \
--flatten="bindings[].members" \
--format="value(bindings.members)" \
--sort-by=bindings.members | uniq
#=>
. . .
serviceAccount:$SOME_SERVICE_ACCOUNT
. . .
user:$SOME_USER
. . .
其中包括通过uniq
传递任何重复的结果。
注意:上述命令保证列出与$GCP_PROJECT_NAME
关联的所有帐户,因为每个帐户都必须至少拥有一个角色:
gcloud projects add-iam-policy-binding $ANOTHER_USER \
--member="user:$ANOTHER_USER"
#=>
ERROR: (gcloud.projects.add-iam-policy-binding) argument --role: Must be specified.
如有必要,我们可以利用.flatten()
、.slice()
和.split()
gcloud
投影来摆脱serviceAccount:
和user:
前缀:
gcloud projects get-iam-policy $GCP_PROJECT_NAME \
--flatten="bindings[].members" \
--format="value(bindings.members.split(':').slice(1:).flatten())" \
--sort-by=bindings.members | uinq
#=>
. . .
$SOME_SERVICE_ACCOUNT
. . .
$SOME_USER
. . .
更多关于gcloud
预测here。
我们也可以使用--filter
标志过滤这个结果:
gcloud projects get-iam-policy $GCP_PROJECT_NAME \
--filter="user" \
--flatten="bindings[].members" \
--format="value(bindings.members.split(':').slice(1:).flatten())" \
--sort-by=bindings.members | uniq
#=>
. . .
$SOME_USER
. . .
和:
gcloud projects get-iam-policy $GCP_PROJECT_NAME \
--filter="serviceAccount" \
--flatten="bindings[].members" \
--format="value(bindings.members.split(':').slice(1:).flatten())" \
--sort-by=bindings.members | uniq
#=>
. . .
$SOME_SERVICE_ACCOUNT
. . .
【讨论】:
以上是关于如何列出我的 Google Cloud 项目的所有 IAM 用户的主要内容,如果未能解决你的问题,请参考以下文章
尝试在 google cloud shell 中列出项目并出现错误
Google Cloud Platform:使用 api 列出可用项目