查看资产历史记录

本页面介绍如何查看资产的历史记录。借助 Cloud Asset API,您可以查看时间窗口与过去 5 周内的给定时间段重叠的多个资产的事件更改历史记录。事件更改历史记录会显示指定资产在一段时间内的所有创建、删除和更新事件。

准备工作

gcloud

  1. 您必须先启用 Cloud Asset API,然后才能使用 gcloud 工具访问 Cloud Asset Inventory。请注意,只需在您将运行 Cloud Asset API 命令的项目中启用 API。
    启用 Cloud Asset Inventory API
  2. 在本地客户端上安装 Cloud SDK

API

  1. 在本地计算机上安装 oauth2l,以便与 Google OAuth 系统进行互动。
  2. 确认您可以使用 Unix curl 命令。
  3. 确保您的帐号已被授予您的项目、文件夹或组织的以下角色之一:

    • Cloud Asset Viewer (roles/cloudasset.viewer)
    • Owner 基本角色 (roles/owner)

配置帐号

根据 API 请求的 contentType 参数,要调用 Cloud Asset API,您必须向帐号授予包含以下权限的角色,这些权限为包含您要获取其历史记录的资产的根/父级资源(项目或组织)上的权限:

  • cloudasset.assets.exportResource
  • cloudasset.assets.exportIamPolicy
  • cloudasset.assets.exportOrgPolicy
  • cloudasset.assets.exportAccessPolicy

如果您的帐号已被授予资源根的 Cloud Asset Viewer (roles/cloudasset.viewer) 角色、Cloud Asset Owner (roles/cloudasset.owner) 角色或 Owner (roles/owner) 基本角色,则该账号已具有调用 Cloud Asset API 的足够权限。否则,请按照配置权限页面中的步骤操作。

获取资产历史记录

要使用 Cloud Asset API 获取项目中时间窗口与给定时间段重叠的指定资产创建、删除和更新历史记录,请按照以下过程操作。

gcloud

要开始使用 gcloud 工具,请先查看 Cloud SDK 文档。您可以使用 --help 标志来获取工具、资源和命令的帮助:

gcloud asset --help

您也可以在 gcloud assetCloud SDK 参考中找到使用 --help 标志显示的帮助文本。

本部分中显示的 gcloud asset get-history 会获取项目的历史记录。如需获取组织的历史记录,请在命令中使用 --organization=ORGANIZATION_ID 标志。

以下示例获取项目中资产的历史记录

请注意,start-time 必须为晚于当前时间减去 35 天的时间。

  1. 确保完成配置帐号,以便调用 Cloud Asset API。
  2. 确定要查找其历史记录的资产的完整资源名称。在此处查看 Cloud Asset API 格式的名称列表。这是以下示例中的 asset-names 变量。
  3. 确定时间范围的开始时间和结束时间(采用 RFC 3339 世界协调时间 (UTC) 格式)。只有开始时间是必需的。 如需了解详情,请参阅 TimeWindow
  4. 确定您要在哪个级层获取资产历史记录。下面的示例命令展示了如何获取不同种类的资产的历史记录。

获取项目中指定资产的历史记录,包括所有资源元数据:

YESTERDAY=$(TZ=GMT date +"%Y-%m-%dT%H:%M:%SZ" -d "yesterday")
NOW=$(TZ=GMT date +"%Y-%m-%dT%H:%M:%SZ")
gcloud asset get-history --project='PROJECT_ID' \
  --asset-names='//compute.googleapis.com/projects/test-project/zo\
nes/us-central1-f/instances/instance1' \
  --start-time=$YESTERDAY \
  --end-time=$NOW --content-type='resource'

获取项目中指定资产的所有 IAM 政策的历史记录:

YESTERDAY=$(TZ=GMT date +"%Y-%m-%dT%H:%M:%SZ" -d "yesterday")
NOW=$(TZ=GMT date +"%Y-%m-%dT%H:%M:%SZ")
gcloud asset get-history --project='PROJECT_ID' \
  --asset-names='//cloudresourcemanager.googleapis.com/projects/10\
179387634' --start-time=$YESTERDAY \
  --end-time=$NOW \
  --content-type='iam-policy'
 

API

本部分中显示的命令会获取项目的历史记录。如需获取组织的历史记录,请在 gcurl 命令中使用 https://cloudasset.googleapis.com/v1/organizations/ORGANIZATION_NUMBER:batchGetAssetsHistory REST 方法。

  1. 确保完成配置帐号,以便调用 Cloud Asset API。
  2. 确定要查找其历史记录的资产的完整资源名称。在此处查看 Cloud Asset API 格式的名称列表。以下示例使用 //compute.googleapis.com/projects/my_project_id/global/firewalls/default-firewall
  3. 确定时间范围的开始时间和结束时间(采用 RFC 3339 UTC 格式)。 只有开始时间是必需的。 如需了解详情,请参阅 TimeWindow
  4. 确定您要在哪个级层获取资产历史记录。以下示例命令展示了如何获取不同种类的资产的历史记录。

设置 TOKEN 变量

要获取访问令牌,请使用 ~/credentials.json 文件运行以下命令。

oauth2l header --json ~/credentials.json cloud-platform

您应该会看到类似如下所示的输出,其中 y29.xxxxxx 为访问令牌:

Authorization: Bearer y29.xxxxxxx

TOKEN 变量设置为访问令牌:

TOKEN=y29.xxxxxxx

获取项目中指定资产的历史记录,包括所有资源元数据

YESTERDAY=$(TZ=GMT date +"%Y-%m-%dT%H:%M:%SZ" -d "yesterday")
curl -X POST  -H "X-HTTP-Method-Override: GET" \
     -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
     -d '{"contentType":"RESOURCE", \
          "assetNames": \
            "//compute.googleapis.com/projects/my_project_id/global/firewalls/default-firewall", \
          "readTimeWindow": {"startTime": "'$YESTERDAY'"}}' \
     https://cloudasset.googleapis.com/v1/projects/PROJECT_NUMBER:batchGetAssetsHistory

获取项目中指定资产的历史记录,不包括资源元数据

YESTERDAY=$(TZ=GMT date +"%Y-%m-%dT%H:%M:%SZ" -d "yesterday")
curl -X POST  -H "X-HTTP-Method-Override: GET" \
     -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
     -d '{"assetNames": \
            "//compute.googleapis.com/projects/my_project_id/global/firewalls/default-firewall", \
          "readTimeWindow": {"startTime": "'$YESTERDAY'"}}' \
     https://cloudasset.googleapis.com/v1/projects/PROJECT_NUMBER:batchGetAssetsHistory

获取项目中指定资产的所有 IAM 政策的历史记录

YESTERDAY=$(TZ=GMT date +"%Y-%m-%dT%H:%M:%SZ" -d "yesterday")
curl -X POST  -H "X-HTTP-Method-Override: GET" \
     -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
     -d '{"contentType":"IAM_POLICY", \
          "assetNames": \
            "//compute.googleapis.com/projects/my_project_id/global/firewalls/default-firewall", \
          "readTimeWindow": {"startTime": "'$YESTERDAY'"}}' \
     https://cloudasset.googleapis.com/v1/projects/PROJECT_NUMBER:batchGetAssetsHistory