如果我转到 Google 云控制台中的“IAM 和管理”并选择左侧的“IAM”选项卡,我会看到用户列表(用户名@mydomain)。
如何使用 gcloud 列出这些用户?如何查看用户通过 gcloud 获得了哪些访问权限?
我无法在糟糕的谷歌文档中找到如何做到这一点。
我相信您会在这个 Stack Overflow 帖子上找到一些答案。祝你好运!文档也让我有点摸索。通常组装像
gcloud [title of console tool i was trying to find a CLI version of]
编辑,3年后!
您要查找的命令是 get-iam-policy:
gcloud projects get-iam-policy <project-id>
# Example:
gcloud projects get-iam-policy my-fancy-project
当然,这是假设 IAM 权限分配给“项目”级别的用户。您可能还想使用 get-ancestors-iam-policy,其中包括项目以及从文件夹和组织级别继承的角色:
gcloud projects get-ancestors-iam-policy <project-id>
# Example:
gcloud projects get-ancestors-iam-policy my-fancy-project
编辑 2:支持@jelle-den-burger 跟进
get-ancestors-iam-policy
命令,于 2020 年 9 月在 v311.0.0 中添加。
,但我只能看到列出角色的答案和角色和权限之间有区别。为了未来的访客(像我一样:))我将添加一个额外的命令。 差异说明:
GCP 中的权限允许访问特定类型的资源,而角色是一组此类权限。 例如编辑者角色拥有查看者角色拥有的所有权限,以及允许管理网络、实例等的附加权限。
compute.instances.create
是允许创建实例的权限。
roles/Editor
是包含此权限的角色。分配角色为用户提供了对资源的权限。解决方案:
或 ingernet ( gcloud projects get-ancestors-iam-policy <project-id>
) 提到的命令来完成,但是如果您想更具体地了解用户拥有什么样的权限,您需要深入挖掘。通过我的简短研究,我只能找到这个命令来描述角色包含哪些权限:
gcloud iam roles describe [ROLE]
示例gcloud iam roles describe roles/spanner.databaseAdmin
因此,您必须编写一个简短的 shell 脚本来连接这两个命令,第一个命令列出用户角色,第二个命令列出角色的权限。结果将是用户拥有的权限列表。
幸运的是,Google 考虑到了这一点,他们还提供了
get-ancestors-iam-policy
命令。你这样使用它:
gcloud projects get-ancestors-iam-policy <project-id>
# Example:
gcloud projects get-ancestors-iam-policy my-fancy-project
它将返回所有权限:在Project
、Folder 和 Organization 级别,就像在 Google Cloud Console 中一样。
如果您想了解特定实体在项目政策中拥有哪些权限而不需要阅读大型文档,非常有帮助。
gcloud projects get-iam-policy my-fancy-project --format=json | jq '.bindings[] | select(.members[] | contains("serviceAccount:theServiceAccount")) | .role'
将项目 IAM 策略显示为 JSON:gcloud projects get-iam-policy my-fancy-project --format=json
jq
.bindings[]
select(.members[] | contains("serviceAccount:theServiceAccount"))
.role
对包括祖先的策略的查询将是
gcloud projects get-ancestors-iam-policy my-fancy-project --format=json | jq '.[].policy.bindings[] | select(.members[] | contains("serviceAccount:theServiceAccount")) | .role'
gcloud-get-roles() {
gcloud projects get-iam-policy <your-fancy-project> | grep "role:" | awk '{print $2}'
}
gcloud-list-permissions() {
allPerm=
if [ -z "$@" ]; then
echo "Listing all permissions"
allPerm=true
else
echo "Listing permissions containing $@"
fi
while IFS= read -a role;
do
if [[ "$role" =~ ^projects/.* ]] || [[ "$role" =~ ^organizations/.* ]]; then
echo "Wrong role: $role, should not start with 'projects/' or 'organizations/"
continue
fi
if [ "$allPerm" == "true" ]; then
echo "Role: $role"
gcloud iam roles describe "$role" | grep -E "^- "
else
if gcloud iam roles describe "$role" | grep "$@" > /dev/null; then
echo "Role: $role"
gcloud iam roles describe "$role" | grep "$@"
fi
fi
done <<< "$(gcloud-get-roles)"
}
带参数的示例输出(您当然可以使用 without,这将列出所有权限;然后您可以在其中 grep)
$ gcloud-list-permissions iap
Listing permissions containing iap
Wrong role: projects/xxx, should not start with 'projects/' or 'organizations/
Role: roles/editor
- iap.projects.getSettings
- iap.projects.updateSettings
- iap.tunnelDestGroups.create
- iap.tunnelDestGroups.delete
- iap.tunnelDestGroups.get
- iap.tunnelDestGroups.list
- iap.tunnelDestGroups.update
- iap.web.getSettings
- iap.web.updateSettings
...