分析 IAM 政策

本页面介绍如何使用政策分析器来确定哪些身份或主帐号(用户、服务帐号、群组和网域)对哪些 Google Cloud 资源拥有什么访问权限。

Policy Analyzer 可以帮助您回答的典型问题包括“谁可以访问此 IAM 服务帐号?”“谁可以读取此包含个人身份信息 (PII) 的 BigQuery 数据集中的数据?”或“谁可以在日期/时间 X 访问此 Cloud Storage 存储分区?”

您可以使用 AnalyzeIamPolicy 方法发出分析请求,然后在其响应中获取结果。请注意,分析结果可能不完整,具体取决于需要处理的数据量。如果您希望获得完整结果、写入结果以进行进一步分析或自行存储结果,则可以使用 AnalyzeIamPolicyLongrunning 来写入 BigQueryCloud Storage

概览

政策分析器允许您执行访问权限管理,可提供访问权限可见性,并且可用于审核和合规性相关任务。

特别是:

  • 政策分析器支持资源和政策层次结构和继承。在分析有效政策时,您指定的分析范围下的继承的政策和资源层次结构将被考虑在内。
  • 政策分析器支持用户群组扩展,因此即使用户被纳入某个群组,我们仍然可以帮助确定其访问权限。
  • 政策分析器支持角色到权限扩展,允许您按照权限和/或角色进行查询,从而提高查询的灵活性。
  • 政策分析器支持资源层次结构中一组有限的资源扩展。例如,在查询结果中,您可以展开项目中的所有虚拟机实例,或某一文件夹下的所有项目。
  • 政策分析器支持 IAM 条件角色绑定,但它可能需要有关请求的其他背景信息。比方说,为了根据日期/时间属性分析条件,政策分析器需要请求的时间点。注意:目前只能通过 API 和 gcloud 工具支持此功能。
  • 分析 IAM 政策时,政策分析器支持服务帐号模拟分析,包括许多级层的“链式”模拟。政策分析器可帮助分析通过服务帐号获得的任何间接访问权限。注意:目前只能通过 API 和 gcloud 工具支持此功能。

例如,以下分析用例是可行的:

  • 确定哪些主账号可以访问某个资源:查找已获得指定资源访问权限的主帐号。此类分析可用于回答如下问题:

    • “谁有权访问此 IAM 服务帐号?”
    • “谁有权模拟此 IAM 服务帐号?”
    • “谁是项目 A 的结算管理员?”
    • (仅限 API 和 gcloud 工具):“谁可以通过模拟服务帐号来更新项目 A”?
  • 确定哪些主帐号具有特定角色或权限:查找具有任意适用资源的指定角色/权限的主账号。此类分析可用于回答如下问题:

    • “在我的组织中谁有权模拟服务帐号?”
    • “谁是我所在组织的结算管理员?”
    • (仅限 API 和 gcloud 工具):“在我的组织中谁可以通过模拟服务帐号来读取 BigQuery 数据集?”
  • 确定主帐号对某个资源拥有什么访问权限:查找对特定主账号授予了指定资源的什么访问权限。此类分析可用于回答如下问题:

    • “用户 Ivy 拥有此 BigQuery 数据集的哪些角色和权限?”
    • dev-testers 群组对此项目中的任意资源拥有什么角色和权限?”
    • (仅限 API 和 gcloud 工具):“如果用户 Ivy 模拟服务帐号,那么 Ivy 对此 BigQuery 数据集拥有什么角色和权限?”
  • 确定主帐号可以访问哪些资源:查找主帐号有权访问的资源。这可用于回答以下问题:

    • “用户 Ivy 有权读取哪些 BigQuery 数据集?”
    • dev-testers 组是哪些 BigQuery 数据集的数据所有者?”
    • “John 可以删除项目 A 中的哪些虚拟机?”
    • (仅限 API 和 gcloud 工具):“用户 John 可以通过模拟服务帐号删除哪些虚拟机?”
  • 确定条件访问:查找主帐号针对给定的条件属性可以访问的资源。这可用于回答以下问题:

    • (仅限 API 和 gcloud 工具):“哪些主帐号在给定时间具有给定实例的 compute.instances.getcompute.instances.start 权限?”

