如何使用 gcloud 列出和查看用户的权限?

问题描述 投票:0回答:5

如果我转到 Google 云控制台中的“IAM 和管理”并选择左侧的“IAM”选项卡,我会看到用户列表(用户名@mydomain)。

如何使用 gcloud 列出这些用户?如何查看用户通过 gcloud 获得了哪些访问权限?

我无法在糟糕的谷歌文档中找到如何做到这一点。

gcloud google-cloud-platform
5个回答
21
投票

我相信您会在这个 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 中添加。

    


8
投票
询问权限

,但我只能看到列出角色的答案角色和权限之间有区别。为了未来的访客(像我一样:))我将添加一个额外的命令。 差异说明:

GCP 中的

权限

允许访问特定类型的资源,而角色一组此类权限。 例如编辑者角色拥有查看者角色拥有的所有权限,以及允许管理网络、实例等的附加权限。

compute.instances.create

是允许创建实例的权限。

roles/Editor
是包含此权限的角色。分配角色为用户提供了对资源的权限。
解决方案:

列出角色可以通过

Jelle den Burger

ingernet ( gcloud projects get-ancestors-iam-policy <project-id> ) 提到的命令来完成,但是如果您想更具体地了解用户拥有什么样的权限,您需要深入挖掘。通过我的简短研究,我只能找到这个命令来描述角色包含哪些权限:

gcloud iam roles describe [ROLE]

示例

gcloud iam roles describe roles/spanner.databaseAdmin

因此,您必须编写一个简短的 shell 脚本来连接这两个命令,第一个命令列出用户角色,第二个命令列出角色的权限。结果将是用户拥有的

权限

列表。


5
投票

幸运的是,Google 考虑到了这一点,他们还提供了

get-ancestors-iam-policy

命令。你这样使用它:

gcloud projects get-ancestors-iam-policy <project-id>

# Example:
gcloud projects get-ancestors-iam-policy my-fancy-project

它将返回所有权限:在 
Project

FolderOrganization 级别,就像在 Google Cloud Console 中一样。

如果您想了解特定实体在项目政策中拥有哪些权限而不需要阅读大型文档,

2
投票

jq

 非常有帮助。

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
  1. 将其插入
  2. jq
  3. 适用于文档中的所有绑定 
  4. .bindings[]
  5. 如果实体存在于成员列表中,则选择绑定
  6. select(.members[] | contains("serviceAccount:theServiceAccount"))
  7. 提取绑定的角色:
  8. .role
  9. 
    
这里的几个答案还解释了项目策略与如何从文件夹和组织等祖先授予权限之间的区别。你也应该阅读这些!

对包括祖先的策略的查询将是

gcloud projects get-ancestors-iam-policy my-fancy-project --format=json | jq '.[].policy.bindings[] | select(.members[] | contains("serviceAccount:theServiceAccount")) | .role'

    


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.