如何列出Google Cloud Project的所有IAM用户

时间:2017-06-25 12:26:10

标签: google-cloud-platform gcloud google-cloud-iam

我希望能够列出与我的项目相关联的所有用户和服务帐户(最好使用gcloud CLI工具,但很高兴能够进行API调用需要)。

我可以使用this轻松列出与项目关联的所有服务帐户,但如何列出所有用户呢?我期待以下内容,但我在doco中看不到任何内容:

gcloud beta iam users list

6 个答案:

答案 0 :(得分:16)

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)'

答案 1 :(得分: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组添加/影响到角色

$ gcloud projects add-iam-policy-binding [project] \
--member="group:my_group@googlegroups.com" \
--role="roles/storage.admin"

答案 2 :(得分:2)

您可以使用search-all-iam-policies列出项目/文件夹/组织的所有IAM策略,并grep用户:

$ gcloud beta 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)?

答案 3 :(得分:1)

以下命令将列出整个GCP组织中的所有非服务帐户:

gcloud organizations get-iam-policy ORGANIZATION_ID | grep user\: | sort | uniq

获取组织ID

gcloud organizations list

答案 4 :(得分:1)

不幸的是,无法使用

列出所有用户
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: 和 {{1} } 前缀:

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 . . . 投影 here

我们还可以使用 gcloud 标志过滤此结果:

--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
. . .

答案 5 :(得分:0)

以下命令可以清楚地显示您在GCP帐户中的项目成员: gcloud projects get-iam-policy $PROJECT_ID --flatten="bindings[].members" --format="table(bindings.members)"