このページでは、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 が有効になっている組織またはプロジェクトに対するセキュリティ センター管理者(roles/securitycenter.admin)
- 
  
  
    
      Pub/Sub トピックを作成するプロジェクトに対するプロジェクト IAM 管理者(roles/resourcemanager.projectIamAdmin)
 ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。 
- 
  
  
    
      Security Command Center が有効になっている組織またはプロジェクトに対するセキュリティ センター管理者(
- 
    
   
   
    
    
  
   
   
     
   
  
 
   
 
 
  
  
    
      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 管理者ロール(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 リソースに [Legacy] ラベルが付いている場合があります。これは、v1 Security Command Center API で作成されたことを示します。これらの NotificationConfig リソースは、 Google Cloud コンソール、gcloud CLI、v1 Security Command Center API、または Security Command Center の v1 クライアント ライブラリで管理できます。
  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 トピックに対する setIamPolicy 権限を持っていることを Pub/Sub で確認できるようにします。
NotificationConfig を作成する前に
NotificationConfig の作成の手順を完了する前に、次の手順を完了します。
コンソール
- 
        
          Google Cloud コンソールで、[VPC Service Controls] ページに移動します。 
- 組織またはプロジェクトを選択します。
- 
            プルダウン リストで、アクセスを許可するサービス境界を含むアクセス ポリシーを選択します。 アクセス ポリシーに関連付けられているサービス境界がリストに表示されます。 
- 
            更新するサービス境界の名前をクリックします。 変更する必要があるサービス境界を確認するには、ログで RESOURCES_NOT_IN_SAME_SERVICE_PERIMETER違反を示すエントリを確認します。これらのエントリで、servicePerimeterNameフィールドを確認します。accessPolicies/ACCESS_POLICY_ID/servicePerimeters/SERVICE_PERIMETER_NAME 
- [ 編集] をクリックします。
- [下り(外向き)ポリシー] をクリックします。
- [下り(外向き)ルールを追加] をクリックします。
- 
          [送信元] セクションで、次の詳細を設定します。 - [ID > ID] で、[選択されている ID とグループ] を選択します。
- [ID の追加] をクリックします。
- 
              Security Command Center API の呼び出しに使用されるプリンシパルのメールアドレスを入力します。 
- プリンシパルを選択するか、Enter キーを押して、[ID を追加] をクリックします。
 
- 
          [宛先] セクションで、次の詳細を設定します。 - [リソース > プロジェクト] で、[すべてのプロジェクト] を選択します。
- [オペレーションまたは IAM ロール] で、[オペレーションを選択] を選択します。
- 
              [オペレーションを追加] をクリックして、次のオペレーションを追加します。 - pubsub.googleapis.com サービスを追加します。- [すべてのメソッド] をクリックします。
- [すべてのメソッドを追加] をクリックします。
 
 
- pubsub.googleapis.com サービスを追加します。
 
- [上り(内向き)ポリシー] をクリックします。
- [上り(内向き)ルールを追加] をクリックします。
- 
          [送信元] セクションで、次の詳細を設定します。 - [ID > ID] で、[選択されている ID とグループ] を選択します。
- [ID の追加] をクリックします。
- 
              Security Command Center API の呼び出しに使用されるプリンシパルのメールアドレスを入力します。 
- プリンシパルを選択するか、Enter キーを押して、[ID を追加] をクリックします。
- [ソース] で [すべてのソース] を選択します。
 
- 
          [宛先] セクションで、次の詳細を設定します。 - [リソース > プロジェクト] で、[プロジェクトを選択] を選択します。
- [プロジェクトを追加] をクリックし、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 の作成の手順を完了してから、次の操作を行います。
コンソール
- 
        
          前のセクションのサービス境界を再度開きます。 
- [上り(内向き)ポリシー] をクリックします。
- [上り(内向き)ルールを追加] をクリックします。
- 
          [送信元] セクションで、次の詳細を設定します。 - [ID > ID] で、[選択されている ID とグループ] を選択します。
- [ID の追加] をクリックします。
- 
              NotificationConfigサービス エージェントのメールアドレスを入力します。サービス エージェントのアドレスは次の形式です。service-org-ORGANIZATION_ID@gcp-sa-scc-notification.iam.gserviceaccount.com ORGANIZATION_IDは、実際の組織 ID に置き換えます。
- サービス エージェントを選択するか、Enter キーを押して、[ID を追加] をクリックします。
- [ソース] で [すべてのソース] を選択します。
 
- 
          [宛先] セクションで、次の詳細を設定します。 - [リソース > プロジェクト] で、[プロジェクトを選択] を選択します。
- [プロジェクトを追加] をクリックし、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 トピックに通知をパブリッシュできます。
次のステップ
- リアルタイム メールとチャット通知を有効にする方法を確認する。
- 通知 API を管理する方法を確認する。
- 通知のフィルタリングを確認する。