本页面介绍了如何启用 Security Command Center API 通知。
通知会在几分钟内将发现结果和发现结果更新发送到 Pub/Sub 主题。Security Command Center API 通知包括所有发现结果 Security Command Center 在 Google Cloud 控制台。
您可以将 Pub/Sub 中的 Security Command Center 通知直接关联到 Cloud Functions 操作。如需查看有助于响应、丰富和补救的示例函数,请参阅 Cloud Functions 代码的 Security Command Center 开源代码库。代码库包含解决方案,可帮助您对安全发现结果采取自动操作。
或者,您也可以将发现结果导出到 BigQuery 您也可以设置持续导出 。
准备工作
如需设置和配置通知,您必须具有以下 Identity and Access Management (IAM) 角色:
- Security Center Admin (
roles/securitycenter.Admin
):用于启用 Security Command Center API 通知 - Security Center Admin Viewer (
roles/securitycenter.adminViewer
):更改为 在 Google Cloud 控制台中访问 Security Command Center - 如需在组织级层、文件夹级层或项目级层向通知服务账号或 gcloud CLI 账号授予角色,请使用以下角色之一:
- Organization Administrator (
roles/resourcemanager.organizationAdmin
) - Folder IAM Admin (
roles/resourcemanager.folderIamAdmin
) - Project IAM Admin (
roles/resourcemanager.projectIamAdmin
)
- Organization Administrator (
Security Command Center 的 IAM 角色可以在组织、文件夹或项目级层授予。您能否查看、修改、创建或更新发现结果、资产和安全来源,取决于您获授予的访问权限级别。如需详细了解 Security Command Center 角色,请参阅访问权限控制。
设置 Security Command Center API 通知
要设置通知,请先启用 Security Command Center API。
启用 Security Command Center API
要启用 Security Command Center API,请执行以下操作:
转到 Google Cloud 控制台中的“API 库”页面。
选择您要为其启用 Notifications API 的项目。
在搜索框中,输入
Security Command Center
,然后点击搜索结果中的 Security Command Center。在随即显示的 API 页面上,点击启用。
您的项目已启用 Security Command Center API。接下来,使用 gcloud CLI 或客户端库订阅 Pub/Sub 主题并设置权限。
数据驻留和通知
如果为数据驻留
启用 Security Command Center 时,
持续导出到
Pub/Sub(notificationConfig
项资源)是主题
数据驻留控制措施,并存储在您的
Security Command Center 位置。
如需将 Security Command Center 位置中的发现结果导出到 Pub/Sub,您必须配置 与发现结果在同一 Security Command Center 位置。
因为用于连续测试的 导出内容可包含受驻留控制措施约束的数据, 请务必先指定正确的位置,然后再创建它们。 Security Command Center 不会限制您创建的位置 导出的数据
持续导出只会存储在 由其创建,无法在其他位置查看或修改。
创建持续导出后,您将无法更改 其位置。要更改位置,您需要删除 持续导出,并在新位置重新创建它。
如需使用 API 调用检索持续导出内容,
您需要在
notificationConfig
。例如:
GET https://securitycenter.googleapis.com/v2/{name=organizations/123/locations/eu/notificationConfigs/my-pubsub-export-01}
同样,如需检索持续导出,使用
gcloud CLI,您需要指定位置
添加到配置的完整资源名称中,或使用 --locations
标记。例如:
gcloud scc notifications describe myContinuousExport organizations/123 \ --location=locations/us
设置 Pub/Sub 主题
在此步骤中,您将创建并订阅要向其发送通知的 Pub/Sub 主题。如果您不需要以编程方式调用 API,建议使用 gcloud CLI 命令。
gcloud
如需使用 gcloud CLI 设置 Security Command Center API 通知功能,请执行以下步骤:
- 设置 Pub/Sub 主题和订阅。
- 设置 gcloud CLI 账号权限。
第 1 步:设置 Pub/Sub
如需设置和订阅 Pub/Sub 主题,请执行以下操作:
转到 Google Cloud 控制台。
选择启用了 Security Command Center API 的项目。
点击激活 Cloud Shell。
如需创建新的 Pub/Sub 主题或使用现有主题,请运行以下命令:
gcloud pubsub topics create TOPIC_ID
将
TOPIC_ID
替换为您的主题名称。设置主题 ID 环境变量:
export TOPIC_ID=TOPIC_ID
创建对主题的订阅:
gcloud pubsub subscriptions create SUBSCRIPTION_ID --topic TOPIC_ID
将
SUBSCRIPTION_ID
替换为您的订阅名称。
如需详细了解如何设置 Pub/Sub,请参阅管理主题和订阅。
接下来,您需要为账号设置权限。
第 2 步:设置 gcloud CLI 账号权限
如需创建 NotificationConfig
,您需要向 gcloud CLI 账号授予以下角色:
- Security Center Admin (
roles/securitycenter.admin
) 或 Security Center Notification configurations Editor (roles/securitycenter.notificationConfigEditor
)。您需要在创建NotificationConfig
的同一级层(组织、文件夹或项目)授予此角色。 - 针对要接收通知的 Pub/Sub 主题的 Pub/Sub Admin (
roles/pubsub.admin
)
组织、文件夹或项目级层的
如需授予这些权限,请执行以下操作:
转到 Google Cloud 控制台。
选择启用了 Security Command Center API 的项目。
点击激活 Cloud Shell。
设置您的组织名称:
export ORGANIZATION_ID=ORGANIZATION_ID
将
ORGANIZATION_ID
替换为您的组织 ID。为 Pub/Sub 主题所属的项目设置项目 ID:
export PUBSUB_PROJECT=PROJECT_ID
将
PROJECT_ID
替换为您的项目 ID。设置您要使用的 gcloud CLI 账号:
export GCLOUD_ACCOUNT=EMAIL
将
EMAIL
替换为运行 gcloud CLI 命令的账号的电子邮件地址。设置主题 ID 或使用先前设置的主题。
export TOPIC_ID=TOPIC_ID
将
TOPIC_ID
替换为您的主题名称。向 gcloud CLI 账号授予具有
pubsub.topics.setIamPolicy
权限的 Pub/Sub 角色:gcloud pubsub topics add-iam-policy-binding \ projects/$PUBSUB_PROJECT/topics/$TOPIC_ID \ --member="user:$GCLOUD_ACCOUNT" \ --role='roles/pubsub.admin'
向 gcloud CLI 账号授予具有所有
securitycenter.notification
权限的角色,例如roles/securitycenter.notificationConfigEditor
或roles/securitycenter.admin
。您可以在项目、文件夹或组织级层授予角色。如需在项目级层授予角色,请运行以下命令:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member="user:$GCLOUD_ACCOUNT" \ --role='ROLE_NAME'
请替换以下内容:
PROJECT_ID
:启用了 Security Command Center 的项目的 IDROLE_NAME
:要分配的角色
如需在组织级层授予角色,请运行以下命令:
gcloud organizations add-iam-policy-binding $ORGANIZATION_ID \ --member="user:$GCLOUD_ACCOUNT" \ --role='ROLE_NAME'
将
ROLE_NAME
替换为要分配的角色。
接下来,创建 NotificationConfig。
客户端库
如需使用客户端库设置 Security Command Center API 通知功能,请执行以下步骤:
- 设置服务账号。
- 下载 API 客户端库。
- 设置开发环境。
- 设置 Pub/Sub 主题和订阅。
第 1 步:设置服务账号
Security Command Center API 通知功能使用具有适当权限的服务账号来配置通知。此服务账号仅用于初始设置配置,后续您可以重复使用该账号创建更多通知配置。此服务账号不同于您在设置 Security Command Center 时为您创建的服务账号。
如需创建服务账号,请执行以下操作:
转到 Google Cloud 控制台。
选择启用了 Security Command Center API 的项目。
点击激活 Cloud Shell。
设置环境变量:
设置您的组织名称:
export ORGANIZATION_ID=ORGANIZATION_ID
将
ORGANIZATION_ID
替换为您的组织 ID。为要启用 Notifications API 的项目设置项目 ID:
export PROJECT_ID=PROJECT_ID
将
PROJECT_ID
替换为您的项目 ID。设置要用于新服务账号的自定义 ID,如
scc-notifications
。服务账号名称长度必须介于 6 到 30 个字符之间,必须以字母开头,且必须全部为小写字母数字字符和连字符:export SERVICE_ACCOUNT=CUSTOM_ID
将
CUSTOM_ID
替换为服务账号的自定义名称。设置应存储服务账号密钥的路径,例如
export KEY_LOCATION=/home/$USER/mykeys/$SERVICE_ACCOUNT.json
:export KEY_LOCATION=FULL_KEY_LOCATION_PATH # This is used by client libraries to find the key export GOOGLE_APPLICATION_CREDENTIALS=$KEY_LOCATION
将
FULL_KEY_LOCATION_PATH
替换为您的服务账号密钥的完整路径。
创建与您的项目 ID 关联的服务账号:
gcloud iam service-accounts create $SERVICE_ACCOUNT --display-name \ "Service Account for [USER]" --project $PROJECT_ID
创建密钥以与服务账号关联。该密钥用于创建
NotificationConfig
,并永久存储在您在前面的步骤中指定的KEY_LOCATION
中。gcloud iam service-accounts keys create $KEY_LOCATION --iam-account \ $SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com
向服务账号授予具有所有
securitycenter.notification
权限的角色,例如roles/securitycenter.notificationConfigEditor
或roles/securitycenter.admin
。您可以在项目、文件夹或组织级层授予角色。如需在项目级层授予角色,请运行以下命令:
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member="serviceAccount:$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com" \ --role='ROLE_NAME'
将
ROLE_NAME
替换为要分配的角色。如需在组织级层授予角色,请运行以下命令:
gcloud organizations add-iam-policy-binding $ORGANIZATION_ID \ --member="serviceAccount:$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com" \ --role='ROLE_NAME'
将
ROLE_NAME
替换为要分配的角色。
服务账号现已设置为与通知搭配使用,而服务账号密钥存储在您指定的 KEY_LOCATION
中。如需详细了解服务账号,请参阅创建和管理服务账号密钥。
第 2 步:设置开发环境
如需使用 Security Command Center API 通知功能,您可以使用 gcloud CLI 或下载客户端库,并设置适用于您选择的语言的开发环境。
Python
可选:在安装 Python 库之前,我们建议您使用 Virtualenv 创建一个独立的 Python 环境。
virtualenv YOUR_ENV source YOUR_ENV/bin/activate
将
YOUR_ENV
替换为您的虚拟环境的名称。安装 pip 以管理 Python 库安装。
运行以下命令以安装 Python 库:
pip install google-cloud-securitycenter
Java
要将 Security Command Center Java 库作为依赖项添加到项目中,请从 Maven 代码库中选择一个工件。通知包含在库版本 0.119.0
及更高版本中。
如果您使用的是 Intellij,请将 GOOGLE_APPLICATION_CREDENTIALS
环境变量设置为您在前面的步骤中下载的通知服务账号密钥的绝对路径:
- 在 Intellij 中,点击运行 > 修改配置。
在应用 > Run_Configuration_For_Sample > 环境变量下设置以下变量:
GOOGLE_APPLICATION_CREDENTIALS=ABSOLUTE_PATH_TO_SERVICE_ACCOUNT_KEY
将
ABSOLUTE_PATH_TO_SERVICE_ACCOUNT_KEY
替换为您的服务账号密钥的完整路径。
Go
如需安装通知 API Go 依赖项,请下载 Go 库:
go get cloud.google.com/go/securitycenter/apiv1
Node.js
在项目文件夹中,使用 npm
安装任何所需的 Notifications PI 依赖项:
npm install --save @google-cloud/security-center/
第 3 步:设置 Pub/Sub
如需向 Pub/Sub 发送通知,您需要订阅 Pub/Sub 主题,并向通知服务账号授予具有 pubsub.topics.setIamPolicy
权限的 IAM 角色:
创建新的 Pub/Sub 主题或使用现有主题:
gcloud pubsub topics create TOPIC_ID
将
TOPIC_ID
替换为您的主题 ID。设置环境变量:
设置主题 ID:
export TOPIC_ID=TOPIC_ID
为启用了通知 API 的项目设置项目 ID:
export CONSUMER_PROJECT=PROJECT_ID
将
PROJECT_ID
替换为您的项目 ID。设置您在先前步骤中创建的服务账号的电子邮件地址:
export SERVICE_ACCOUNT_EMAIL=SERVICE_ACCOUNT_NAME@$CONSUMER_PROJECT.iam.gserviceaccount.com
将
SERVICE_ACCOUNT_NAME
替换为服务账号的名称。
创建对主题的订阅:
gcloud pubsub subscriptions create SUBSCRIPTION_ID --topic TOPIC_ID
将
SUBSCRIPTION_ID
替换为订阅 ID。向通知服务账号授予具有
pubsub.topics.setIamPolicy
权限的角色:gcloud pubsub topics add-iam-policy-binding \ projects/$CONSUMER_PROJECT/topics/$TOPIC_ID \ --member="serviceAccount:$SERVICE_ACCOUNT_EMAIL" \ --role='roles/pubsub.admin'
如需详细了解如何设置 Pub/Sub,请参阅管理主题和订阅。在下一步中,通过创建 NotificationConfig
来完成设置。
创建 NotificationConfig
创建 NotificationConfig
之前,请注意每个组织只能有一定数量的 NotificationConfig
文件。如需了解详情,请参阅配额和限制。
NotificationConfig
包含一个 filter
字段,用于限制对有用事件的通知。此字段接受 Security Command Center API findings.list
方法中提供的所有过滤条件。
创建 NotificationConfig
时,您需要为
来自 Google Cloud 资源层次结构的 NotificationConfig
。
组织、文件夹或项目。如果您稍后需要检索、更新或删除 NotificationConfig
,则需要在引用时添加父级组织、文件夹或项目的数字 ID。
使用您选择的语言或平台创建 NotificationConfig
:
gcloud
gcloud scc notifications create NOTIFICATION_NAME \ --PARENT=PARENT_ID \ --location=LOCATION --description="NOTIFICATION_DESCRIPTION" \ --pubsub-topic=PUBSUB_TOPIC \ --filter="FILTER"
替换以下内容:
NOTIFICATION_NAME
:通知的名称。 必须介于 1 到 128 个字符之间,并且包含字母数字字符 字符、下划线或连字符。PARENT
:资源层次结构中的范围 通知适用的organization
、folder
或project
。PARENT_ID
:上级组织的 ID。 文件夹或项目,并以organizations/123
、folders/456
或projects/789
。LOCATION
:如果启用了数据驻留, 指定 Security Command Center 位置 并在其中创建通知生成的notificationConfig
资源仅存储在此位置。只有 发送到 Pub/Sub。如果未启用数据驻留,请指定
--location
标志 使用 Security Command Center API v2 创建通知; 该标志的唯一有效值是global
。NOTIFICATION_DESCRIPTION
:对 不超过 1,024 个字符的通知。PUBSUB_TOPIC
:Pub/Sub 主题。其格式为projects/PROJECT_ID/topics/TOPIC
。FILTER
:您定义要选择的表达式 将哪些发现结果发送到 Pub/Sub例如state="ACTIVE"
。
Python
以下示例使用 v1 API。修改
v2 的示例,将 v1
替换为 v2
,并添加
将 /locations/LOCATION
设置为资源名称。
对于大多数资源,请将 /locations/LOCATION
添加到
资源名称在 /PARENT/PARENT_ID
之后,其中
PARENT
为 organizations
、folders
、
或 projects
。
对于发现结果,请将 /locations/LOCATION
添加到资源中
名称在 /sources/SOURCE_ID
之后,其中 SOURCE_ID
是
Security Command Center 服务
发出该发现结果。
Java
以下示例使用 v1 API。修改
v2 的示例,将 v1
替换为 v2
,并添加
将 /locations/LOCATION
设置为资源名称。
对于大多数资源,请将 /locations/LOCATION
添加到
资源名称在 /PARENT/PARENT_ID
之后,其中
PARENT
为 organizations
、folders
、
或 projects
。
对于发现结果,请将 /locations/LOCATION
添加到资源中
名称在 /sources/SOURCE_ID
之后,其中 SOURCE_ID
是
Security Command Center 服务
发出该发现结果。
Go
以下示例使用 v1 API。修改
v2 的示例,将 v1
替换为 v2
,并添加
将 /locations/LOCATION
设置为资源名称。
对于大多数资源,请将 /locations/LOCATION
添加到
资源名称在 /PARENT/PARENT_ID
之后,其中
PARENT
为 organizations
、folders
、
或 projects
。
对于发现结果,请将 /locations/LOCATION
添加到资源中
名称在 /sources/SOURCE_ID
之后,其中 SOURCE_ID
是
Security Command Center 服务
发出该发现结果。
Node.js
以下示例使用 v1 API。修改
v2 的示例,将 v1
替换为 v2
,并添加
将 /locations/LOCATION
设置为资源名称。
对于大多数资源,请将 /locations/LOCATION
添加到
资源名称在 /PARENT/PARENT_ID
之后,其中
PARENT
为 organizations
、folders
、
或 projects
。
对于发现结果,请将 /locations/LOCATION
添加到资源中
名称在 /sources/SOURCE_ID
之后,其中 SOURCE_ID
是
Security Command Center 服务
发出该发现结果。
PHP
以下示例使用 v1 API。修改
v2 的示例,将 v1
替换为 v2
,并添加
将 /locations/LOCATION
设置为资源名称。
对于大多数资源,请将 /locations/LOCATION
添加到
资源名称在 /PARENT/PARENT_ID
之后,其中
PARENT
为 organizations
、folders
、
或 projects
。
对于发现结果,请将 /locations/LOCATION
添加到资源中
名称在 /sources/SOURCE_ID
之后,其中 SOURCE_ID
是
Security Command Center 服务
发出该发现结果。
Ruby
以下示例使用 v1 API。修改
v2 的示例,将 v1
替换为 v2
,并添加
将 /locations/LOCATION
设置为资源名称。
对于大多数资源,请将 /locations/LOCATION
添加到
资源名称在 /PARENT/PARENT_ID
之后,其中
PARENT
为 organizations
、folders
、
或 projects
。
对于发现结果,请将 /locations/LOCATION
添加到资源中
名称在 /sources/SOURCE_ID
之后,其中 SOURCE_ID
是
Security Command Center 服务
发出该发现结果。
C#
以下示例使用 v1 API。修改
v2 的示例,将 v1
替换为 v2
,并添加
将 /locations/LOCATION
设置为资源名称。
对于大多数资源,请将 /locations/LOCATION
添加到
资源名称在 /PARENT/PARENT_ID
之后,其中
PARENT
为 organizations
、folders
、
或 projects
。
对于发现结果,请将 /locations/LOCATION
添加到资源中
名称在 /sources/SOURCE_ID
之后,其中 SOURCE_ID
是
Security Command Center 服务
发出该发现结果。
通知现已发布到您指定的 Pub/Sub 主题。
如需发布通知,系统会以 service-org-ORGANIZATION_ID@gcp-sa-scc-notification.iam.gserviceaccount.com
的形式为您创建一个服务账号。此服务账号是在您创建第一个 NotificationConfig
时由系统创建的,并在创建通知配置时被自动授予 PUBSUB_TOPIC 的 IAM 政策上的 securitycenter.notificationServiceAgent
角色。需要此服务账号角色才能接收通知。
在 VPC Service Controls 中授予边界访问权限
如果您使用 VPC Service Controls,并且 Pub/Sub 主题属于服务边界内的项目,则必须授予对项目的访问权限,以便创建通知。
如需授予对项目的访问权限,请为用于创建通知的主账号和项目创建入站和出站规则。这些规则允许访问受保护的资源,并可让 Pub/Sub 验证用户是否具有对 Pub/Sub 主题的 setIamPolicy
权限。
创建 NotificationConfig 之前
在完成创建 NotificationConfig 中的步骤之前,请执行以下操作:
转到 Google Cloud 控制台中的 VPC Service Controls 页面。
如有必要,请选择您的组织。
点击要更改的服务边界的名称。
如需查找您需要修改的服务边界,您可以查看日志中是否存在显示
RESOURCES_NOT_IN_SAME_SERVICE_PERIMETER
违规行为的条目。在这些条目中,检查servicePerimeterName
字段:accessPolicies/ACCESS_POLICY_ID/servicePerimeters/SERVICE_PERIMETER_NAME
。点击修改边界。
在导航菜单中,点击入站流量政策。
如需为用户或服务账号配置入站流量规则,请使用以下参数:
- API 客户端的 FROM 特性:
- 在来源下拉菜单中,选择所有来源。
- 在身份下拉菜单中,选择选定的身份。
- 点击选择,然后输入用于调用 Security Command Center API 的主账号。
- Google Cloud 服务/资源的 TO 属性:
- 在项目下拉菜单中,选择选定的项目。
- 点击选择,然后输入 Pub/Sub 主题所属的项目。
- 在服务下拉菜单中,选择选定的服务,然后选择 Cloud Pub/Sub API。
- 在方法下拉菜单中,选择所有操作。
- API 客户端的 FROM 特性:
点击保存。
在导航菜单中,点击出站流量政策。
点击添加规则 (Add Rule)。
如需为用户或服务账号配置出站流量规则,请输入以下参数:
- API 客户端的 FROM 特性:
- 在身份下拉菜单中,选择选定的身份。
- 点击选择,然后输入用于调用 Security Command Center API 的主账号。
- Google Cloud 服务/资源的 TO 属性:
- 在项目下拉菜单中,选择所有项目。
- 在服务下拉菜单中,选择选定的服务,然后选择 Cloud Pub/Sub API。
- 在方法下拉菜单中,选择所有操作。
- API 客户端的 FROM 特性:
点击保存。
为 NotificationConfig 创建入站流量规则
如需为 NotificationConfig
创建入站规则,请执行以下操作:
- 按照创建 NotificationConfig 中的说明执行操作。
- 重新打开上一部分中的服务边界。
- 点击入站流量政策。
- 点击添加规则 (Add Rule)。
- 如需为您创建的
NotificationConfig
服务账号配置入站规则,请输入以下参数:- API 客户端的 FROM 特性:
- 在来源下拉菜单中,选择所有来源。
- 在身份下拉菜单中,选择选定的身份。
- 点击选择,然后输入
NotificationConfig
服务账号的名称:service-org-ORGANIZATION_ID@gcp-sa-scc-notification.iam.gserviceaccount.com
- GCP 服务/资源的 TO 特性:
- 在项目下拉菜单中,选择选定的项目。
- 点击选择,然后选择 Pub/Sub 主题所属的项目。
- 在服务下拉菜单中,选择所选服务,然后选择 Cloud Pub/Sub API。
- 在方法下拉菜单中,选择所有操作。
- API 客户端的 FROM 特性:
- 在导航菜单中,点击保存。
选定的项目、用户和服务账号现在可以访问受保护的资源并创建通知。
如果您已按照本指南中的所有步骤操作,并且通知正常工作,您现在可以删除以下内容:
- 主账号的入站规则
- 主账号的出站规则
这些规则只需要配置 NotificationConfig
。但是,若要使通知继续正常工作,您必须保留 NotificationConfig
的入站规则,该规则允许将通知发布到服务边界后面的 Pub/Sub 主题。
后续步骤
- 了解如何启用实时电子邮件和聊天通知。
- 了解如何管理 Notifications API。
- 了解如何过滤通知。