准备工作

  • 您必须为项目启用 Cloud Asset API

  • 如果您使用 API 来运行这些查询,则需要设置环境和 gcurl

    1. 设置您的环境

    2. 要设置 gcurl 别名,请完成以下步骤。

      如果您在 Compute Engine 实例上,请运行以下命令。

      alias gcurl='curl -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
      -H "Content-Type: application/json" -X POST -H "X-HTTP-Method-Override: GET"'
      

      如果您不在 Compute Engine 实例上,请运行以下命令。

      alias gcurl='curl -H "$(oauth2l header --json CREDENTIALS cloud-platform)" \
      -H "Content-Type: application/json" -X POST -H "X-HTTP-Method-Override: GET"'
      

      其中,CREDENTIALS 是您的凭据文件路径,例如 ~/credentials.json

所需权限

要运行政策分析,您需要以下权限。

针对范围的权限

如需分析政策,您需要对要分析的范围具有以下 IAM 权限:

  • 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 角色的权限

如果您在请求中将文件夹或项目指定为范围,并且如果分析遇到具有在组织级层定义的 IAM 自定义角色的任何主帐号,那么您需要具有该角色的 iam.roles.get 权限,以便分析可以代表您使用该角色的定义。

Google Workspace 群组成员资格的权限

在检查哪些主账号可以访问某个资源时,如果您选择扩展群组的成员,我们会尝试使用您的最终用户凭据将群组扩展至成员。因此,您将只能看到您有权查看成员资格的群组的成员。

创建查询以确定主帐号拥有某个资源的哪些访问权限或主帐号拥有哪些资源的访问权限时,您需要指定主帐号。我们将尝试找出指定主账号(直接或间接)所属的群组。同样,我们会使用您的最终用户凭据;您将只能看到您有权查看成员资格的群组。

分析查询

分析查询由范围、一个或多个选择器以及其他高级选项组成。

范围

对于每个分析查询,您需要指定一个范围,即一个组织、一个文件夹或一个项目。定义在该范围内的所有 IAM 政策(处于或低于限定范围的资源级层)都将包含在分析中。因此,定义为高于限定范围的资源级层的 IAM 政策不在分析的考虑范围内。

资源选择器

通过资源选择器,您可以指定一个资源,以分析谁在指定范围内对该资源具有哪种访问权限。

如需了解详情,请查看 IamPolicyAnalysisQuery 参考。

身份选择器

通过身份选择器,您可以指定身份,以分析指定身份对指定范围内的哪些资源具有访问权限。

如需了解详情,请查看 IamPolicyAnalysisQuery 参考。

访问权限选择器

通过访问权限选择器,您可以指定多个角色或权限,以便了解谁对指定范围中的哪些资源拥有这些角色或权限。

如需了解详情,请查看 IamPolicyAnalysisQuery 参考。

高级选项

除了范围和选择器外,您还可以在查询中指定其他高级选项以取得更多结果。

如需了解详情,请查看 IamPolicyAnalysisQuery 参考。

确定哪些主账号可以访问某个资源

您可以使用政策分析器检查哪些主帐号对组织中的特定资源拥有特定角色或权限。要获取此信息,请创建关于主账号的查询,其中包含要分析其访问权限的资源以及要检查的一个或多个角色或权限。

控制台

  1. 在 Cloud Console 中,转到政策分析器页面。

    转到“政策分析器”页面

  2. 点击构建自定义查询下拉菜单,然后点击主帐号

  3. 资源字段中,输入要分析其访问权限的资源的完整资源名称。如果您不知道完整资源名称,请输入资源的显示名,然后从提供的资源列表中选择该资源。

  4. 选择角色和/或权限部分,选择要分析的一个或多个角色或权限:

    • 如需添加角色,请点击 添加角色。然后,从角色列表中选择一个角色。如需添加其他角色,请点击 添加其他角色,然后选择要添加的角色。
    • 如需添加权限,请点击 添加权限。然后,选择要添加的权限。如需添加其他权限,请点击 添加更多权限,然后选择要添加的权限。
  5. 可选:如需在结果页面中列出群组中的各个用户,请点击群组选项部分中的开关。

  6. 点击运行查询以运行查询。报告页面会显示您输入的查询参数,以及对指定资源拥有指定角色和权限的所有主帐号的结果表。

gcloud

您可以使用 asset analyze-iam-policy gcloud 命令在已启用 API 的项目上调用 AnalyzeIamPolicy。您必须运行 Cloud SDK 314.0.0 或更高版本。您可以使用 gcloud version 命令检查您的版本。

要检查 ORG_ID 下的哪些主账号拥有 FULL_RESOURCE_NAMECOMMA_SEPARATED_PERMISSIONS,请使用以下命令:

