【问题标题】:How do I list all IAM users for my Google Cloud Project如何列出我的 Google Cloud 项目的所有 IAM 用户
【发布时间】:2017-11-28 12:07:14
【问题描述】:

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

我可以使用this 轻松列出与项目关联的所有服务帐户,但是如何也列出所有用户呢?我希望出现以下内容,但我在文档中看不到任何内容:

gcloud beta iam users list

【问题讨论】:

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


    【解决方案1】:

    List all service accounts in a project

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

    $ 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
    

    List all Users and Service accounts in a project with their IAM roles

    如果您想列出在指定项目中被授予任何 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
    

    Formatting the output

    gcloud supports formatting the output as json and lot of other customizations as needed,在某些情况下可能更容易解析或仅打印您需要的信息。

    例子:

    # 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 projects get-iam-policy MY_PROJECT 时,它没有列出任何具有继承权限的用户/电子邮件(例如从文件夹)。还是与他们有什么特别的关系?
    • 如何让所有用户跨所有项目?
    • @james 要获得所有项目中的所有用户,您必须首先列出所有项目,然后对于每个项目,您必须使用上述建议获取该项目的绑定。跨度>
    • @GrahamPolley 要获取该信息,您将获得项目的祖先,然后您将获得项目的 IAM 策略绑定,然后您将获得它的每个父项的 IAM 绑定到树直到组织。
    • @lukwam 你能分享一下 bash 吗?提前致谢
    【解决方案2】:

    列出服务帐号

    $ 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"
    

    【讨论】:

      【解决方案3】:

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

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

      获取组织ID

      gcloud organizations list
      

      【讨论】:

        【解决方案4】:

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

        gcloud projects get-iam-policy $GCP_PROJECT_NAME \
        --flatten="bindings[].members" \
        --format="table(bindings.members)"
        

        【讨论】:

          【解决方案5】:

          您可以使用 search-all-iam-policies 列出项目/文件夹/组织的所有 IAM 策略,并 grep 用户:

          $ gcloud asset search-all-iam-policies --scope=projects/123 | grep user:
          

          这不仅会显示在项目本身中被授予角色的用户,还会显示在计算实例或 bigquery 数据集等子资源中被授予角色的用户。

          只要对范围有cloudasset.assets.searchAllIamPolicies权限,就可以将范围改为organizations/123在整个组织中搜索。

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

          【讨论】:

            【解决方案6】:

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

            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 预测here

            我们也可以使用--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
            . . .
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2014-10-31
              • 2020-09-14
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2021-07-08
              相关资源
              最近更新 更多