查看有效的 IAM 政策

本主题介绍如何查看有效的 Identity and Access Management (IAM) 政策。

在 IAM 中,“有效政策”描述了如何为资源沿用资源层次结构中的所有父级和祖先政策。

范围和权限

请求有效的 IAM 政策时,您必须指定 范围。它可以是组织、文件夹或项目。系统会返回在该范围内或该范围下设置的所有 IAM 政策。请求的范围 必须与为 Cloud Asset API 启用的项目相同。 此外,启用的项目和请求范围需要的 权限。

支持的政策类型

有效的 IAM 政策仅支持 IAM 允许政策。不支持以下形式的访问权限控制:

准备工作

在开始之前,请完成以下步骤。

  1. 为您的项目启用 Cloud Asset Inventory API。

    启用 Cloud Asset Inventory API

    此项目不必与范围相同 部分。详细了解 在启用服务时设置项目

  2. 安装 Google Cloud SDK

  3. 可选:如需直接调用 Cloud Asset Inventory API,请确认您有权使用 curl 命令。

  4. 设置权限。

    1. 为 Cloud Asset API 配置权限

    2. 为请求范围启用以下权限。

      • cloudasset.assets.analyzeIamPolicy

      • cloudasset.assets.searchAllResources

      • cloudasset.assets.searchAllIamPolicies

      以下预定义角色包含这些权限:

      • Cloud Asset Owner (roles/cloudasset.owner)

      • Cloud Asset Viewer (roles/cloudasset.viewer)

      如需详细了解 Cloud Asset API 权限和角色,请参阅访问权限控制

获取有效的 IAM 政策

gcloud

要获取资源的有效 IAM 政策,您可以调用 BatchGetEffectiveIamPolicies 使用 gcloud asset get-effective-iam-policy 命令。您必须运行 Google Cloud CLI 版本 399.0.0 或更新版本。

gcloud asset get-effective-iam-policy \
    --scope=SCOPE \
    --names=ASSET_NAME_1,ASSET_NAME_2,...

请提供以下值:

  • SCOPE:范围可以是项目、文件夹或组织。

    允许使用的值包括:

    • projects/PROJECT_ID

    • projects/PROJECT_NUMBER

      如何查找 Google Cloud 项目编号

      控制台

      如需查找 Google Cloud 项目编号,请完成以下步骤:

      1. 前往 Google Cloud 控制台中的信息中心页面。

        转到信息中心

      2. 点击菜单栏中的切换器框。
      3. 请选择框中选择您的组织,然后搜索项目名称。
      4. 点击项目名称以切换到相应项目。项目编号显示在项目信息卡片中。

      gcloud CLI

      您可以使用以下命令检索 Google Cloud 项目编号:

      gcloud projects describe PROJECT_ID --format="value(projectNumber)"

    • folders/FOLDER_ID

      如何查找 Google Cloud 文件夹 ID

      控制台

      如需查找 Google Cloud 文件夹 ID,请完成以下步骤:

      1. 转到 Google Cloud 控制台。

        前往 Google Cloud 控制台

      2. 点击菜单栏中的切换器框。
      3. 点击选择范围框,然后选择您的组织。
      4. 搜索您的文件夹名称。文件夹 ID 显示在文件夹名称旁边。

      gcloud CLI

      您可以使用以下命令检索位于组织级别的 Google Cloud 文件夹 ID:

      gcloud resource-manager folders list \
          --organization=$(gcloud organizations describe ORGANIZATION_NAME \
            --format="value(name.segment(1))") \
          --filter='"DISPLAY_NAME":"TOP_LEVEL_FOLDER_NAME"' \
          --format="value(ID)"

      其中,TOP_LEVEL_FOLDER_NAME 可以是字符串完全匹配或部分匹配。移除 --format 选项可查看有关找到的文件夹的更多信息。

      如需获取另一个文件夹中的文件夹的 ID,请列出子文件夹:

      gcloud resource-manager folders list --folder=FOLDER_ID

    • organizations/ORGANIZATION_ID

      如何查找 Google Cloud 组织 ID

      控制台

      如需查找 Google Cloud 组织 ID,请完成以下步骤:

      1. 转到 Google Cloud 控制台。

        前往 Google Cloud 控制台

      2. 点击菜单栏中的切换器框。
      3. 点击请选择:复选框,然后选择您的组织。
      4. 点击全部标签页。组织 ID 显示在组织名称旁边。

      gcloud CLI

      您可以使用以下命令检索 Google Cloud 组织 ID:

      gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"

  • ASSET_NAME:以英文逗号分隔的资产列表 全名来检索 有效的 IAM 政策。

    一个批次中最多可以检索 20 项资产的政策。

