利用资产数据分析改善安全状况

Cloud Asset Inventory 数据分析有助于检测资产配置中的潜在风险,并帮助您改进安全态势。它是 Recommender 服务的一部分,并作为 google.cloudasset.asset.Insight 数据分析类型提供。

数据分析是一种特殊的异常值,需要进一步分析才能确定适当的操作。系统会根据存储在 Cloud Asset Inventory 中的数据的快照每天生成这些数据。

Cloud Asset Inventory 提供的数据分析基于与贵组织资源关联的 IAM 政策。

准备工作

在开始使用 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) 角色

限制

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

  • 单个数据分析包括匹配 IAM 政策采样(最多 100 项不同的政策)。您可以通过搜索资源的 IAM 允许政策来检索所有匹配政策。

请求素材资源数据分析

如需请求资产数据分析,最简单的方法是列出这些数据分析,如以下步骤所示。对于其他类型的数据分析互动,请参阅使用 API - 数据分析

gcloud

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

请提供以下值:

  • SCOPE:请使用以下某个值:

    • project=PROJECT_ID,其中 PROJECT_ID 是您要获取数据分析的项目的 ID。
    • folder=FOLDER_ID,其中 FOLDER_ID 是您要获取数据分析的文件夹的 ID。

      如何查找 Google Cloud 文件夹的 ID

      Google Cloud 控制台

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

      1. 转到 Google Cloud 控制台。

        前往 Google Cloud 控制台

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

      gcloud CLI

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

      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。为此,请使用顶级文件夹的 ID 运行以下命令:

      gcloud resource-manager folders list --folder=FOLDER_ID
    • organization=ORGANIZATION_ID,其中 ORGANIZATION_ID 是您要获取数据分析的组织的 ID。

      如何查找 Google Cloud 组织的 ID

      Google Cloud 控制台

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

      1. 转到 Google Cloud 控制台。

        前往 Google Cloud 控制台

      2. 点击菜单栏中的切换器列表框。
      3. 从列表框中选择您的组织。
      4. 点击全部标签页。组织 ID 显示在组织名称旁边。

      gcloud CLI

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

      gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"
  • BILLING_PROJECT_ID:可选。默认 Cloud Asset Inventory 服务代理所在的项目 ID,该项目 ID 具有管理您的结算和配额的权限。 详细了解如何设置结算项目

  • SUBTYPE:资产数据分析子类型。可采用下列任一值:

    • EXTERNAL_MEMBER:检测包含属于组织网域外部网域的用户或群组的 IAM 政策。
    • EXTERNAL_POLICY_EDITOR:检测包含组织网域外部的用户或群组(拥有修改 IAM 政策的权限)的 IAM 政策。
    • EXTERNAL_CLOUD_STORAGE_OBJECT_VIEWER:检测包含组织网域外部的用户或群组(拥有获取或列出存储对象的权限 [storage.objects.liststorage.objects.get 权限])的 IAM 政策。
    • EXTERNAL_SERVICE_ACCOUNT_IMPERSONATOR:检测包含组织网域外部的用户或群组(拥有模拟服务账号的权限)的 IAM 政策。
    • TERMINATED_MEMBER:检测包含用户或群组(拥有已停用、已删除或已清除账号)的 IAM 政策。
    • PUBLIC_IAM_POLICY:检测包含所有用户或所有经过身份验证的用户的 IAM 政策。
    • OWNER_TERMINATED_PROJECT:检测项目的 IAM 政策中不包含任何活跃用户或群组的项目。
  • 如果未指定,则返回所有子类型。

如需了解所有选项,请参阅 gcloud CLI 参考文档

示例

运行以下命令,列出 my-project 项目的数据分析。

gcloud recommender insights list \
    --project=my-project \
    --location=global \
    --insight-type=google.cloudasset.asset.Insight

示例响应

INSIGHT_ID: 00000000-0000-0000-0000-000000000000
CATEGORY: SECURITY
INSIGHT_STATE: ACTIVE
LAST_REFRESH_TIME: 2024-01-30T00:00:00Z
SEVERITY: LOW
INSIGHT_SUBTYPE: EXTERNAL_MEMBER
DESCRIPTION: Domain example.com detected in 1 IAM policies

