本页面介绍了如何启用 Security Command Center API 通知。
通知会在几分钟内将发现结果和发现结果更新发送到 Pub/Sub 主题。Security Command Center API 通知包含 Security Command Center 在Google Cloud 控制台中显示的所有发现结果信息。
您可以将 Pub/Sub 中的 Security Command Center 通知直接关联到 Cloud Run functions 操作。如需查看有助于响应、丰富和补救的示例函数,请参阅 Cloud Run functions 代码的 Security Command Center 开源代码库。 代码库包含解决方案,可帮助您对安全发现结果采取自动操作。
或者,您可以将发现结果导出到 BigQuery,也可以在 Google Cloud 控制台中为 Pub/Sub 设置持续导出。
准备工作
- 
    
    
    
  
  
  
  
  
  
  
    
    
    
    
    
    
      
      
        
        
        
        
        
      
    
      
      
        
        
        
        
        
      
    
    
    
    
    
  
  如需获得设置和配置 Security Command Center API 通知所需的权限,请让您的管理员为您授予以下 IAM 角色: - 
  
  
    
      在其中激活 Security Command Center 的组织或项目的 Security Center Admin (roles/securitycenter.admin)
- 
  
  
    
      将在其中创建 Pub/Sub 主题的项目的 Project IAM Admin (roles/resourcemanager.projectIamAdmin)
 如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。 
