25

我希望能够列出与我的项目关联的所有用户和服务帐户(最好使用gcloudCLI 工具,但如果需要,很乐意进行 API 调用)。

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

gcloud beta iam users list
4

6 回答 6

37

列出项目中的所有服务帐号

以下命令列出与项目关联的所有服务帐户:

$ 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 角色

如果您想列出在指定项目中被授予任何 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)'
于 2017-06-25T18:59:18.323 回答
6

列出服务帐户

$ 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"
于 2019-09-04T08:23:07.023 回答
4

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

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

获取组织 ID

gcloud organizations list
于 2019-08-09T21:20:18.367 回答
4

使用以下命令可以清楚地查看属于给定项目的所有成员:

gcloud projects get-iam-policy $GCP_PROJECT_NAME \
--flatten="bindings[].members" \
--format="table(bindings.members)"
于 2019-07-12T13:04:36.050 回答
2

您可以使用 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 策略?

于 2020-03-16T02:43:10.910 回答
1

遗憾的是,无法列出所有使用

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
. . .
于 2021-07-05T18:10:25.030 回答