我希望能够列出与我的项目关联的所有用户和服务帐户(最好使用gcloud
CLI 工具,但如果需要,很乐意进行 API 调用)。
我可以使用它轻松列出与项目关联的所有服务帐户,但如何也列出所有用户?我期待类似以下的内容,但我在 doco 中看不到任何内容:
gcloud beta iam users list
我希望能够列出与我的项目关联的所有用户和服务帐户(最好使用gcloud
CLI 工具,但如果需要,很乐意进行 API 调用)。
我可以使用它轻松列出与项目关联的所有服务帐户,但如何也列出所有用户?我期待类似以下的内容,但我在 doco 中看不到任何内容:
gcloud beta iam users list
以下命令列出与项目关联的所有服务帐户:
$ 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
如果您想列出在指定项目中被授予任何 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
gcloud
支持根据需要格式化输出json
和许多其他自定义,在某些情况下可能更容易解析或仅打印您需要的信息。
例子:
# 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 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"
$ gcloud projects add-iam-policy-binding [project] \
--member="group:my_group@googlegroups.com" \
--role="roles/storage.admin"
以下命令将列出整个 GCP 组织中的所有非服务帐户:
gcloud organizations get-iam-policy ORGANIZATION_ID | grep user\: | sort | uniq
获取组织 ID
gcloud organizations list
使用以下命令可以清楚地查看属于给定项目的所有成员:
gcloud projects get-iam-policy $GCP_PROJECT_NAME \
--flatten="bindings[].members" \
--format="table(bindings.members)"
您可以使用 search-all-iam-policies 列出项目/文件夹/组织的所有 IAM 策略,并 grep 用户:
$ gcloud asset search-all-iam-policies --scope=projects/123 | grep user:
这不仅会显示在项目本身中被授予角色的用户,还会显示在计算实例或 bigquery 数据集等子资源中被授予角色的用户。
只要您对范围有cloudasset.assets.searchAllIamPolicies
权限,您就可以将范围更改为 organizations/123 以在整个组织中搜索。
另一篇文章中的更多详细信息:如何在谷歌云平台 (GCP) 中跨服务 (API)、资源类型和项目列出、查找或搜索 iam 策略?
遗憾的是,无法列出所有使用
gcloud iam . . .
命令树;但是,我们可以$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
的预测。
我们还可以使用--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
. . .