【问题标题】:How do I list the roles associated with a gcp service account?如何列出与 gcp 服务帐户关联的角色?
【发布时间】:2018-04-10 21:22:04
【问题描述】:

在谷歌云 gui 控制台中,我转到“IAM & admin”>“服务帐户”并创建了一个名为“my-service-account”的服务帐户,具有查看者角色。

然后我运行了这个命令:

gcloud iam service-accounts get-iam-policy my-service-account@mydomain.iam.gserviceaccount.com

看到了这个输出:

etag: ACAB

根据文档,这意味着此服务帐户没有与之关联的策略。所以我给它分配了一个不包含在它的“策略”中的“角色”。

如何列出与服务帐号关联的角色?

编辑: 感谢对这个问题的出色回答,我现在可以遍历所有项目并得到我想要的。因此,根据您的这些 cmd 工具的版本,这应该列出所有项目中单个服务帐户的所有角色绑定:

gcloud projects list | \
  awk '{print $1}' | \
  xargs -I % sh -c "echo ""; echo project:% && \
  gcloud projects get-iam-policy % \
  --flatten='bindings[].members' \
  --format='table(bindings.role)' \
  --filter='bindings.members:YOU-SERVICE-ACCOUNT@blah.com' \
  ;" 

【问题讨论】:

    标签: google-cloud-platform gcloud google-cloud-iam


    【解决方案1】:

    在 Google Cloud 中,您有针对项目和服务帐号的 IAM 政策。

    使用项目的 IAM 政策,您可以定义谁可以对您的 Google Cloud 项目中的资源执行特定操作。 将“查看者”角色添加到您修改了项目政策的服务帐户(即您的服务帐户可以在项目中执行的操作)

    另一方面,服务帐号的 IAM 政策用于控制谁拥有所有权以及谁可以访问服务帐号及其设置。 这是您使用发布的命令检索到的内容,但您没有获得任何东西,因为您获取的是服务帐户的策略,而不是项目的策略。

    要获取包含成员及其相应角色的项目的 IAM 策略,您可以运行 the following command

    gcloud projects get-iam-policy PROJECT_ID
    

    您可以在以下链接中找到有关服务帐户的更多信息:

    https://cloud.google.com/iam/docs/service-accounts

    https://cloud.google.com/iam/docs/granting-roles-to-service-accounts

    【讨论】:

    • 服务帐户可以跨项目吗?是否有一些功能可以让我查询服务帐户并查看其访问权限(而不是像您的命令示例那样相反)?
    • 你的意思是创建一个新的跨度项目?要创建一个项目,仅仅成为项目的所有者是不够的。所以我不确定,我明天测试,第二个答案是可以cloud.google.com/sdk/gcloud/reference/iam/service-accounts/…gcloud iam service-accounts get-iam-policy SERVICE_ACCOUNT @red888
    • 是的,我相信通过resourcemanager.projects.create cloud.google.com/resource-manager/docs/access-control-proj权限是可能的
    • gcloud project 现在被命名为 gcloud projects
    【解决方案2】:

    要过滤特定的服务帐户,以下 gcloud 命令可以解决问题:

    gcloud projects get-iam-policy <YOUR GCLOUD PROJECT>  \
    --flatten="bindings[].members" \
    --format="table(bindings.role)" \
    --filter="bindings.members:<YOUR SERVICE ACCOUNT>"
    

    给出很好的输出:

    ROLE
    roles/cloudtrace.agent
    roles/servicemanagement.serviceController
    roles/viewer
    

    格式参数当然可以根据您的特定需求进行调整。

    【讨论】:

    • 超级有帮助!我对此进行了修改以列出具有特定角色的服务帐户:gcloud projects get-iam-policy $PROJECT --flatten="bindings[].members" --format="table(bindings.members)" --filter="bindings.role:$ROLE"
    • --format 行的末尾有一个空格,它打破了换行符
    • 这太棒了!
    • 是否有用于过滤的 REST API?
    • 将此标记为答案正是我想要的
    【解决方案3】:

    您可以使用此命令列出分配给服务帐户的资源和角色:

    gcloud beta asset search-all-iam-policies --scope=organizations/123 --query="policy:456@cloudservices.gserviceaccount.com" | egrep "role:|resource:|gserviceaccount"
    

    只要您对范围具有 cloudasset.assets.searchAllIamPolicies 权限,就可以将范围更改为文件夹或项目。

    更多详情:How to list, find, or search iam policies across services (APIs), resource types, and projects in google cloud platform (GCP)?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-12-17
      • 2020-11-05
      • 2019-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-19
      • 2020-04-08
      相关资源
      最近更新 更多