如何列出我的 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 列出可用项目

如何转移 Google Cloud 项目所有权?

如何转让Google Cloud项目所有权?

以编程方式列出 Google Cloud Platform 项目中的 Oauth 2.0 客户端 ID

Google Cloud Resource Manager API:如何列出操作?