代码之家  ›  专栏  ›  技术社区  ›  xetra11

如何使用“gcloud”CLI列出所有服务帐户(也包括GCP创建的帐户)?

  •  0
  • xetra11  · 技术社区  · 2 年前

    使用时 gcloud iam service-accounts list 我只看到那些由我创建的服务帐户。但出于脚本原因,我想获得GCP创建的帐户。

    尤其是我在寻找 815330817453@cloudbuild.gserviceaccount.com 。由于我正在用地形创建我的GCP基础设施,我可以 依靠 815330817453 作为标识符,因此需要通过 gcloud

    然而 gcloud iam服务帐户列表 没有列出 cloudbuild.gserviceaccount.com 服务帐户(或任何其他类似的compute.gserviceaccount.com`

    0 回复  |  直到 2 年前
        1
  •  2
  •   M__    2 年前

    检查您的IAM角色,首先将角色IAM管理员/查看器添加到您的用户中,不要忘记将该命令与筛选器一起使用--项目 gcloud iam service-accounts list --project=PROJECTID 。 还检查IAM&管理员界面->服务帐户如果您可以查看所有服务帐户,这意味着您可以使用 gcloud 命令,如果不是,则您是用户正在扰乱角色

        2
  •  2
  •   DazWilkin    2 年前

    你的问题有几个重要的条件。

    服务帐户在谷歌云平台中具有双重作用。服务帐户是(两者)资源 可以用作身份。

    1.资源

    服务帐户是在谷歌云平台项目中创建(拥有)的资源。

    注释 服务帐户也可以应用于非项目资源,下面将排除(不包括)这些绑定。

    A项目 foo 拥有零个或多个服务帐户。对于项目( PROJECT ),这些可以列举:

    gcloud iam service-accounts list \
    --project=${PROJECT}
    
    2.身份

    A项目 foo 包括IAM策略,该策略可能引用零个或多个服务帐户。这些服务帐户可以在(拥有者)中创建 任何 谷歌云平台项目(不仅仅是引用它们的项目政策)。这些服务帐户包括谷歌管理的服务帐户,例如域中的服务帐户 gserviceaccount.com

    要枚举这些服务帐户,需要一个不同的命令。对于项目( 项目 ),这些可以列举:

    gcloud projects get-iam-policy ${PROJECT} \
    --flatten="bindings[].members[]" \
    --filter="bindings.members~\"serviceAccount:\"" \
    --format="value(bindings.members.split(sep=\":\").slice(1))"
    

    有点 粗糙的 :

    • --flatten 打破 bindings 分割成更易于使用的块
    • --filter 筛选组块以仅包括服务帐户
    • --format 解析 serviceAccount:foo 进入 foo

    gcloud 提供了不错的过滤和格式设置,但如果您更喜欢像这样的通用工具 jq ,则:

    FILTER='
      .bindings[].members[]
      |select(. | startswith("serviceAccount:"))
      |.[15:]
    '
    
    gcloud projects get-iam-policy ${PROJECT} \
    --format="json" \
    | jq -r "${FILTER}"
    

    说明:

    • .binding[].members[] 对于这些对象
    • select(. | startswith("serviceAccount:")) 选择 serviceAccount:
    • .[15:] 剥去 serviceAccount: (15) 留下帐户电子邮件