使用 Asset Insights

本主题介绍如何使用 Asset Insights 检测资产配置中的潜在风险,并帮助您改进安全态势。

概览

Cloud Asset Insights 根据与组织资源关联的 IAM 政策提供数据分析。它是 Recommender 服务的一部分,作为 google.cloudasset.asset.Insight 数据分析类型提供。数据分析是指需要进一步分析以确定适当操作的特定异常情况。它们每天根据 Cloud Asset Inventory 中存储的数据的快照生成。

准备工作

在开始使用 Asset Insights 之前,您必须完成以下步骤。

  1. 启用 Recommender API

  2. 请确保您的账号具有以下权限:

    • recommender.cloudAssetInsights.get

    • recommender.cloudAssetInsights.list

    • recommender.cloudAssetInsights.update

    您可以单独授予这些权限,也可以授予以下角色之一。

    • Cloud Asset Insights Viewer (roles/recommender.cloudAssetInsightsViewer) 角色

    • Cloud Asset Insights Admin (roles/recommender.cloudAssetInsightsAdmin) 角色

请求 Asset Insights

如需请求 Asset Insights,最简单的方式是按照以下步骤所示列出数据分析。对于其他类型的数据分析互动,请参阅 Recommender API 的数据分析指南

请求项目数据分析

如需请求项目的数据分析,请发出以下请求。

gcloud

运行以下 gcloud CLI 命令以列出项目、文件夹或组织的数据分析。

项目

gcloud recommender insights list \
    --project=PROJECT_ID \
    --location=global \
    --insight-type=google.cloudasset.asset.Insight \
    --filter="insightSubtype:SUBTYPE" \
    --format="FORMAT"

请提供以下值:

  • PROJECT_ID:您要获取数据分析的项目的 ID。

其他标志:

  • --filter:可选。按数据分析子类型过滤结果。

  • --format:可选。gcloud CLI 支持的输出格式。例如,如需将数据分析内容列出为扁平化表,请执行以下命令:

    gcloud recommender insights list \
        --project=PROJECT_ID \
        --location=global \
        --insight-type=google.cloudasset.asset.Insight \
        --flatten="content.matchedPolicies[].matchedBindings[].matchedMembers[]" \
        --format="table(insightSubtype, name,
            content.matchedPolicies.matchedBindings.matchedMembers,
            content.matchedPolicies.matchedBindings.role,
            content.matchedPolicies.resource)"
    

文件夹

gcloud recommender insights list \
    --folder=FOLDER_ID \
    --location=global \
    --insight-type=google.cloudasset.asset.Insight \
    --filter="insightSubtype:SUBTYPE" \
    --format="FORMAT"

请提供以下值:

  • FOLDER_ID:您要获取数据分析的文件夹的 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

其他标志:

  • --filter:可选。按数据分析子类型过滤结果。

  • --format:可选。gcloud CLI 支持的输出格式。例如,如需将数据分析内容列出为扁平化表,请执行以下命令:

    gcloud recommender insights list \
        --folder=FOLDER_ID \
        --location=global \
        --insight-type=google.cloudasset.asset.Insight \
        --flatten="content.matchedPolicies[].matchedBindings[].matchedMembers[]" \
        --format="table(insightSubtype, name,
            content.matchedPolicies.matchedBindings.matchedMembers,
            content.matchedPolicies.matchedBindings.role,
            content.matchedPolicies.resource)"
    

组织

gcloud recommender insights list \
    --organization=ORGANIZATION_ID \
    --location=global \
    --insight-type=google.cloudasset.asset.Insight \
    --filter="insightSubtype:SUBTYPE" \
    --format="FORMAT"

请提供以下值:

  • ORGANIZATION_ID:您要获取数据分析的组织的 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))"

其他标志:

  • --filter:可选。按数据分析子类型过滤结果。

  • --format:可选。gcloud CLI 支持的输出格式。例如,如需将数据分析内容列出为扁平化表,请执行以下命令:

    gcloud recommender insights list \
        --organization=ORGANIZATION_ID \
        --location=global \
        --insight-type=google.cloudasset.asset.Insight \
        --flatten="content.matchedPolicies[].matchedBindings[].matchedMembers[]" \
        --format="table(insightSubtype, name,
            content.matchedPolicies.matchedBindings.matchedMembers,
            content.matchedPolicies.matchedBindings.role,
            content.matchedPolicies.resource)"
    

REST

运行以下 curl 命令以列出项目、文件夹或组织的数据分析。

