本页面介绍如何查看资产的历史记录。借助 Cloud Asset API,您可以查看时间窗口与过去 5 周内的给定时间段重叠的多个资产的事件更改历史记录。事件更改历史记录会显示指定资产在一段时间内的所有创建、删除和更新事件。
准备工作
gcloud
- 您必须先启用 Cloud Asset API,然后才能使用
gcloud
CLI 访问 Cloud Asset Inventory。请注意,只需在您将运行 Cloud Asset API 命令的项目中启用 API。
启用 Cloud Asset Inventory API - 在本地客户端上安装 Google Cloud CLI。
API
- 在本地计算机上安装 oauth2l,以便与 Google OAuth 系统进行互动。
- 确认您可以使用 Unix
curl
命令。 确保您的帐号已被授予您的项目、文件夹或组织的以下角色之一:
- Cloud Asset Viewer (
roles/cloudasset.viewer
) - Owner 基本角色 (
roles/owner
)
- Cloud Asset Viewer (
配置帐号
根据 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
CLI,请查看 Google Cloud CLI 文档。您可以使用 --help
标志来获取工具、资源和命令的帮助:
gcloud asset --help
通过 --help
标志显示的帮助文本也可以在 gcloud asset
的 Google Cloud CLI 参考文档中找到。
本部分中显示的 gcloud asset get-history
会获取项目的历史记录。如需获取组织的历史记录,请在命令中使用 --organization=ORGANIZATION_ID
标志。
以下示例获取项目中资产的历史记录。
请注意,start-time
必须为晚于当前时间减去 35 天的时间。
- 确保完成配置帐号,以便调用 Cloud Asset API。
- 确定要查找其历史记录的资产的完整资源名称。在此处查看 Cloud Asset API 格式的名称列表。这是以下示例中的 asset-names 变量。
- 确定时间范围的开始时间和结束时间(采用 RFC 3339 世界协调时间 (UTC) 格式)。只有开始时间是必需的。 如需了解详情,请参阅
TimeWindow
。 - 确定您要在哪个级层获取资产历史记录。下面的示例命令展示了如何获取不同种类的资产的历史记录。
获取项目中指定资产的历史记录,包括所有资源元数据:
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 方法。
- 确保完成配置帐号,以便调用 Cloud Asset API。
- 确定要查找其历史记录的资产的完整资源名称。在此处查看 Cloud Asset API 格式的名称列表。以下示例使用
//compute.googleapis.com/projects/my_project_id/global/firewalls/default-firewall
。 - 确定时间范围的开始时间和结束时间(采用 RFC 3339 UTC 格式)。
只有开始时间是必需的。 如需了解详情,请参阅
TimeWindow
。 - 确定您要在哪个级层获取资产历史记录。以下示例命令展示了如何获取不同种类的资产的历史记录。
设置 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