gcloud asset analyze-iam-policy --organization="ORG_ID" \
    --full-resource-name="FULL_RESOURCE_NAME" \
    --permissions="COMMA_SEPARATED_PERMISSIONS"

例如,检查哪些主帐号拥有组织 1234567890 下的 Compute Engine 实例 ipa-gce-instance-2compute.instances.getcompute.instances.start 权限:

gcloud asset analyze-iam-policy --organization="1234567890" \
    --full-resource-name="//compute.googleapis.com/projects/project1/zones/us-central1-a/instances/ipa-gce-instance-2" \
    --permissions="compute.instances.get,compute.instances.start"

REST

  1. 使用 gcurl 别名分析 IAM 政策并写入结果。

  2. 为请求正文创建文件 request.json,并将其内容设置为 JSON 格式的分析请求。

    例如,以下请求正文检查谁拥有 Compute Engine 实例 ipa-gce-instance-2compute.instances.getcompute.instances.start 权限:

    {
      "analysisQuery": {
        "resourceSelector": {
          "fullResourceName":
            "//compute.googleapis.com/projects/project1/zones/us-central1-a/instances/ipa-gce-instance-2"
         },
        "accessSelector": {
          "permissions": [
            "compute.instances.get",
            "compute.instances.start"
          ]
        }
      }
    }
    
  3. 使用以下 gcurl 命令分析 IAM 政策。

    gcurl -d @request.json  \
    "https://cloudasset.googleapis.com/v1/organizations/ORG_ID:analyzeIamPolicy"
    

    其中 ORG_ID 是您的组织 ID,例如 1234567890

确定哪些主帐号具有特定角色或权限

您可以使用政策分析器检查哪些主帐号具有组织中任意 Google Cloud 资源的特定角色或权限。要获取此信息,请创建关于主账号的查询,其中包含要检查的一个或多个角色或权限,但不指定资源。

控制台

  1. 在 Cloud Console 中,转到政策分析器页面。

    转到“政策分析器”页面

  2. 点击构建自定义查询下拉菜单,然后点击主帐号

  3. 资源字段留空。

  4. 选择角色和/或权限部分,选择要分析的一个或多个角色或权限:

    • 如需添加角色,请点击 添加角色。然后,从角色列表中选择一个角色。如需添加其他角色,请点击 添加其他角色,然后选择要添加的角色。
    • 如需添加权限,请点击 添加权限。然后,选择要添加的权限。如需添加其他权限,请点击 添加更多权限,然后选择要添加的权限。
  5. 可选:如需在结果页面中列出群组中的各个用户,请点击群组选项部分中的开关。

  6. 点击运行查询以运行查询。报告页面会显示您输入的查询参数,以及对项目中任意资源具有指定角色和权限的所有主帐号的结果表。

gcloud

您可以使用 asset analyze-iam-policy gcloud 命令在已启用 API 的项目上调用 AnalyzeIamPolicy。您必须运行 Cloud SDK 314.0.0 或更高版本。您可以使用 gcloud version 命令检查您的版本。

如需检查哪些主帐号拥有 ORG_ID 下的 COMMA_SEPARATED_PERMISSIONS,请使用以下命令:

gcloud asset analyze-iam-policy --organization="ORG_ID" \
    --permissions="COMMA_SEPARATED_PERMISSIONS"

例如,检查哪些主帐号拥有组织 1234567890 下的 compute.instances.getcompute.instances.start 权限:

gcloud asset analyze-iam-policy --organization="1234567890" \
    --permissions="compute.instances.get,compute.instances.start"

REST

  1. 使用 gcurl 别名分析 IAM 政策并写入结果。

  2. 为请求正文创建文件 request.json,并将其内容设置为 JSON 格式的分析请求。

    例如,以下请求正文检查哪些主帐号拥有任意适用资源的 compute.instances.getcompute.instances.start 权限:

    {
      "analysisQuery": {
        "accessSelector": {
          "permissions": [
            "compute.instances.get",
            "compute.instances.start"
          ]
        }
      }
    }
    
  3. 使用以下 gcurl 命令分析 IAM 政策。

    gcurl -d @request.json  \
    "https://cloudasset.googleapis.com/v1/organizations/ORG_ID:analyzeIamPolicy"
    

    其中 ORG_ID 是您的组织 ID,例如 1234567890

确定主帐号对某个资源拥有什么访问权限

