您可以创建并订阅 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
您可以使用以下命令检索位于组织级别的 Google Cloud 文件夹的 ID:
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,该项目 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 高级或企业版,或 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-bucket
Cloud 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": [ "ASSET_TYPE_1", "ASSET_TYPE_2", "..." ], "contentType": "CONTENT_TYPE", "relationshipTypes": [ "RELATIONSHIP_TYPE_1", "RELATIONSHIP_TYPE_2", "..." ], "feedOutputConfig": { "pubsubDestination": { "topic": "projects/TOPIC_PROJECT_ID/topics/TOPIC_ID" } }, "condition": { "title": "CONDITION_TITLE", "description": "CONDITION_DESCRIPTION", "expression": "CONDITION_EXPRESSION" } } }
请提供以下值:
-
SCOPE_PATH
:请使用以下某个值:允许使用的值包括:
-
projects/PROJECT_ID
,其中PROJECT_ID
是创建 Feed 时所用的项目的 ID。 -
projects/PROJECT_NUMBER
,其中PROJECT_NUMBER
是用于创建 Feed 的项目的编号。如何查找 Google Cloud 项目编号
Google Cloud 控制台
如需查找 Google Cloud 项目编号,请完成以下步骤:
gcloud CLI
您可以使用以下命令检索 Google Cloud 项目编号:
gcloud projects describe PROJECT_ID --format="value(projectNumber)"
-
folders/FOLDER_ID
,其中FOLDER_ID
是用于创建 Feed 的文件夹的 ID。如何查找 Google Cloud 文件夹的 ID
Google Cloud 控制台
如需查找 Google Cloud 文件夹的 ID,请完成以下步骤:
-
前往 Google Cloud 控制台。
- 点击菜单栏中的切换器列表框。
- 从列表框中选择您的组织。
- 搜索您的文件夹名称。文件夹 ID 显示在文件夹名称旁边。
gcloud CLI
您可以使用以下命令检索组织级 Google Cloud 文件夹的 ID:
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
是用于创建 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))"
-
-
-
BILLING_PROJECT_ID
:默认 Cloud Asset Inventory 服务代理所在的项目 ID,该项目 ID 具有管理您的 Pub/Sub 主题的权限。 详细了解如何设置结算项目。 FEED_ID
:唯一的素材资源 Feed 标识符。- 至少包含以下一种资源定义:
ASSET_NAME_#
:可选。资产全名数组。ASSET_TYPE_#
:可选。 可搜索资产类型数组。 支持 与 RE2 兼容的正则表达式。如果正则表达式与任何支持的资源类型均不匹配,则会返回INVALID_ARGUMENT
错误。如果未指定assetTypes
,系统会返回所有资产类型。
CONTENT_TYPE
:可选。您要检索的元数据的 内容类型。如果未指定contentType
,则只会返回基本信息,例如素材资源名称、上次更新素材资源的时间,以及素材资源所属的项目、文件夹和组织。-
RELATIONSHIP_TYPE_#
:可选。需要有权访问 Security Command Center 高级或企业版,或 Gemini Cloud Assist。您要检索的资产关系类型的逗号分隔列表。您必须将CONTENT_TYPE
设置为RELATIONSHIP
,此功能才能正常运行。 -
TOPIC_PROJECT_ID
:Pub/Sub 主题所在项目的 ID。 -
TOPIC_ID
:要发布通知到的 Pub/Sub 主题的 ID。 - 如果要添加可选的Feed 条件,请在命令中添加以下详细信息:
CONDITION_TITLE
:要分配给 Feed 条件的标题。-
CONDITION_DESCRIPTION
:要分配给 Feed 条件的说明。 CONDITION_EXPRESSION
:要应用于 Feed 的条件表达式。
如需了解所有选项,请参阅 REST 参考文档。
命令示例
运行以下命令之一,在 my-topic
Pub/Sub 主题中创建 Feed,以便在 my-project
项目中的以下资源发生更改时发送通知。
my-bucket
Cloud Storage 存储桶- 任何 BigQuery 表
curl(Linux、macOS 或 Cloud Shell)
curl -X POST \ -H "X-Goog-User-Project: BILLING_PROJECT_ID" \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json; charset=utf-8" \ -d '{ "feedId": "my-feed", "feed": { "assetNames": [ "//storage.googleapis.com/my-bucket" ], "assetTypes": [ "bigquery.googleapis.com/Table" ], "contentType": "RESOURCE", "feedOutputConfig": { "pubsubDestination": { "topic": "projects/my-project/topics/my-topic" } } } }' \ https://cloudasset.googleapis.com/v1/projects/my-project/feeds
PowerShell (Windows)
$cred = gcloud auth print-access-token $headers = @{ "X-Goog-User-Project" = "BILLING_PROJECT_ID"; "Authorization" = "Bearer $cred" } $body = @" { "feedId": "my-feed", "feed": { "assetNames": [ "//storage.googleapis.com/my-bucket" ], "assetTypes": [ "bigquery.googleapis.com/Table" ], "contentType": "RESOURCE", "feedOutputConfig": { "pubsubDestination": { "topic": "projects/my-project/topics/my-topic" } } } } "@ Invoke-WebRequest ` -Method POST ` -Headers $headers ` -ContentType: "application/json; charset=utf-8" ` -Body $body ` -Uri "https://cloudasset.googleapis.com/v1/projects/my-project/feeds" | Select-Object -Expand Content
示例响应
{ "name": "projects/000000000000/feeds/my-feed", "assetNames": [ "//storage.googleapis.com/my-bucket" ], "assetTypes": [ "bigquery.googleapis.com/Table" ], "contentType": "RESOURCE", "feedOutputConfig": { "pubsubDestination": { "topic": "projects/my-project/topics/my-topic" } } }
Go
如需了解如何安装和使用 Cloud Asset Inventory 客户端库,请参阅 Cloud Asset Inventory 客户端库。
如需向 Cloud Asset Inventory 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Java
如需了解如何安装和使用 Cloud Asset Inventory 客户端库,请参阅 Cloud Asset Inventory 客户端库。
如需向 Cloud Asset Inventory 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Node.js
如需了解如何安装和使用 Cloud Asset Inventory 客户端库,请参阅 Cloud Asset Inventory 客户端库。
如需向 Cloud Asset Inventory 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Python
如需了解如何安装和使用 Cloud Asset Inventory 客户端库,请参阅 Cloud Asset Inventory 客户端库。
如需向 Cloud Asset Inventory 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Ruby
如需了解如何安装和使用 Cloud Asset Inventory 客户端库,请参阅 Cloud Asset Inventory 客户端库。
如需向 Cloud Asset Inventory 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
获取 Feed
gcloud
gcloud asset feeds describe FEED_ID \ --SCOPE \ --billing-project=BILLING_PROJECT_ID
请提供以下值:
-
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
您可以使用以下命令检索位于组织级别的 Google Cloud 文件夹的 ID:
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))"
-
-
-
BILLING_PROJECT_ID
:默认 Cloud Asset Inventory 服务代理所在的项目 ID,该项目 ID 具有管理您的 Pub/Sub 主题的权限。 详细了解如何设置结算项目。 FEED_ID
:唯一的素材资源 Feed 标识符。
如需了解所有选项,请参阅 gcloud CLI 参考文档。
示例响应
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 方法和网址:
GET https://cloudasset.googleapis.com/v1/SCOPE_PATH/feeds/FEED_ID
标头:
X-Goog-User-Project: BILLING_PROJECT_ID
请提供以下值:
-
SCOPE_PATH
:请使用以下某个值:允许使用的值包括:
-
projects/PROJECT_ID
,其中PROJECT_ID
是 Feed 所在项目的 ID。 -
projects/PROJECT_NUMBER
,其中PROJECT_NUMBER
是 Feed 所在的项目的编号。如何查找 Google Cloud 项目编号
Google Cloud 控制台
如需查找 Google Cloud 项目编号,请完成以下步骤:
gcloud CLI
您可以使用以下命令检索 Google Cloud 项目编号:
gcloud projects describe PROJECT_ID --format="value(projectNumber)"
-
folders/FOLDER_ID
,其中FOLDER_ID
是 Feed 所在文件夹的 ID。如何查找 Google Cloud 文件夹的 ID
Google Cloud 控制台
如需查找 Google Cloud 文件夹的 ID,请完成以下步骤:
-
前往 Google Cloud 控制台。
- 点击菜单栏中的切换器列表框。
- 从列表框中选择您的组织。
- 搜索您的文件夹名称。文件夹 ID 显示在文件夹名称旁边。
gcloud CLI
您可以使用以下命令检索组织级 Google Cloud 文件夹的 ID:
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
是 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))"
-
-
-
BILLING_PROJECT_ID
:默认 Cloud Asset Inventory 服务代理所在的项目 ID,该代理有权管理您的 BigQuery 数据集和表。 详细了解如何设置结算项目。 FEED_ID
:唯一的素材资源 Feed 标识符。
如需了解所有选项,请参阅 REST 参考文档。
命令示例
运行以下命令之一可获取特定 Feed。
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://cloudasset.googleapis.com/v1/projects/my-project/feeds/my-feed
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://cloudasset.googleapis.com/v1/projects/my-project/feeds/my-feed" | Select-Object -Expand Content
示例响应
{ "name": "projects/000000000000/feeds/my-feed", "assetNames": [ "//storage.googleapis.com/my-bucket" ], "assetTypes": [ "bigquery.googleapis.com/Table" ], "contentType": "RESOURCE", "feedOutputConfig": { "pubsubDestination": { "topic": "projects/my-project/topics/my-topic" } } }
Go
如需了解如何安装和使用 Cloud Asset Inventory 客户端库,请参阅 Cloud Asset Inventory 客户端库。
如需向 Cloud Asset Inventory 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Java
如需了解如何安装和使用 Cloud Asset Inventory 客户端库,请参阅 Cloud Asset Inventory 客户端库。
如需向 Cloud Asset Inventory 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Node.js
如需了解如何安装和使用 Cloud Asset Inventory 客户端库,请参阅 Cloud Asset Inventory 客户端库。
如需向 Cloud Asset Inventory 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Python
如需了解如何安装和使用 Cloud Asset Inventory 客户端库,请参阅 Cloud Asset Inventory 客户端库。
如需向 Cloud Asset Inventory 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
列出 Feed
如需列出项目、文件夹或组织的所有 Feed,请发出以下任一请求。
gcloud
gcloud asset feeds list \ --SCOPE \ --billing-project=BILLING_PROJECT_ID
请提供以下值:
-
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
您可以使用以下命令检索组织级 Google Cloud 文件夹的 ID:
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))"
-
-
-
BILLING_PROJECT_ID
:默认 Cloud Asset Inventory 服务代理所在的项目 ID,该项目 ID 具有管理您的 Pub/Sub 主题的权限。 详细了解如何设置结算项目。
如需了解所有选项,请参阅 gcloud CLI 参考文档。
示例响应
- 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 方法和网址:
GET https://cloudasset.googleapis.com/v1/SCOPE_PATH/feeds
标头:
X-Goog-User-Project: BILLING_PROJECT_ID
请提供以下值:
-
SCOPE_PATH
:请使用以下某个值:允许使用的值包括:
-
projects/PROJECT_ID
,其中PROJECT_ID
是 Feed 所在项目的 ID。 -
projects/PROJECT_NUMBER
,其中PROJECT_NUMBER
是 Feed 所在的项目的编号。如何查找 Google Cloud 项目编号
Google Cloud 控制台
如需查找 Google Cloud 项目编号,请完成以下步骤:
gcloud CLI
您可以使用以下命令检索 Google Cloud 项目编号:
gcloud projects describe PROJECT_ID --format="value(projectNumber)"
-
folders/FOLDER_ID
,其中FOLDER_ID
是 Feed 所在文件夹的 ID。如何查找 Google Cloud 文件夹的 ID
Google Cloud 控制台
如需查找 Google Cloud 文件夹的 ID,请完成以下步骤:
-
前往 Google Cloud 控制台。
- 点击菜单栏中的切换器列表框。
- 从列表框中选择您的组织。
- 搜索您的文件夹名称。文件夹 ID 显示在文件夹名称旁边。
gcloud CLI
您可以使用以下命令检索位于组织级别的 Google Cloud 文件夹的 ID:
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
是 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))"
-
-
-
BILLING_PROJECT_ID
:默认 Cloud Asset Inventory 服务代理所在的项目 ID,该代理有权管理您的 BigQuery 数据集和表。 详细了解如何设置结算项目。
如需了解所有选项,请参阅 REST 参考文档。
命令示例
运行以下命令之一可列出 my-project
项目中的所有 Feed。
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://cloudasset.googleapis.com/v1/projects/my-project/feeds
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://cloudasset.googleapis.com/v1/projects/my-project/feeds" | Select-Object -Expand Content
示例响应
{ "feeds": [ { "name": "projects/000000000000/feeds/my-feed", "assetNames": [ "//storage.googleapis.com/my-bucket" ], "assetTypes": [ "bigquery.googleapis.com/Table" ], "contentType": "RESOURCE", "feedOutputConfig": { "pubsubDestination": { "topic": "projects/my-project/topics/my-topic" } } } ] }
Go
如需了解如何安装和使用 Cloud Asset Inventory 客户端库,请参阅 Cloud Asset Inventory 客户端库。
如需向 Cloud Asset Inventory 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Java
如需了解如何安装和使用 Cloud Asset Inventory 客户端库,请参阅 Cloud Asset Inventory 客户端库。
如需向 Cloud Asset Inventory 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Node.js
如需了解如何安装和使用 Cloud Asset Inventory 客户端库,请参阅 Cloud Asset Inventory 客户端库。
如需向 Cloud Asset Inventory 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Python
如需了解如何安装和使用 Cloud Asset Inventory 客户端库,请参阅 Cloud Asset Inventory 客户端库。
如需向 Cloud Asset Inventory 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
更新 Feed
您可以通过以下方式更新现有 Feed 的属性:
添加和移除特定的素材资源名称,或从 Feed 中清除所有素材资源名称。
添加和移除特定的素材资源类型,或从 Feed 中清除所有素材资源。
覆盖条件或从 Feed 中清除条件。
gcloud
gcloud asset feeds update FEED_ID \ --SCOPE \ --billing-project=BILLING_PROJECT_ID \ --pubsub-topic=projects/TOPIC_PROJECT_ID/topics/TOPIC_ID \ --clear-asset-names \ --add-asset-names=ASSET_NAME_1,ASSET_NAME_2,... \ --remove-asset-names=ASSET_NAME_3,ASSET_NAME_4,... \ --clear-asset-types \ --add-asset-types=ASSET_TYPE_1,ASSET_TYPE_2,... \ --remove-asset-types=ASSET_TYPE_3,ASSET_TYPE_4,... \ --clear-content-type \ --content-type=CONTENT_TYPE \ --clear-relationship-types \ --remove-relationship-types=RELATIONSHIP_TYPE_1,RELATIONSHIP_TYPE_2,... \ --add-relationship-types=RELATIONSHIP_TYPE_1,RELATIONSHIP_TYPE_2,... \ --clear-condition-title \ --condition-title="CONDITION_TITLE" \ --clear-condition-description \ --condition-description="CONDITION_DESCRIPTION" \ --clear-condition-expression --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
您可以使用以下命令检索位于组织级别的 Google Cloud 文件夹的 ID:
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,该项目 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 高级或企业版,或 Gemini Cloud Assist。您要检索的资产关系类型的逗号分隔列表。您必须将CONTENT_TYPE
设置为RELATIONSHIP
,此功能才能正常运行。 - 如果要添加可选的Feed 条件,请在命令中添加以下详细信息:
CONDITION_TITLE
:要分配给 Feed 条件的标题。-
CONDITION_DESCRIPTION
:要分配给 Feed 条件的说明。 CONDITION_EXPRESSION
:要应用于 Feed 的条件表达式。
如需了解所有选项,请参阅 gcloud CLI 参考文档。
示例
运行以下命令,更新 my-project
项目中的 my-topic
Pub/Sub 主题。此请求会从监控中移除所有资产名称,并添加资产类型 gkemulticloud.googleapis.com/AttachedCluster
。
gcloud asset feeds update my-feed \ --project=my-project \ --pubsub-topic=projects/my-project/topics/my-topic \ --clear-asset-names \ --add-asset-types=gkemulticloud.googleapis.com/AttachedCluster
示例响应
assetTypes: - bigquery.googleapis.com/Table - gkemulticloud.googleapis.com/AttachedCluster condition: {} contentType: RESOURCE feedOutputConfig: pubsubDestination: topic: projects/my-project/topics/my-topic name: projects/000000000000/feeds/my-feed
如需更新 Feed 的属性,您需要在 update_mask
中指定属性路径以及该属性的值。
REST
HTTP 方法和网址:
PATCH https://cloudasset.googleapis.com/v1/SCOPE_PATH/feeds/FEED_ID
标头:
X-Goog-User-Project: BILLING_PROJECT_ID
请求 JSON 正文:
{ "feed": { "assetNames": [ "ASSET_NAME_1", "ASSET_NAME_2", "..." ], "assetTypes": [ "ASSET_TYPE_1", "ASSET_TYPE_2", "..." ], "contentType": "CONTENT_TYPE", "relationshipTypes": [ "RELATIONSHIP_TYPE_1", "RELATIONSHIP_TYPE_2", "..." ], "feedOutputConfig": { "pubsubDestination": { "topic": "projects/TOPIC_PROJECT_ID/topics/TOPIC_ID" } } }, "condition": { "title": "CONDITION_TITLE", "description": "CONDITION_DESCRIPTION", "expression": "CONDITION_EXPRESSION" }, "update_mask": { "paths": [ "feed_output_config.pubsub_destination.topic", ATTRIBUTE_PATH_1, ATTRIBUTE_PATH_2, ... ] } }
请提供以下值:
-
SCOPE_PATH
:请使用以下某个值:允许使用的值包括:
-
projects/PROJECT_ID
,其中PROJECT_ID
是要更新 Feed 的项目的 ID。 -
projects/PROJECT_NUMBER
,其中PROJECT_NUMBER
是要更新 Feed 的项目的编号。如何查找 Google Cloud 项目编号
Google Cloud 控制台
如需查找 Google Cloud 项目编号,请完成以下步骤:
gcloud CLI
您可以使用以下命令检索 Google Cloud 项目编号:
gcloud projects describe PROJECT_ID --format="value(projectNumber)"
-
folders/FOLDER_ID
,其中FOLDER_ID
是用于更新 Feed 的文件夹的 ID。如何查找 Google Cloud 文件夹的 ID
Google Cloud 控制台
如需查找 Google Cloud 文件夹的 ID,请完成以下步骤:
-
前往 Google Cloud 控制台。
- 点击菜单栏中的切换器列表框。
- 从列表框中选择您的组织。
- 搜索您的文件夹名称。文件夹 ID 显示在文件夹名称旁边。
gcloud CLI
您可以使用以下命令检索组织级 Google Cloud 文件夹的 ID:
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
是要更新 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))"
-
-
-
BILLING_PROJECT_ID
:默认 Cloud Asset Inventory 服务代理所在的项目 ID,该项目 ID 具有管理您的 Pub/Sub 主题的权限。 详细了解如何设置结算项目。 FEED_ID
:唯一的素材资源 Feed 标识符。- 至少包含以下一种资源定义:
ASSET_NAME_#
:可选。资产全名数组。ASSET_TYPE_#
:可选。 可搜索资产类型数组。 支持 与 RE2 兼容的正则表达式。如果正则表达式与任何支持的资源类型均不匹配,则会返回INVALID_ARGUMENT
错误。如果未指定assetTypes
,系统会返回所有资产类型。
CONTENT_TYPE
:可选。您要检索的元数据的 内容类型。如果未指定contentType
,则只会返回基本信息,例如素材资源名称、上次更新素材资源的时间,以及素材资源所属的项目、文件夹和组织。-
RELATIONSHIP_TYPE_#
:可选。需要有权访问 Security Command Center 高级或企业版,或 Gemini Cloud Assist。您要检索的资产关系类型的逗号分隔列表。您必须将CONTENT_TYPE
设置为RELATIONSHIP
,此功能才能正常运行。 -
TOPIC_PROJECT_ID
:Pub/Sub 主题所在项目的 ID。 -
TOPIC_ID
:要发布通知到的 Pub/Sub 主题的 ID。 - 如果要添加可选的Feed 条件,请在命令中添加以下详细信息:
CONDITION_TITLE
:要分配给 Feed 条件的标题。-
CONDITION_DESCRIPTION
:要分配给 Feed 条件的说明。 CONDITION_EXPRESSION
:要应用于 Feed 的条件表达式。
如需了解所有选项,请参阅 REST 参考文档。
命令示例
运行以下命令之一,更新 my-project
项目中的 my-topic
Pub/Sub 主题。此请求会从监控中移除所有资产名称,并添加资产类型 gkemulticloud.googleapis.com/AttachedCluster
。
curl(Linux、macOS 或 Cloud Shell)
curl -X PATCH \ -H "X-Goog-User-Project: BILLING_PROJECT_ID" \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json; charset=utf-8" \ -d '{ "feed": { "assetNames": [], "assetTypes": [ "gkemulticloud.googleapis.com/AttachedCluster" ], "feedOutputConfig": { "pubsubDestination": { "topic": "projects/my-project/topics/my-topic" } } }, "update_mask": { "paths": ["feed_output_config.pubsub_destination.topic", "asset_names", "asset_types"] } }' \ https://cloudasset.googleapis.com/v1/projects/my-project/feeds/my-feed
PowerShell (Windows)
$cred = gcloud auth print-access-token $headers = @{ "X-Goog-User-Project" = "BILLING_PROJECT_ID"; "Authorization" = "Bearer $cred" } $body = @" { "feed": { "assetNames": [], "assetTypes": [ "gkemulticloud.googleapis.com/AttachedCluster" ], "feedOutputConfig": { "pubsubDestination": { "topic": "projects/my-project/topics/my-topic" } } }, "update_mask": { "paths": ["feed_output_config.pubsub_destination.topic", "asset_names", "asset_types"] } } "@ Invoke-WebRequest ` -Method PATCH ` -Headers $headers ` -ContentType: "application/json; charset=utf-8" ` -Body $body ` -Uri "https://cloudasset.googleapis.com/v1/projects/my-project/feeds/my-feed" | Select-Object -Expand Content
示例响应
{ "feeds": [ { "name": "projects/000000000000/feeds/my-feed", "assetTypes": [ "bigquery.googleapis.com/Table", "gkemulticloud.googleapis.com/AttachedCluster" ], "contentType": "RESOURCE", "feedOutputConfig": { "pubsubDestination": { "topic": "projects/my-project/topics/my-topic" } } } ] }
Go
如需了解如何安装和使用 Cloud Asset Inventory 客户端库,请参阅 Cloud Asset Inventory 客户端库。
如需向 Cloud Asset Inventory 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Java
如需了解如何安装和使用 Cloud Asset Inventory 客户端库,请参阅 Cloud Asset Inventory 客户端库。
如需向 Cloud Asset Inventory 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Node.js
如需了解如何安装和使用 Cloud Asset Inventory 客户端库,请参阅 Cloud Asset Inventory 客户端库。
如需向 Cloud Asset Inventory 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Python
如需了解如何安装和使用 Cloud Asset Inventory 客户端库,请参阅 Cloud Asset Inventory 客户端库。
如需向 Cloud Asset Inventory 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
删除 Feed
如果您不想再收到资产更改通知,请发出以下任一请求来删除 Feed。
gcloud
gcloud asset feeds delete FEED_ID \ --SCOPE \ --billing-project=BILLING_PROJECT_ID
请提供以下值:
-
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
您可以使用以下命令检索组织级 Google Cloud 文件夹的 ID:
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))"
-
-
-
BILLING_PROJECT_ID
:默认 Cloud Asset Inventory 服务代理所在的项目 ID,该项目 ID 具有管理您的 Pub/Sub 主题的权限。 详细了解如何设置结算项目。
如需了解所有选项,请参阅 gcloud CLI 参考文档。
示例响应
成功删除后,系统不会返回任何响应。
REST
HTTP 方法和网址:
DELETE https://cloudasset.googleapis.com/v1/SCOPE_PATH/feeds/FEED_ID
标头:
X-Goog-User-Project: BILLING_PROJECT_ID
请提供以下值:
-
SCOPE_PATH
:请使用以下某个值:允许使用的值包括:
-
projects/PROJECT_NUMBER
,其中PROJECT_NUMBER
是 Feed 所在的项目的编号。如何查找 Google Cloud 项目编号
Google Cloud 控制台
如需查找 Google Cloud 项目编号,请完成以下步骤:
gcloud CLI
您可以使用以下命令检索 Google Cloud 项目编号:
gcloud projects describe PROJECT_ID --format="value(projectNumber)"
-
folders/FOLDER_ID
,其中FOLDER_ID
是 Feed 所在文件夹的 ID。如何查找 Google Cloud 文件夹的 ID
Google Cloud 控制台
如需查找 Google Cloud 文件夹的 ID,请完成以下步骤:
-
前往 Google Cloud 控制台。
- 点击菜单栏中的切换器列表框。
- 从列表框中选择您的组织。
- 搜索您的文件夹名称。文件夹 ID 显示在文件夹名称旁边。
gcloud CLI
您可以使用以下命令检索位于组织级别的 Google Cloud 文件夹的 ID:
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
是 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))"
-
-
-
BILLING_PROJECT_ID
:默认 Cloud Asset Inventory 服务代理所在的项目 ID,该项目 ID 具有管理您的 Pub/Sub 主题的权限。 详细了解如何设置结算项目。
如需了解所有选项,请参阅 REST 参考文档。
命令示例
运行以下命令之一可删除特定 Feed。
curl(Linux、macOS 或 Cloud Shell)
curl -X DELETE \ -H "X-Goog-User-Project: BILLING_PROJECT_ID" \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ https://cloudasset.googleapis.com/v1/projects/000000000000/feeds/my-feed
PowerShell (Windows)
$cred = gcloud auth print-access-token $headers = @{ "X-Goog-User-Project" = "BILLING_PROJECT_ID"; "Authorization" = "Bearer $cred" } Invoke-WebRequest ` -Method DELETE ` -Headers $headers ` -Uri "https://cloudasset.googleapis.com/v1/projects/000000000000/feeds/my-feed" | Select-Object -Expand Content
示例响应
{}
Go
如需了解如何安装和使用 Cloud Asset Inventory 客户端库,请参阅 Cloud Asset Inventory 客户端库。
如需向 Cloud Asset Inventory 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Java
如需了解如何安装和使用 Cloud Asset Inventory 客户端库,请参阅 Cloud Asset Inventory 客户端库。
如需向 Cloud Asset Inventory 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Node.js
如需了解如何安装和使用 Cloud Asset Inventory 客户端库,请参阅 Cloud Asset Inventory 客户端库。
如需向 Cloud Asset Inventory 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Python
如需了解如何安装和使用 Cloud Asset Inventory 客户端库,请参阅 Cloud Asset Inventory 客户端库。
如需向 Cloud Asset Inventory 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Feed 条件
如需仅查看给定资产的特定类型的更改,您可以向 Feed 添加条件。条件采用通用表达式语言 (CEL) 编写。
对条件的支持有限。在某些情况下,创建或更新具有条件的 Feed 可能会导致延迟。
限制
条件表达式的长度上限为 3,000 个字符。
条件表达式中的大多数变量名称均采用小写形式,并且每个单词之间用下划线分隔。例如
example_variable
。唯一的例外情况是 Resource 对象中
data
子字段的变量名称。这些字符串没有单词分隔符,并且第一个字符之后每个字符的首字母均为大写。例如exampleVariable
。对条件表达式的某些验证会在 Feed 创建或 Feed 更新时执行。但是,此类验证并不全面,尤其是对于在
temporal_asset.asset.resource.data
字段(具有动态类型)上设置的条件。请尽可能改用适当的 gcloud CLI 或 REST API 参数来过滤 Feed。如果计算期间发生了错误,系统不会发送通知,但会记录错误。
对于
temporal_asset.asset.resource.data
中的动态类型,在缺失字段上指定的条件会触发运行时错误,并且通知无法发布。例如,对于条件temporal_asset.asset.resource.data.name != "my_name"
,如果更新中缺少name
字段,则计算将失败,您也不会收到通知。如果条件仅在某些字段存在时有效,请向条件添加存在性检查,以确保能够正确计算条件。静态枚举类型可以表示为完全限定的路径名称或原始整数。例如,以下表达式对于
prior_asset_state
有效:temporal_asset.prior_asset_state == google.cloud.asset.v1.TemporalAsset.PriorAssetState.DOES_NOT_EXIST
和
temporal_asset.prior_asset_state == 3
temporal_asset.asset.resource.data
中的动态枚举类型表示为原始字符串。例如,以下表达式对资产类型cloudresourcemanager.googleapis.com/Project
有效:temporal_asset.asset.resource.data.lifecycleState == "ACTIVE"
使用 CEL 创建条件表达式
在 Feed 条件中,通用表达式语言 (CEL) 用于根据属性数据进行布尔值决策。条件表达式由一个或多个使用逻辑运算符联接的语句组成。每个语句表示一条适用于 TemporalAsset
且基于特性的控制规则,用于确定是否发送通知。
对于 Feed 条件,以下 CEL 特性是最重要的:
变量:条件使用变量来表示给定属性,例如
temporal_asset.deleted
(Boolean
) 或temporal_asset.asset.name
(String
)。这些变量会根据运行时的上下文填充值。运算符:每种数据类型(例如
String
)都支持一组可用于创建逻辑表达式的运算符。通常,运算符用于比较变量中包含的值和字面量值,如temporal_asset.asset.name == "//cloudresourcemanager.googleapis.com/projects/12345"
。在本示例中,如果temporal_asset.asset.name
的输入值为//cloudresourcemanager.googleapis.com/projects/12345
,则表达式的计算结果为true
。函数:函数是支持更复杂运算的数据类型的复合运算符。在条件表达式中,有可以与给定数据类型结合使用的预定义函数。例如,
temporal_asset.asset.name.contains("keyword")
使用名为contains
的函数来检查temporal_asset.asset.name
的值是否包含"keyword"
。如果是,则计算结果为true
。逻辑运算符:Conditions 支持可用于通过基本表达式语句构建复杂逻辑表达式的逻辑运算符:
&&
(AND)和||
(OR)。这些逻辑运算符可让您在条件表达式中使用多个输入变量。例如:temporal_asset.deleted && temporal_asset.window.start_time.getFullYear() > 2020
连接了两个基本语句,而且必须同时满足这两个语句,才能生成计算结果true
。
如需详细了解 CEL 特性,请参阅语言定义。
使用条件变量
条件变量允许您针对不同的特性创建条件。支持的条件变量包括:
- temporal_asset:TemporalAsset 格式的最新资产更改。如果条件计算结果为 true,则
TemporalAsset
将被发送到已配置的目标。
条件表达式示例
以下条件表达式会发送关于创建事件的通知:
temporal_asset.deleted == false &&
temporal_asset.prior_asset_state == google.cloud.asset.v1.TemporalAsset.PriorAssetState.DOES_NOT_EXIST
以下条件表达式会发送针对位于文件夹 12345
和 23456
中的资源的通知:
"folders/12345" in temporal_asset.asset.ancestors ||
"folders/23456" in temporal_asset.asset.ancestors
假设在 Feed 中已将资产类型设置为 compute.googleapis.com/Firewall
,当新的允许规则被添加到防火墙时,以下条件表达式会发送通知:
size(temporal_asset.asset.resource.data.allowed) >
size(temporal_asset.prior_asset.resource.data.allowed)
假设在 Feed 中已将资产类型设置为 compute.googleapis.com/Instance
,以下条件表达式会针对 n1-standard-1
机器类型的虚拟机实例发送通知:
temporal_asset.asset.resource.data.machineType.endsWith('/machineTypes/n1-standard-1')
假设在 Feed 中已将资产类型设置为 storage.googleapis.com/Bucket
且内容类型设置为 IAM_POLICY
,则以下条件表达式会为具有针对 allUsers
的 IAM 政策的存储分区发送通知:
temporal_asset.asset.iam_policy.bindings.exists(b, b.members.exists(m, m == "allUsers"))
当标签中包含 test
键的存储桶被删除时,以下条件表达式会发送通知:
temporal_asset.deleted == true && temporal_asset.prior_asset_state == google.cloud.asset.v1.TemporalAsset.PriorAssetState.PRESENT && "test" in temporal_asset.prior_asset.resource.data.labels
问题排查
如果您没有收到资源或 IAM 政策更新的通知,以下步骤可帮助您排查问题:
确保资产的元数据已更改。只有当受支持的资源类型的元数据更改后,实时 Feed 才会发送更新。将新文件上传到 Cloud Storage 存储桶这类操作不会触发元数据更改。
请确保您的资产与您在 Feed 中指定的资产名称或类型之一相符。
关于项目删除,请注意,关停项目后,您有 30 天的时间来撤消操作。因此,只有在项目被永久删除后,才会设置资源元数据中的
deleted
字段。如需监控待删除的项目,您可以改为在项目的lifecycleState
字段上设置条件。例如:temporal_asset.asset.resource.data.lifecycleState == "DELETE_REQUESTED"
。检查日志,了解向主题发布更新时是否出现错误。
Cloud Logging
当实时 Feed 无法通过 Pub/Sub 发送资源或 IAM 政策更新时,Cloud Asset Inventory 会在 Logging 中记录错误状态和消息。日志记录功能默认处于启用状态,属于 Google Cloud Observability。了解 Google Cloud Observability 价格。
查看实时 Feed 日志
实时 Feed 日志按 Pub/Sub 主题编入索引。如需查看所有日志,请执行以下操作:
前往 Google Cloud 控制台中的 Logs Explorer 页面。
点击资源列表(位于搜索所有字段框附近)。
搜索
Cloud Pub/Sub Topic
,然后点击 Cloud Pub/Sub 主题资源类型。点击要查看的主题 ID。
点击应用。
日志字段强制采用 UTF-8 编码。非 UTF-8 字符将被替换为问号。
记录的信息
实时 Feed 日志条目包含以下类型的信息:
大多数 Google Cloud 日志中显示的常规信息,例如严重性、项目 ID、项目编号或时间戳。
jsonPayload
中的实时 Feed 日志字段,其中包含发布资源或 IAM 政策更新时的资产名称、Feed 输出配置和错误状态。
下表显示了每个字段包含的信息种类。
字段 | 类型和说明 |
---|---|
name |
Feed 的全名。格式为以下格式之一:
|
asset_name |
接收更新的资产的全名。例如:
如需了解详情,请参阅 资源名称 。 |
condition |
用于确定是否应发布资产更新的 Feed 条件。 |
error_status |
将资产更新发布到 Feed 失败时的状态。 |
feed_output_config |
定义资产更新发布到的目标位置的 Feed 输出配置。 |