您可以创建并订阅 Feed,以接收有关资源和政策更改的实时通知。
创建 Feed 时,您可以指定希望监控组织、文件夹、项目中受支持的资源类型、IAM 政策、访问权限政策和组织政策的更改。此外,您可以向 Feed 添加条件,以便仅在资产发生某些类型的更改时接收通知。
创建 Feed 后,只要指定资产发生更改,您将通过 Pub/Sub 收到通知。发布到 Pub/Sub 主题的第一条消息是字符串格式的欢迎辞,之后的所有消息均采用 TemporalAsset 格式。
以下是 RESOURCE 内容类型的 Pub/Sub 消息示例。
{
"asset":{
"ancestors":[
"projects/000000000000",
"folders/000000000000",
"organizations/000000000000"
],
"assetType":"storage.googleapis.com/Bucket",
"name":"//storage.googleapis.com/my-bucket",
"resource":{
"data":{
LATEST_ASSET_METADATA
},
"discoveryDocumentUri":"https://www.googleapis.com/discovery/v1/apis/storage/v1/rest",
"discoveryName":"Bucket",
"location":"us",
"parent":"//cloudresourcemanager.googleapis.com/projects/000000000000",
"version":"v1"
},
"updateTime":"2024-01-30T00:00:00.000000Z"
},
"priorAsset":{
"ancestors":[
"projects/000000000000",
"folders/000000000000",
"organizations/000000000000"
],
"assetType":"storage.googleapis.com/Bucket",
"name":"//storage.googleapis.com/my-bucket",
"resource":{
"data":{
PREVIOUS_ASSET_METADATA
},
"discoveryDocumentUri":"https://www.googleapis.com/discovery/v1/apis/storage/v1/rest",
"discoveryName":"Bucket",
"location":"us",
"parent":"//cloudresourcemanager.googleapis.com/projects/000000000000",
"version":"v1"
},
"updateTime":"2024-01-29T00:00:00.000000Z"
},
"priorAssetState":"PRESENT",
"window":{
"startTime":"2024-01-30T00:00:00.000000Z"
}
}
如需详细了解 Pub/Sub 或如何设置订阅,请参阅 Pub/Sub 文档。
准备工作
在您运行 Cloud Asset Inventory 命令的项目中启用 Cloud Asset Inventory API。
确保您的账号拥有调用 Cloud Asset Inventory API 的正确角色。如需了解每种通话类型的各项权限,请参阅权限。
如果您还没有 Pub/Sub 主题,请创建一个 Pub/Sub 主题。
限制
任何 Feed 创建、更新或删除操作最长可能需要 10 分钟才能生效。
创建 Feed 的项目必须比 Feed 存在时间更长。这是因为用于发布到目标 Pub/Sub 主题的服务账号位于该项目中。Feed 将不再起作用,而且会在项目删除后尽快删除。
您可以为一个父级创建最多 200 个 Feed。此限制仅适用于直接跟踪父项的 Feed,而不会计入其子资源的 Feed。例如,如果您的某个组织中有 10 个项目,每个项目最多可以有 200 个 Feed,则该组织最多可以有 200 个 Feed。
创建 Feed
gcloud
gcloud asset feeds create FEED_ID \ --SCOPE \ --billing-project=BILLING_PROJECT_ID \ --pubsub-topic=projects/TOPIC_PROJECT_ID/topics/TOPIC_ID \ --asset-names=ASSET_NAME_1,ASSET_NAME_2,... \ --asset-types=ASSET_TYPE_1,ASSET_TYPE_2,... \ --content-type=CONTENT_TYPE \ --relationship-types=RELATIONSHIP_TYPE_1,RELATIONSHIP_TYPE_2,... \ --condition-title="CONDITION_TITLE" \ --condition-description="CONDITION_DESCRIPTION" \ --condition-expression="CONDITION_EXPRESSION"
请提供以下值:
-
SCOPE:请使用以下某个值:-
project=PROJECT_ID,其中PROJECT_ID是要在其中创建 Feed 的项目的 ID。 -
folder=FOLDER_ID,其中FOLDER_ID是要在其中创建 Feed 的文件夹的 ID。如何查找 Google Cloud 文件夹的 ID
Google Cloud 控制台
如需查找 Google Cloud 文件夹的 ID,请完成以下步骤:
-
前往 Google Cloud 控制台。
- 点击菜单栏中的切换器列表框。
- 从列表框中选择您的组织。
- 搜索文件夹名称。文件夹 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是要在其中创建 Feed 的组织的 ID。如何查找 Google Cloud 组织的 ID
Google Cloud 控制台
如需查找 Google Cloud 组织的 ID,请完成以下步骤:
-
前往 Google Cloud 控制台。
- 点击菜单栏中的切换器列表框。
- 从列表框中选择您的组织。
- 点击全部标签页。组织 ID 显示在组织名称旁边。
gcloud CLI
您可以使用以下命令检索 Google Cloud 组织的 ID:
gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"
-
-
FEED_ID:一种唯一的素材资源 Feed 标识符。-
BILLING_PROJECT_ID:可选。默认 Cloud Asset Inventory 服务代理所在的项目 ID,该服务代理拥有管理您的 Pub/Sub 主题的权限。 详细了解如何设置结算项目。 -
TOPIC_PROJECT_ID:Pub/Sub 主题所在项目的 ID。 -
TOPIC_ID:要将通知发布到的 Pub/Sub 主题的 ID。 - 至少包含以下一项资源定义:
ASSET_NAME_#:可选。以英文逗号分隔的资源全名列表。ASSET_TYPE_#:可选。以英文逗号分隔的 可搜索资产类型列表。 支持 RE2 兼容的正则表达式。如果正则表达式与任何支持的资源类型均不匹配,则会返回INVALID_ARGUMENT错误。如果未指定--asset-types,则返回所有资源类型。
CONTENT_TYPE:可选。要检索的元数据的 内容类型。如果未指定--content-type,则仅返回基本信息,例如资产名称、资产上次更新时间以及资产所属的项目、文件夹和组织。-
RELATIONSHIP_TYPE_#:可选。需要有权访问 Security Command Center 高级层级或 Enterprise 层级,或者 Gemini Cloud Assist。您要检索的资产关系类型的英文逗号分隔列表。您必须将CONTENT_TYPE设置为RELATIONSHIP, 才能使此功能正常运行。 - 如果添加可选的Feed 条件,请在命令中添加以下详细信息:
CONDITION_TITLE:要分配给 Feed 条件的标题。-
CONDITION_DESCRIPTION:要分配给 Feed 条件的说明。 CONDITION_EXPRESSION:要应用于 Feed 的条件表达式。
如需了解所有选项,请参阅 gcloud CLI 参考文档。
示例
运行以下命令,在 my-topic Pub/Sub 主题中创建一个 Feed,以便在 my-project 项目中的以下资源发生更改时收到通知。
my-bucketCloud Storage 存储桶- 任何 BigQuery 表
gcloud asset feeds create my-feed \ --project=my-project \ --pubsub-topic=projects/my-project/topics/my-topic \ --asset-names=//storage.googleapis.com/my-bucket \ --asset-types=bigquery.googleapis.com/Table \ --content-type=resource
示例响应
assetNames:
- //storage.googleapis.com/my-bucket
assetTypes:
- bigquery.googleapis.com/Table
condition: {}
contentType: RESOURCE
feedOutputConfig:
pubsubDestination:
topic: projects/my-project/topics/my-topic
name: projects/000000000000/feeds/my-feed
REST
HTTP 方法和网址:
POST https://cloudasset.googleapis.com/v1/SCOPE_PATH/feeds
标头:
X-Goog-User-Project: BILLING_PROJECT_ID
请求 JSON 正文:
{ "feedId": "FEED_ID", "feed": { "assetNames": [ "ASSET_NAME_1", "ASSET_NAME_2", "..." ], "assetTypes":