以下代码示例是示例 gcloud CLI 命令:

  • 对于 123456 的组织 ID:

    gcloud asset get-effective-iam-policy \
        --scope=organizations/123456 \
        --names=//cloudresourcemanager.googleapis.com/organizations/123456
    
  • 如果文件夹 ID 为 1234567,则:

    gcloud asset get-effective-iam-policy \
        --scope=folders/1234567 \
        --names=//cloudresourcemanager.googleapis.com/folders/1234567
    
  • 对于名为 my-project 的项目中的两个 Cloud SQL 实例资源:

    gcloud asset get-effective-iam-policy \
        --scope=projects/my-project \
        --names=//cloudsql.googleapis.com/projects/my-project/instances/instance1,//cloudsql.googleapis.com/projects/my-project/instances/instance2
    

REST

要使用 Cloud Asset Inventory API,请使用以下 curl 命令:

curl -X POST \
     -H "X-HTTP-Method-Override: GET" \
     -H "Authorization: Bearer $(gcloud auth print-access-token)" \
     -H "Content-Type: application/json" \
     -d '{
          "names": [
            "ASSET_NAME_1",
            "ASSET_NAME_2",
            "..."
          ]
         }' \
     https://cloudasset.googleapis.com/v1/SCOPE/effectiveIamPolicies:batchGet

请提供以下值:

  • ASSET_NAME:要检索有效 IAM 政策的资源全名的逗号分隔列表。

    一个批次中最多可以检索 20 项资产的政策。

  • SCOPE:范围可以是项目、文件夹或组织。

    允许使用的值包括:

    • projects/PROJECT_ID

    • projects/PROJECT_NUMBER

      如何查找 Google Cloud 项目编号

      控制台

      如需查找 Google Cloud 项目编号,请完成以下步骤:

      1. 前往 Google Cloud 控制台中的信息中心页面。

        转到信息中心

      2. 点击菜单栏中的切换器框。
      3. 请选择框中选择您的组织,然后搜索项目名称。
      4. 点击项目名称以切换到相应项目。项目编号显示在项目信息卡片中。

      gcloud CLI

      您可以使用以下命令检索 Google Cloud 项目编号:

      gcloud projects describe PROJECT_ID --format="value(projectNumber)"

    • folders/FOLDER_ID

      如何查找 Google Cloud 文件夹 ID

      控制台

      如需查找 Google Cloud 文件夹 ID,请完成以下步骤:

      1. 转到 Google Cloud 控制台。

        前往 Google Cloud 控制台

      2. 点击菜单栏中的切换器框。
      3. 点击选择范围框,然后选择您的组织。
      4. 搜索您的文件夹名称。文件夹 ID 显示在文件夹名称旁边。

      gcloud CLI

      您可以使用以下命令检索位于组织级别的 Google Cloud 文件夹 ID:

      gcloud resource-manager folders list \
          --organization=$(gcloud organizations describe ORGANIZATION_NAME \
            --format="value(name.segment(1))") \
          --filter='"DISPLAY_NAME":"TOP_LEVEL_FOLDER_NAME"' \
          --format="value(ID)"

      其中,TOP_LEVEL_FOLDER_NAME 可以是字符串完全匹配或部分匹配。移除 --format 选项可查看有关找到的文件夹的更多信息。

      如需获取另一个文件夹中的文件夹的 ID,请列出子文件夹:

      gcloud resource-manager folders list --folder=FOLDER_ID

    • organizations/ORGANIZATION_ID

      如何查找 Google Cloud 组织 ID

      控制台

      如需查找 Google Cloud 组织 ID,请完成以下步骤:

      1. 转到 Google Cloud 控制台。

        前往 Google Cloud 控制台

      2. 点击菜单栏中的切换器框。
      3. 点击请选择:复选框,然后选择您的组织。
      4. 点击全部标签页。组织 ID 显示在组织名称旁边。

      gcloud CLI

      您可以使用以下命令检索 Google Cloud 组织 ID:

      gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"