curl -X GET \
     -H "Authorization: Bearer $(gcloud auth print-access-token)"  \
     https://recommender.googleapis.com/v1/SCOPE/locations/global/insightTypes/google.cloudasset.asset.Insight/insights

请提供以下值:

  • 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 Insights 还提供多种专用的子类型和字段。

数据分析子类型

不同的 Asset Insight 子类型有七种。

  • EXTERNAL_MEMBER:检测包含属于组织网域外部网域的用户或群组的 IAM 政策。

  • EXTERNAL_POLICY_EDITOR:检测包含组织网域外部的用户或群组(拥有修改 IAM 政策的权限)的 IAM 政策。

  • EXTERNAL_CLOUD_STORAGE_OBJECT_VIEWER:检测包含组织网域外部的用户或群组(拥有获取或列出存储对象的权限(storage.objects.liststorage.objects.get permission))的 IAM 政策。

  • EXTERNAL_SERVICE_ACCOUNT_IMPERSONATOR:检测包含组织网域外部的用户或群组(拥有模拟服务账号的权限)的 IAM 政策。

  • TERMINATED_MEMBER:检测包含用户或群组(拥有已停用、已删除或已清除账号)的 IAM 政策。

  • PUBLIC_IAM_POLICY:检测包含所有用户或所有经过身份验证的用户的 IAM 政策。

  • OWNER_TERMINATED_PROJECT:检测项目的 IAM 政策中不包含任何活跃用户或群组的项目。

其他内容字段

除了响应中的标准字段之外,Asset Insights 还在 content 字段中提供了几个专用字段。

  • user:在针对此特定数据分析的政策绑定成员中检测到的特定用户电子邮件地址。此字段包含在 TERMINATED_MEMBER 子类型中。

  • domain:在此特定数据分析的政策绑定成员中检测到的特定网域。此字段包含在 EXTERNAL_MEMBEREXTERNAL_POLICY_EDITOREXTERNAL_CLOUD_STORAGE_OBJECT_VIEWEREXTERNAL_SERVICE_ACCOUNT_IMPERSONATOR 子类型中。

  • assetName:检测到此特定数据分析的访问权限的资源名称。此字段包含在 OWNER_TERMINATED_PROJECTPUBLIC_IAM_POLICY 子类型中。

  • policyCount:针对此特定数据分析中检测到匹配成员的不同 IAM 政策的总数。所有 Asset Insights 子类型都包括此字段。

  • matchedPolicies:与检测到的数据分析匹配的 IAM 政策样本。匹配政策仅包含与检测到的数据分析匹配的部分绑定和绑定成员。所有 Asset Insights 子类型都包含此字段。

  • policySearchQuery:可与 Cloud Asset Inventory IAM Policy Search API 搭配使用的查询,以便实时检索所有相关政策。

示例响应

以下代码段展示了示例响应的格式。

{
   "name": "organizations/1234567/locations/global/insightTypes/google.cloudasset.asset.Insight/insights/0ab35ae7-afa8-42a3-a173-92da8771a489",
   "description": "Domain example.com detected in 1 IAM policies",
   "content": {
      "domain": "example.com",
      "policyCount": 1,
      "policySearchQuery": "policy: example.com",
      "matchedPolicies" :[
         {
            "resource" :"//cloudresourcemanager.googleapis.com/projects/5678910",
            "project" :"projects/5678910",
            "matchedBindings" :[
               {
                  "role" :"roles/viewer",
                  "matchedMembers" :[
                     "user:example@example.com"
                  ]
               }
            ]
         }
      ]
   },
   "lastRefreshTime": "2020-12-04T06:59:04Z",
   "observationPeriod": "0s",
   "stateInfo": {
      "state": "ACTIVE"
   },
   "category": "SECURITY",
   "targetResources": [
      "//cloudresourcemanager.googleapis.com/organizations/1234567"
   ],
   "insightSubtype": "EXTERNAL_MEMBER",
   "etag": "\"00000000000\"",
   "initialRefreshTime": "2020-12-01T06:58:03Z"
}

限制

  • 这些数据分析不会将群组成员资格视为其发现结果的一部分,不应被视为匹配漏洞的详尽列表。

  • 单个数据分析包括匹配 IAM 政策采样(最多 100 项不同的政策)。可以通过调用 Cloud Asset Inventory 政策搜索来检索所有匹配的政策。

  • 出于生成数据分析的目的,资源数据分析不会考虑服务账号。