您可以使用政策分析器检查主帐号对组织中某个资源拥有什么角色或权限。要获取此信息,请创建关于访问权限的查询,其中包含要分析其访问权限的主帐号以及要分析其访问权限的资源。

控制台

  1. 在 Cloud Console 中,转到政策分析器页面。

    转到“政策分析器”页面

  2. 资源字段中,输入要分析其访问权限的资源的完整资源名称。如果您不知道完整资源名称,请输入资源的显示名,然后从提供的资源列表中选择该资源。

  3. 主帐号字段中,输入用户、服务帐号或群组的名称。然后,从提供的主帐号列表中选择要分析其访问权限的用户、服务帐号或群组。

  4. 可选:如需在结果页面中列出角色中的权限,请点击角色选项部分中的开关。

  5. 点击运行查询以运行查询。报告页面会显示您输入的查询参数,以及指定主帐号对您输入的资源具有的所有角色的结果表。

gcloud

您可以使用 asset analyze-iam-policy gcloud 命令在已启用 API 的项目上调用 AnalyzeIamPolicy。您必须运行 Cloud SDK 314.0.0 或更高版本。您可以使用 gcloud version 命令检查您的版本。

要确定 USER 被授予了 ORG_ID 下的 FULL_RESOURCE_NAME 哪些角色和权限,请使用以下命令:

gcloud asset analyze-iam-policy --organization="ORG_ID" \
    --full-resource-name="FULL_RESOURCE_NAME" \
    --identity="USER"

例如,用户 user1@example.com 被授予组织 1234567890 下的 Compute Engine 实例 ipa-gce-instance-2 的哪些角色或权限:

gcloud asset analyze-iam-policy --organization="1234567890" \
    --full-resource-name="//compute.googleapis.com/projects/project1/zones/us-central1-a/instances/ipa-gce-instance-2" \
    --identity="user:user1@example.com"

REST

  1. 使用 gcurl 别名分析 IAM 政策并写入结果。

  2. 为请求正文创建文件 request.json,并将其内容设置为 JSON 格式的分析请求。

    例如,以下请求正文检查用户 user1@example.com 被授予了 Compute Engine 实例 ipa-gce-instance-2 的哪些角色或权限:

    {
      "analysisQuery": {
        "resourceSelector": {
          "fullResourceName":
            "//compute.googleapis.com/projects/project1/zones/us-central1-a/instances/ipa-gce-instance-2"
         },
        "identitySelector": {
          "identity": "user:user1@example.com"
        }
      }
    }
    
  3. 使用以下 gcurl 命令分析 IAM 政策。

    gcurl -d @request.json \
    "https://cloudasset.googleapis.com/v1/organizations/ORG_ID:analyzeIamPolicy"
    

    其中 ORG_ID 是您的组织 ID,例如 1234567890

确定主帐号可以访问哪些资源

您可以使用政策分析器检查主账号对组织中的哪些资源具有特定角色或权限。要获取此信息,请创建关于资源的查询,其中包含要分析其权限的主账号以及要检查的一个或多个权限或角色。

控制台

  1. 在 Cloud Console 中,转到政策分析器页面。

    转到“政策分析器”页面

  2. 点击构建自定义查询下拉菜单,然后点击资源

  3. 主帐号字段中,输入用户、服务帐号或群组的名称。然后,从提供的主帐号列表中选择要分析其访问权限的用户、服务帐号或群组。

  4. 选择角色和/或权限部分,选择要分析的一个或多个角色或权限:

    • 如需添加角色,请点击 添加角色。然后,从角色列表中选择一个角色。如需添加其他角色,请点击 添加其他角色,然后选择要添加的角色。
    • 如需添加权限,请点击 添加权限。然后,选择要添加的权限。如需添加其他权限,请点击 添加更多权限,然后选择要添加的权限。
  5. 可选:如需在结果页面中列出项目中的资源,请点击资源选项部分中的开关。

  6. 点击运行查询以运行查询。报告页面会显示您输入的查询参数,以及指定主帐号对其拥有输入角色或权限的所有资源的结果表。

gcloud

您可以使用 asset analyze-iam-policy gcloud 命令在已启用 API 的项目上调用 AnalyzeIamPolicy。您必须运行 Cloud SDK 314.0.0 或更高版本。您可以使用 gcloud version 命令检查您的版本。

要确定 USERORG_ID 下的哪些资源拥有 COMMA_SEPARATED_PERMISSIONS,请使用以下命令:

gcloud asset analyze-iam-policy --organization="ORG_ID" \
    --identity="USER" \
    --permissions="COMMA_SEPARATED_PERMISSIONS"