REST

HTTP 方法和网址:

GET https://recommender.googleapis.com/v1/SCOPE_PATH/locations/global/insightTypes/google.cloudasset.asset.Insight/insights

标头:

X-Goog-User-Project: BILLING_PROJECT_ID

请提供以下值:

  • SCOPE_PATH:请使用以下某个值:

    允许使用的值包括:

    • projects/PROJECT_ID,其中 PROJECT_ID 是您要获取数据分析的项目的 ID。
    • projects/PROJECT_NUMBER,其中 PROJECT_NUMBER 是您要获取数据分析的项目的编号。

      如何查找 Google Cloud 项目编号

      Google Cloud 控制台

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

      1. 前往 Google Cloud 控制台中的欢迎页面。

        前往“欢迎”页面

      2. 点击菜单栏中的切换器列表框。
      3. 从列表框中选择您的组织,然后搜索项目名称。 项目名称、项目编号和项目 ID 显示在欢迎标题附近。

        最多显示 4,000 个资源。如果您没有看到要查找的项目,请前往管理资源页面,然后使用该项目的名称过滤列表。

      gcloud CLI

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

      gcloud projects describe PROJECT_ID --format="value(projectNumber)"
    • folders/FOLDER_ID,其中 FOLDER_ID 是您要获取数据分析的文件夹的 ID。

      如何查找 Google Cloud 文件夹的 ID

      Google Cloud 控制台

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

      1. 转到 Google Cloud 控制台。

        前往 Google Cloud 控制台

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

      gcloud CLI

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

      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。为此,请使用顶级文件夹的 ID 运行以下命令:

      gcloud resource-manager folders list --folder=FOLDER_ID
    • organizations/ORGANIZATION_ID,其中 ORGANIZATION_ID 是您要获取数据分析的组织的 ID。

      如何查找 Google Cloud 组织的 ID

      Google Cloud 控制台

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

      1. 转到 Google Cloud 控制台。

        前往 Google Cloud 控制台

      2. 点击菜单栏中的切换器列表框。
      3. 从列表框中选择您的组织。
      4. 点击全部标签页。组织 ID 显示在组织名称旁边。

      gcloud CLI

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

      gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"
  • BILLING_PROJECT_ID:默认 Cloud Asset Inventory 服务代理所在的项目 ID,该项目 ID 具有管理您的结算和配额的权限。 详细了解如何设置结算项目

命令示例

运行以下任一命令,列出 my-project 项目的数据分析。

curl(Linux、macOS 或 Cloud Shell)

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

PowerShell (Windows)

$cred = gcloud auth print-access-token

$headers = @{ 
  "X-Goog-User-Project" = "BILLING_PROJECT_ID";
  "Authorization" = "Bearer $cred"
}


Invoke-WebRequest `
  -Method GET `
  -Headers $headers `
  -Uri "https://recommender.googleapis.com/v1/projects/my-project/locations/global/insightTypes/google.cloudasset.asset.Insight/insights" | Select-Object -Expand Content

示例响应

{
   "name": "organizations/000000000000/locations/global/insightTypes/google.cloudasset.asset.Insight/insights/00000000-0000-0000-0000-000000000000",
   "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/000000000000",
            "project" :"projects/000000000000",
            "matchedBindings" :[
               {
                  "role" :"roles/viewer",
                  "matchedMembers" :[
                     "user:example@example.com"
                  ]
               }
            ]
         }
      ]
   },
   "lastRefreshTime": "2024-01-30T00:00:00Z",
   "observationPeriod": "0s",
   "stateInfo": {
      "state": "ACTIVE"
   },
   "category": "SECURITY",
   "targetResources": [
      "//cloudresourcemanager.googleapis.com/organizations/000000000000"
   ],
   "insightSubtype": "EXTERNAL_MEMBER",
   "etag": "\"00000000000\"",
   "initialRefreshTime": "2024-01-30T00:00:00Z"
}

解读数据分析响应

除了标准数据分析属性之外,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 政策样本。匹配政策将仅包含与检测到的数据分析相匹配的绑定和绑定成员的子集。所有资产数据分析子类型都包括此字段。

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