我希望能够列出与我的项目关联的所有用户和服务账号(最好使用gcloud
CLI工具,但如果需要的话也可以进行API调用)。
我可以很容易地使用这个命令列出与项目相关的所有服务账号,但是如何列出所有用户呢?我期望得到类似于下面的结果,但是文档中找不到任何内容:
gcloud beta iam users list
我希望能够列出与我的项目关联的所有用户和服务账号(最好使用gcloud
CLI工具,但如果需要的话也可以进行API调用)。
我可以很容易地使用这个命令列出与项目相关的所有服务账号,但是如何列出所有用户呢?我期望得到类似于下面的结果,但是文档中找不到任何内容:
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"
gcloud projects get-iam-policy $GCP_PROJECT_NAME \
--flatten="bindings[].members" \
--format="table(bindings.members)"
$ gcloud asset search-all-iam-policies --scope=projects/123 | grep user:
gcloud organizations get-iam-policy ORGANIZATION_ID | grep user\: | sort | uniq
gcloud organizations list
很遗憾,无法使用该方法列出所有用户
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
投影,更多信息请参见这里。
我们还可以使用--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
. . .
for i in $(gcloud projects list |awk '/PROJECT_ID:/ {print$2}');
do
echo ">> checking $i";
gcloud projects get-iam-policy $i |grep -i YOURUSER ;
done
gcloud projects get-iam-policy MY_PROJECT
时,它不会列出任何具有继承权限(例如从文件夹继承的权限)的用户/电子邮件。或者有特殊的方法处理它们吗? - Graham Polley