例如,在组织 1234567890 下,user1@example.com 拥有哪些资源的 compute.instances.getcompute.instances.start 权限:

gcloud asset analyze-iam-policy --organization="1234567890" \
    --identity="user:user1@example.com" \
    --permissions="compute.instances.get,compute.instances.start"

REST

  1. 使用 gcurl 别名分析 IAM 政策并写入结果。

  2. 为请求正文创建文件 request.json,并将其内容设置为 JSON 格式的分析请求。

    例如,以下请求正文检查 user1@example.com 拥有哪些资源的 compute.instances.getcompute.instances.start 权限:

    {
      "analysisQuery": {
        "identitySelector": {
          "identity": "user:user1@example.com"
         },
        "accessSelector": {
          "permissions": [
            "compute.instances.get",
            "compute.instances.start"
          ]
        }
      }
    }
    
  3. 使用以下 gcurl 命令分析 IAM 政策。

    gcurl -d @request.json  \
    "https://cloudasset.googleapis.com/v1/organizations/ORG_ID:analyzeIamPolicy"
    

    其中 ORG_ID 是您的组织 ID,例如 1234567890

确定条件式访问权限

政策分析器可以分析 IAM 条件角色绑定,以确定哪些主帐号具有所需的条件特性来限制其对资源的访问。例如,可以为一个服务帐号授予一个或多个角色,以便访问只允许在特定日期和时间内访问的资源。

您可以在 ConditionContext 字段中设置 accessTime,以启用日期/时间特性条件式角色绑定分析。

gcloud

您可以使用 asset analyze-iam-policy gcloud 命令在已启用 API 的项目上调用 AnalyzeIamPolicy。您必须运行 Cloud SDK 335.0.0 或更高版本。您可以使用 gcloud version 命令检查您的版本。

要检查哪些主账号对 ORG_ID 下的 DATE_TIME 中的 FULL_RESOURCE_NAME 具有 COMMA_SEPARATED_PERMISSIONS,请使用以下命令:

gcloud asset analyze-iam-policy --organization="ORG_ID" \
    --full-resource-name="FULL_RESOURCE_NAME" \
    --permissions="COMMA_SEPARATED_PERMISSIONS" \
    --access-time="DATE_TIME"

例如,检查哪些主帐号对组织 1234567890 下的 2099-03-01T00:00:00Z 中的 Compute Engine 实例 ipa-gce-instance-2 具有 compute.instances.getcompute.instances.start 权限。如需了解时间格式,请参阅 gcloud topic datetimes

gcloud asset analyze-iam-policy --organization="1234567890" \
    --full-resource-name="//compute.googleapis.com/projects/project1/zones/us-central1-a/instances/ipa-gce-instance-2" \
    --permissions="compute.instances.get,compute.instances.start" \
    --access-time="2099-03-01T00:00:00Z"

REST

  1. 使用 gcurl 别名分析 IAM 政策并写入结果。

  2. 为请求正文创建文件 request.json,并将其内容设置为 JSON 格式的分析请求。

    例如,以下请求正文将检查谁对位于 2099-03-01T00:00:00Z 的 Compute Engine 实例 ipa-gce-instance-2 具有 compute.instances.getcompute.instances.start 权限:

    {
      "analysisQuery": {
        "resourceSelector": {
          "fullResourceName":
            "//compute.googleapis.com/projects/project1/zones/us-central1-a/instances/ipa-gce-instance-2"
         },
        "accessSelector": {
          "permissions": [
            "compute.instances.get",
            "compute.instances.start"
          ]
        },
        "conditionContext": {
          "accessTime": "2099-03-01T00:00:00Z"
        }
      }
    }
    
  3. 使用以下 gcurl 命令分析 IAM 政策。

    gcurl -d @request.json  \
    "https://cloudasset.googleapis.com/v1/organizations/ORG_ID:analyzeIamPolicy"
    

    其中 ORG_ID 是您的组织 ID,例如 1234567890

客户端库和 API 参考文档

构建查询

如需了解查询的其他用例和选项,请参阅分析 IAM 政策查询示例

限制

  • Cloud Console 中的政策分析器不支持分析服务帐号模拟。如果您要分析服务帐号模拟,请使用 REST API 或 gcloud 工具。

  • IAM 条件支持受到限制。请参阅上文的确定条件访问

  • 并非所有资源类型都受支持。请查看支持的资源类型列表