使用 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 工具命令。

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

其中:

  • BILLING_PROJECT 是启用了 Recommender API 的项目。或者,如果您在 gcloud 工具配置中将项目设置为 billing/quota_project,则此参数不是必需的。
  • --filter 是可选的,但可用于通过数据分析子类型过滤结果。
  • FORMATgcloud 工具支持的输出格式。 例如,如需将数据分析内容列为展平表,请按如下所述操作:
gcloud recommender insights list \
    --project=PROJECT \
    --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)"

API

运行以下 curl 命令。

curl \
  -H "Authorization: Bearer $(gcloud auth print-access-token)"  \
  -H "x-goog-user-project: WHITELISTED_PROJECT" \
  "https://recommender.googleapis.com/v1/projects/PROJECT/locations/global/insightTypes/google.cloudasset.asset.Insight/insights"

请求文件夹数据分析

如需请求文件夹数据分析,请完成以下步骤。

gcloud

运行以下 gcloud 工具命令。

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

其中:

  • BILLING_PROJECT 是启用了 Recommender API 的项目。或者,如果您在 gcloud 工具配置中将项目设置为 billing/quota_project,则此参数不是必需的。
  • --filter 是可选的,但可用于通过数据分析子类型过滤结果。
  • FORMATgcloud 工具支持的输出格式。 例如,如需将数据分析内容列为展平表,请按如下所述操作:
gcloud recommender insights list \
    --folder=FOLDER_NUMBER \
    --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)"

API

运行以下 curl 命令。

curl \
  -H "Authorization: Bearer $(gcloud auth print-access-token)"  \
  -H "x-goog-user-project: PROJECT" \
  "https://recommender.googleapis.com/v1/folders/FOLDER_NUMBER/locations/global/insightTypes/google.cloudasset.asset.Insight/insights"

请求组织数据分析

如需请求组织数据分析,请完成以下步骤。

gcloud

运行以下 gcloud 工具命令。

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

其中:

  • BILLING_PROJECT 是启用了 Recommender API 的项目。或者,如果您在 gcloud 工具配置中将项目设置为 billing/quota_project,则此参数不是必需的。
  • --filter 是可选的,但可用于通过数据分析子类型过滤结果。
  • FORMATgcloud 工具支持的输出格式。 例如,如需将数据分析内容列为展平表,请按如下所述操作:
gcloud recommender insights list \
    --organization=ORGANIZATION \
    --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)"

API

运行以下 curl 命令。

curl \
-H "Authorization: Bearer $(gcloud auth print-access-token)"  \
-H "x-goog-user-project: PROJECT" \
"https://recommender.googleapis.com/v1/organizations/ORGANIZATION

解读数据分析响应

除了标准数据分析特性之外,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 政策中不包含任何活跃用户或群组的项目。

其他 content 字段

除了响应中的标准字段外,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 Policy Search 来检索所有匹配政策。
  • 出于生成数据分析的目的,资源数据分析不会考虑服务帐号。