- 
  
  
    
      在其中激活 Security Command Center 的组织或项目的 Security Center Admin (
- 
    
   
   
    
    
  
   
   
     
   
  
 
   
 
 
  
  
    
      Enable the Security Command Center API: Roles required to enable APIs To enable APIs, you need the Service Usage Admin IAM role ( roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.gcloud services enable securitycenter.googleapis.com 
数据驻留和通知
如果为 Security Command Center 启用了数据驻留,则定义向 Pub/Sub 持续导出的配置(即 notificationConfig 资源)会受数据驻留控制措施的约束,并且会存储在 Security Command Center 位置中。
如需将 Security Command Center 位置的发现结果导出到 Pub/Sub,您必须在与发现结果相同的 Security Command Center 位置配置持续导出。
由于持续导出中使用的过滤条件可能包含受居住地控制条件约束的数据,因此请务必在创建过滤条件之前指定正确的位置。 Security Command Center 不会限制您在哪个位置创建导出。
持续导出内容仅存储在创建它们的位置,无法在其他位置查看或修改。
创建持续导出后,您无法更改其位置。如需更改位置,您需要删除持续导出,然后在新位置重新创建。
如需了解如何在启用数据驻留的情况下使用 Security Command Center,请参阅 Security Command Center 区域端点。
设置 Pub/Sub 主题
在此任务中,您将创建并订阅要向其发送通知的 Pub/Sub 主题。
第 1 步:设置 Pub/Sub
如需设置和订阅 Pub/Sub 主题,请执行以下操作:
- 前往 Google Cloud 控制台。 
- 选择您已在其中启用 Security Command Center API 的项目。 
- 点击激活 Cloud Shell。 
- 可选:如需创建新的 Pub/Sub 主题,请运行以下命令: - gcloud pubsub topics create TOPIC_ID- 将 - TOPIC_ID替换为主题名称。
- 创建对主题的订阅: - gcloud pubsub subscriptions create SUBSCRIPTION_ID --topic=TOPIC_ID- 替换以下内容: - SUBSCRIPTION_ID:订阅 ID
- TOPIC_ID:主题 ID
 
如需详细了解如何设置 Pub/Sub,请参阅管理主题和订阅。
第 2 步:授予 Pub/Sub 主题的角色
如需创建 NotificationConfig,您需要对已创建订阅的 Pub/Sub 主题具有 Pub/Sub Admin 角色 (roles/pubsub.admin)。
如需授予此角色,请执行以下操作:
- 前往 Google Cloud 控制台。 
- 选择启用了 Security Command Center API 的项目。 
- 点击激活 Cloud Shell。 
- 向您的 Google 账号授予 Pub/Sub 主题所需的角色: - gcloud pubsub topics add-iam-policy-binding \ projects/PUBSUB_PROJECT/topics/TOPIC_ID \ --member="user:GOOGLE_ACCOUNT" \ --role="roles/pubsub.admin"- 替换以下内容: - PUBSUB_PROJECT:包含您的 Pub/Sub 主题的 Google Cloud 项目
- TOPIC_ID:主题 ID
- GOOGLE_ACCOUNT:您的 Google 账号的邮箱
 
创建 NotificationConfig
创建 NotificationConfig 之前,请注意每个组织只能有一定数量的 NotificationConfig 文件。如需了解详情,请参阅配额和限制。
NotificationConfig 包含一个 filter 字段,用于限制对有用事件的通知。此字段接受 Security Command Center API findings.list 方法中提供的所有过滤条件。
创建 NotificationConfig 时,您需要为 Google Cloud 资源层次结构中的 NotificationConfig 指定父级(组织、文件夹或项目)。如果您稍后需要检索、更新或删除 NotificationConfig,则需要在引用时添加父级组织、文件夹或项目的数字 ID。
  在 Google Cloud 控制台中,某些 NotificationConfig 资源可能带有旧版标签,这表示这些资源是使用 v1 Security Command Center API 创建的。您可以使用 Google Cloud 控制台、gcloud CLI、v1 Security Command Center API 或 Security Command Center v1 客户端库管理这些 NotificationConfig 资源。
  如需使用 gcloud CLI 管理这些 NotificationConfig 资源,您不得在运行 gcloud CLI 命令时指定位置。
使用您选择的语言或平台创建 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 位置;如果启用了数据驻留,请使用- eu、- sa或- us;否则,请使用值- global。
- NOTIFICATION_DESCRIPTION:通知的说明,不超过 1,024 个字符。
- PUBSUB_TOPIC:将接收通知的 Pub/Sub 主题。其格式为- projects/PROJECT_ID/topics/TOPIC。
- FILTER:您定义的表达式,用于选择要发送到 Pub/Sub 的发现结果。例如- state=\"ACTIVE\"。
Terraform
为组织创建 NotificationConfig:
为文件夹创建 NotificationConfig:
为项目创建 NotificationConfig:
Go
Java
Node.js
Python
通知现已发布到您指定的 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 
- 点击 修改。
- 点击出站流量政策。
- 点击添加出站流量规则。
- 
          在来源部分中,设置以下详细信息: - 在身份 > 身份部分,选择选择身份和群组。
- 点击添加身份。
- 
              输入用于调用 Security Command Center API 的主账号的邮箱。 
- 选择主账号或按 ENTER 键,然后点击添加身份。
 
- 
          在目标部分,设置以下详细信息: - 在资源 > 项目部分,选择所有项目。
- 对于操作或 IAM 角色,请选择选择操作。
- 
              点击添加操作,然后添加以下操作: - 添加 pubsub.googleapis.com 服务。
                    
                      - 点击所有方法。
- 点击添加所有方法。
 
 
- 添加 pubsub.googleapis.com 服务。
                    
                      
 
- 点击入站流量政策。
- 点击添加入站流量规则。
- 
          在来源部分中,设置以下详细信息: - 在身份 > 身份部分,选择选择身份和群组。
- 点击添加身份。
- 
              输入用于调用 Security Command Center API 的主账号的邮箱。 
- 选择主账号或按 ENTER 键,然后点击添加身份。
- 在来源部分,选择所有来源。
 
- 
          在目标部分,设置以下详细信息: - 在资源 > 项目部分,选择选择项目。
- 点击添加项目,然后添加包含 Pub/Sub 主题的项目。
- 对于操作或 IAM 角色,请选择选择操作。
- 
              点击添加操作,然后添加以下操作: - 添加 pubsub.googleapis.com 服务。
                    
                    - 点击所有方法。
- 点击添加所有方法。
 
 
- 添加 pubsub.googleapis.com 服务。
                    
                    
 
- 点击保存。
gcloud
- 
          如果尚未设置配额项目,请进行设置。选择已启用 Access Context Manager API 的项目。 gcloud config set billing/quota_project QUOTA_PROJECT_ID 将 QUOTA_PROJECT_ID替换为您要用于结算和配额的项目的 ID。
- 
          创建名为 egress-rule.yaml且包含以下内容的文件:- egressFrom: identities: - PRINCIPAL_ADDRESS egressTo: operations: - serviceName: pubsub.googleapis.com methodSelectors: - method: '*' resources: - '*' 将 PRINCIPAL_ADDRESS替换为用于调用 Security Command Center API 的主账号的地址。
- 
          创建名为 ingress-rule.yaml且包含以下内容的文件:- ingressFrom: identities: - PRINCIPAL_ADDRESS sources: - accessLevel: '*' ingressTo: operations: - serviceName: pubsub.googleapis.com methodSelectors: - method: '*' resources: - '*' 将 PRINCIPAL_ADDRESS替换为用于调用 Security Command Center API 的主账号的地址。
- 
          将出站流量规则添加到边界: gcloud access-context-manager perimeters update PERIMETER_NAME \ --set-egress-policies=egress-rule.yaml 替换以下内容: - 
              PERIMETER_NAME:边界的名称。例如accessPolicies/1234567890/servicePerimeters/example_perimeter。如需查找您需要修改的服务边界,您可以查看日志中是否存在显示 RESOURCES_NOT_IN_SAME_SERVICE_PERIMETER违规行为的条目。在这些条目中,检查servicePerimeterName字段:accessPolicies/ACCESS_POLICY_ID/servicePerimeters/SERVICE_PERIMETER_NAME 
 
- 
              
- 
          将入站规则添加到边界: gcloud access-context-manager perimeters update PERIMETER_NAME \ --set-ingress-policies=ingress-rule.yaml 替换以下内容: - 
              PERIMETER_NAME:边界的名称。例如accessPolicies/1234567890/servicePerimeters/example_perimeter。如需查找您需要修改的服务边界,您可以查看日志中是否存在显示 RESOURCES_NOT_IN_SAME_SERVICE_PERIMETER违规行为的条目。在这些条目中,检查servicePerimeterName字段:accessPolicies/ACCESS_POLICY_ID/servicePerimeters/SERVICE_PERIMETER_NAME 
 
- 
              
如需了解详情,请参阅入站流量和出站流量规则。
为 NotificationConfig 创建入站流量规则
如需为 NotificationConfig 创建入站流量规则,请完成创建 NotificationConfig 中的说明,然后完成以下步骤。
控制台
- 
        
          重新打开上一部分中的服务边界。 
- 点击入站流量政策。
- 点击添加入站流量规则。
- 
          在来源部分中,设置以下详细信息: - 在身份 > 身份部分,选择选择身份和群组。
- 点击添加身份。
- 
              输入 NotificationConfig服务代理的邮箱。 服务代理的地址采用以下格式:service-org-ORGANIZATION_ID@gcp-sa-scc-notification.iam.gserviceaccount.com 将 ORGANIZATION_ID替换为您的组织 ID。
- 选择服务代理或按 ENTER 键,然后点击添加身份。
- 在来源部分,选择所有来源。
 
- 
          在目标部分,设置以下详细信息: - 在资源 > 项目部分,选择选择项目。
- 点击添加项目,然后添加包含 Pub/Sub 主题的项目。
- 对于操作或 IAM 角色,请选择选择操作。
- 
              点击添加操作,然后添加以下操作: - 添加 pubsub.googleapis.com 服务。
                    
                    - 点击所有方法。
- 点击添加所有方法。
 
 
- 添加 pubsub.googleapis.com 服务。
                    
                    
 
- 点击保存。
gcloud
- 
          如果尚未设置配额项目,请进行设置。选择已启用 Access Context Manager API 的项目。 gcloud config set billing/quota_project QUOTA_PROJECT_ID 将 QUOTA_PROJECT_ID替换为您要用于结算和配额的项目的 ID。
- 
          创建名为 ingress-rule.yaml且包含以下内容的文件:- ingressFrom: identities: - serviceAccount:service-org-ORGANIZATION_ID@gcp-sa-scc-notification.iam.gserviceaccount.com sources: - accessLevel: '*' ingressTo: operations: - serviceName: pubsub.googleapis.com methodSelectors: - method: '*' resources: - '*' 将 ORGANIZATION_ID替换为您的组织 ID。
- 
          将入站规则添加到边界: gcloud access-context-manager perimeters update PERIMETER_NAME \ --set-ingress-policies=ingress-rule.yaml 替换以下内容: - 
              PERIMETER_NAME:边界的名称。例如accessPolicies/1234567890/servicePerimeters/example_perimeter。如需查找您需要修改的服务边界,您可以查看日志中是否存在显示 RESOURCES_NOT_IN_SAME_SERVICE_PERIMETER违规行为的条目。在这些条目中,检查servicePerimeterName字段:accessPolicies/ACCESS_POLICY_ID/servicePerimeters/SERVICE_PERIMETER_NAME 
 
- 
              
如需了解详情,请参阅入站流量和出站流量规则。
选定的项目、用户和服务账号现在可以访问受保护的资源并创建通知。
如果您已按照本指南中的所有步骤操作,并且通知正常工作,您现在可以删除以下内容:
- 主账号的入站规则
- 主账号的出站规则
这些规则只需要配置 NotificationConfig。但是,若要使通知继续正常工作,您必须保留 NotificationConfig 的入站规则,该规则允许将通知发布到服务边界后面的 Pub/Sub 主题。
后续步骤
- 了解如何启用实时邮件和聊天通知。
- 了解如何管理 Notifications API。
- 了解如何过滤通知。