Aktifkan notifikasi penemuan untuk Pub/Sub

Halaman ini menjelaskan cara mengaktifkan notifikasi Security Command Center API.

Notifikasi mengirimkan temuan dan menemukan pembaruan pada topik Pub/Sub dalam hitungan menit. Notifikasi Security Command Center API mencakup semua informasi temuan yang ditampilkan oleh Security Command Center di Konsol Google Cloud.

Anda dapat menghubungkan notifikasi Security Command Center di Pub/Sub langsung ke tindakan Cloud Functions. Untuk contoh fungsi yang dapat membantu terkait respons, pengayaan, dan perbaikan, lihat repositori open source kode Cloud Functions di repositori open source Security Command Center. Repositori berisi solusi untuk membantu Anda mengambil tindakan otomatis pada temuan keamanan.

Atau, Anda dapat mengekspor temuan ke BigQuery atau menyiapkan Continuous Exports untuk Pub/Sub di Konsol Google Cloud.

Sebelum memulai

Untuk menyiapkan dan mengonfigurasi notifikasi, Anda harus memiliki peran Identity and Access Management (IAM) berikut:

  • Security Center Admin (roles/securitycenter.Admin): untuk mengaktifkan notifikasi Security Command Center API
  • Security Center Admin Viewer (roles/securitycenter.adminViewer): untuk mengakses Security Command Center di Konsol Google Cloud
  • Untuk memberikan peran ke akun layanan notifikasi atau akun gcloud CLI di level organisasi, level folder, atau level project, salah satu peran berikut:
    • Administrator Organisasi (roles/resourcemanager.organizationAdmin)
    • Admin IAM Folder (roles/resourcemanager.folderIamAdmin)
    • Project IAM Admin (roles/resourcemanager.projectIamAdmin)

Peran IAM untuk Security Command Center dapat diberikan di tingkat organisasi, folder, atau project. Kemampuan Anda untuk melihat, mengedit, membuat, atau memperbarui temuan, aset, dan sumber keamanan bergantung pada tingkat akses yang diberikan kepada Anda. Untuk mempelajari peran Security Command Center lebih lanjut, lihat Kontrol akses.

Menyiapkan notifikasi Security Command Center API

Untuk menyiapkan notifikasi, aktifkan Security Command Center API terlebih dahulu.

Mengaktifkan Security Command Center API

Untuk mengaktifkan Security Command Center API:

  1. Buka halaman API Library di Konsol Google Cloud.

    Buka API Library

  2. Pilih project yang ingin Anda aktifkan API notifikasinya.

  3. Di kotak Search, masukkan Security Command Center, lalu klik Security Command Center di hasil penelusuran.

  4. Pada halaman API yang muncul, klik Enable.

Security Command Center API diaktifkan untuk project Anda. Selanjutnya, Anda akan menggunakan gcloud CLI atau library klien untuk berlangganan topik Pub/Sub dan menyiapkan izin.

Residensi data dan notifikasi

Jika residensi data diaktifkan untuk Security Command Center, konfigurasi yang menentukan ekspor berkelanjutan ke resource Pub/Sub—notificationConfig—tunduk pada kontrol residensi data dan disimpan di lokasi Security Command Center Anda.

Untuk mengekspor temuan di lokasi Security Command Center ke Pub/Sub, Anda harus mengonfigurasi ekspor berkelanjutan di lokasi Security Command Center yang sama dengan temuan.

Karena filter yang digunakan dalam ekspor berkelanjutan dapat berisi data yang tunduk pada kontrol residensi, pastikan Anda menentukan lokasi yang benar sebelum membuatnya. Security Command Center tidak membatasi lokasi tempat Anda membuat ekspor.

Ekspor berkelanjutan hanya disimpan di lokasi tempatnya dibuat dan tidak dapat dilihat atau diedit di lokasi lain.

Setelah membuat ekspor berkelanjutan, Anda tidak dapat mengubah lokasinya. Untuk mengubah lokasi, Anda harus menghapus ekspor berkelanjutan dan membuatnya ulang di lokasi baru.

Untuk mengambil ekspor berkelanjutan dengan menggunakan panggilan API, Anda harus menentukan lokasi dalam nama resource lengkap notificationConfig. Contoh:

GET https://securitycenter.googleapis.com/v2/{name=organizations/123/locations/eu/notificationConfigs/my-pubsub-export-01}

Demikian pula, untuk mengambil ekspor berkelanjutan dengan menggunakan gcloud CLI, Anda harus menentukan lokasi dalam nama resource lengkap konfigurasi atau dengan menggunakan flag --locations. Contoh:

gcloud scc notifications describe myContinuousExport organizations/123 \
    --location=locations/us

Menyiapkan topik Pub/Sub

Pada langkah ini, Anda akan membuat dan berlangganan topik Pub/Sub yang ingin dikirimi notifikasi. Jika Anda tidak perlu memanggil API secara terprogram, gunakan perintah gcloud CLI.

gcloud

Untuk menyiapkan fitur notifikasi Security Command Center API menggunakan gcloud CLI, Anda melakukan langkah-langkah berikut:

  1. Menyiapkan topik dan langganan Pub/Sub.
  2. Siapkan izin akun gcloud CLI.

Langkah 1: Menyiapkan Pub/Sub

Untuk menyiapkan dan berlangganan topik Pub/Sub, lakukan langkah berikut:

  1. Buka Konsol Google Cloud.

    Buka konsol Google Cloud.

  2. Pilih project tempat Anda mengaktifkan Security Command Center API.

  3. Klik Activate Cloud Shell.

  4. Untuk membuat topik Pub/Sub baru atau menggunakan topik yang sudah ada, jalankan perintah berikut:

      gcloud pubsub topics create TOPIC_ID
    

    Ganti TOPIC_ID dengan nama topik Anda.

  5. Setel variabel lingkungan ID topik:

      export TOPIC_ID=TOPIC_ID
    
  6. Buat langganan ke topik:

      gcloud pubsub subscriptions create SUBSCRIPTION_ID --topic TOPIC_ID
    

    Ganti SUBSCRIPTION_ID dengan nama langganan Anda.

Untuk mempelajari lebih lanjut cara menyiapkan Pub/Sub, lihat Mengelola topik dan langganan.

Selanjutnya, Anda menyiapkan izin untuk akun Anda.

Langkah 2: Siapkan izin akun gcloud CLI

Untuk membuat NotificationConfig, Anda perlu memberikan peran berikut ke akun gcloud CLI:

  • Security Center Admin (roles/securitycenter.admin) atau Security Center Notification configurations Editor (roles/securitycenter.notificationConfigEditor). Peran ini perlu diberikan pada tingkat yang sama—organisasi, folder, atau project—tempat Anda membuat NotificationConfig.
  • Pub/Sub Admin (roles/pubsub.admin) di topik Pub/Sub yang menerima notifikasi

di tingkat organisasi, folder, atau proyek

Untuk memberikan izin ini, lakukan hal berikut:

  1. Buka Konsol Google Cloud.

    Buka konsol Google Cloud.

  2. Pilih project tempat Anda mengaktifkan Security Command Center API.

  3. Klik Activate Cloud Shell.

    1. Tetapkan nama organisasi Anda:

      export ORGANIZATION_ID=ORGANIZATION_ID
      

      Ganti ORGANIZATION_ID dengan ID organisasi Anda.

    2. Tetapkan project ID untuk project tempat topik Pub/Sub berada:

      export PUBSUB_PROJECT=PROJECT_ID
      

      Ganti PROJECT_ID dengan project ID Anda.

    3. Tetapkan akun gcloud CLI yang Anda gunakan:

      export GCLOUD_ACCOUNT=EMAIL
      

      Ganti EMAIL dengan alamat email akun yang menjalankan perintah gcloud CLI.

    4. Tetapkan ID topik atau gunakan topik yang telah Anda siapkan sebelumnya.

      export TOPIC_ID=TOPIC_ID
      

      Ganti TOPIC_ID dengan nama topik Anda.

    5. Beri akun gcloud CLI peran Pub/Sub yang memiliki izin pubsub.topics.setIamPolicy:

      gcloud pubsub topics add-iam-policy-binding \
        projects/$PUBSUB_PROJECT/topics/$TOPIC_ID \
        --member="user:$GCLOUD_ACCOUNT" \
        --role='roles/pubsub.admin'
      
    6. Beri akun gcloud CLI peran yang mencakup semua izin securitycenter.notification, seperti roles/securitycenter.notificationConfigEditor atau roles/securitycenter.admin. Anda dapat memberikan peran tersebut di tingkat project, folder, atau organisasi.

      Untuk memberikan peran di level project:

      gcloud projects add-iam-policy-binding PROJECT_ID \
      --member="user:$GCLOUD_ACCOUNT" \
      --role='ROLE_NAME'
      

      Ganti kode berikut:

      • PROJECT_ID: ID project tempat Security Command Center diaktifkan
      • ROLE_NAME: peran yang akan ditetapkan

      Untuk memberikan peran di tingkat organisasi:

      gcloud organizations add-iam-policy-binding $ORGANIZATION_ID \
        --member="user:$GCLOUD_ACCOUNT" \
        --role='ROLE_NAME'
      

      Ganti ROLE_NAME dengan peran yang akan ditetapkan.

Selanjutnya, Anda akan membuat NotificationConfig.

Library klien

Untuk menyiapkan fitur notifikasi Security Command Center API menggunakan library klien, lakukan langkah-langkah berikut:

  1. Siapkan akun layanan.
  2. Download library klien API.
  3. Menyiapkan lingkungan pengembangan.
  4. Menyiapkan topik dan langganan Pub/Sub.

Langkah 1: Menyiapkan akun layanan

Fitur notifikasi Security Command Center API menggunakan akun layanan dengan izin yang sesuai untuk mengonfigurasi notifikasi. Akun layanan ini hanya digunakan untuk penyiapan awal konfigurasi, dan Anda dapat menggunakannya kembali untuk membuat lebih banyak konfigurasi notifikasi nanti. Akun layanan ini terpisah dari akun layanan yang dibuat untuk Anda saat menyiapkan Security Command Center.

Untuk membuat akun layanan, lakukan hal berikut:

  1. Buka Konsol Google Cloud.

    Buka konsol Google Cloud.

  2. Pilih project tempat Anda mengaktifkan Security Command Center API.

  3. Klik Activate Cloud Shell.

  4. Menetapkan variabel lingkungan:

    1. Tetapkan nama organisasi Anda:

        export ORGANIZATION_ID=ORGANIZATION_ID
      

      Ganti ORGANIZATION_ID dengan ID organisasi Anda.

    2. Tetapkan project ID untuk project tempat Anda ingin mengaktifkan API notifikasi:

        export PROJECT_ID=PROJECT_ID
      

      Ganti PROJECT_ID dengan project ID Anda.

    3. Tetapkan ID kustom yang ingin Anda gunakan untuk akun layanan baru, seperti scc-notifications. Panjang nama akun layanan harus antara 6 hingga 30 karakter, dimulai dengan huruf, dan semuanya terdiri dari karakter alfanumerik huruf kecil dan tanda hubung:

        export SERVICE_ACCOUNT=CUSTOM_ID
      

      Ganti CUSTOM_ID dengan nama kustom untuk akun layanan.

    4. Tetapkan jalur tempat kunci akun layanan akan disimpan, seperti 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
      

      Ganti FULL_KEY_LOCATION_PATH dengan jalur lengkap ke kunci akun layanan Anda.

  5. Buat akun layanan yang terkait dengan project ID Anda:

       gcloud iam service-accounts create $SERVICE_ACCOUNT  --display-name \
        "Service Account for [USER]"  --project $PROJECT_ID
    
  6. Buat kunci untuk dikaitkan dengan akun layanan. Kunci ini digunakan saat Anda membuat NotificationConfig, dan disimpan secara persisten di KEY_LOCATION yang Anda tentukan pada langkah sebelumnya.

       gcloud iam service-accounts keys create $KEY_LOCATION  --iam-account \
        $SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com
    
  7. Beri akun layanan peran yang mencakup semua izin securitycenter.notification, seperti roles/securitycenter.notificationConfigEditor atau roles/securitycenter.admin. Anda dapat memberikan peran tersebut di level project, folder, atau organisasi.

    Untuk memberikan peran di level project:

       gcloud projects add-iam-policy-binding $PROJECT_ID \
         --member="serviceAccount:$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com" \
         --role='ROLE_NAME'
    

    Ganti ROLE_NAME dengan peran yang akan ditetapkan.

    Untuk memberikan peran di tingkat organisasi:

       gcloud organizations add-iam-policy-binding $ORGANIZATION_ID \
         --member="serviceAccount:$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com" \
         --role='ROLE_NAME'
    

    Ganti ROLE_NAME dengan peran yang akan ditetapkan.

Akun layanan kini disiapkan untuk digunakan dengan notifikasi, dan kunci akun layanan disimpan di KEY_LOCATION yang Anda tentukan. Untuk mempelajari akun layanan lebih lanjut, lihat membuat dan mengelola kunci akun layanan.

Langkah 2: Menyiapkan lingkungan pengembangan

Untuk menggunakan fitur notifikasi Security Command Center API, Anda dapat menggunakan gcloud CLI atau mendownload library klien dan menyiapkan lingkungan pengembangan untuk bahasa pilihan Anda.

Python

  1. Opsional: Sebelum menginstal library Python, sebaiknya gunakan Virtualenv untuk membuat lingkungan Python yang terisolasi.

     virtualenv YOUR_ENV
     source YOUR_ENV/bin/activate
    

    Ganti YOUR_ENV dengan nama lingkungan virtual Anda.

  2. Instal pip untuk mengelola penginstalan library Python.

  3. Jalankan perintah berikut untuk menginstal library Python:

     pip install google-cloud-securitycenter
    

Java

Untuk menyertakan library Java Security Command Center sebagai dependensi dalam project Anda, pilih artefak dari repositori Maven. Notifikasi disertakan dalam library versi 0.119.0 dan yang lebih baru.

Jika Anda menggunakan Intellij, tetapkan variabel lingkungan GOOGLE_APPLICATION_CREDENTIALS ke jalur absolut kunci akun layanan notifikasi yang Anda download pada langkah sebelumnya:

  1. Di Intellij, klik Run > Edit Configurations.
  2. Tetapkan variabel berikut di bagian Application > Run_Configuration_For_Sample > Environment Variables:

      GOOGLE_APPLICATION_CREDENTIALS=ABSOLUTE_PATH_TO_SERVICE_ACCOUNT_KEY
    

    Ganti ABSOLUTE_PATH_TO_SERVICE_ACCOUNT_KEY dengan jalur lengkap ke kunci akun layanan Anda.

Go

Untuk menginstal dependensi API Go notifikasi, download library Go:

  go get cloud.google.com/go/securitycenter/apiv1

Node.js

Di folder project, gunakan npm untuk menginstal dependensi API notifikasi yang diperlukan:

  npm install --save @google-cloud/security-center/

Langkah 3: Menyiapkan Pub/Sub

Untuk mengirim notifikasi ke Pub/Sub, Anda harus berlangganan topik Pub/Sub dan memberi akun layanan notifikasi peran IAM yang menyertakan izin pubsub.topics.setIamPolicy:

  1. Buat topik Pub/Sub baru atau gunakan topik yang sudah ada:

       gcloud pubsub topics create TOPIC_ID
    

    Ganti TOPIC_ID dengan ID topik Anda.

  2. Menetapkan variabel lingkungan:

    1. Menetapkan ID topik:

        export TOPIC_ID=TOPIC_ID
      
    2. Tetapkan project ID untuk project tempat Anda mengaktifkan API notifikasi:

        export CONSUMER_PROJECT=PROJECT_ID
      

      Ganti PROJECT_ID dengan project ID Anda.

    3. Tetapkan email akun layanan yang Anda buat di langkah sebelumnya:

        export SERVICE_ACCOUNT_EMAIL=SERVICE_ACCOUNT_NAME@$CONSUMER_PROJECT.iam.gserviceaccount.com
      

      Ganti SERVICE_ACCOUNT_NAME dengan nama akun layanan.

  3. Buat langganan ke topik:

       gcloud pubsub subscriptions create SUBSCRIPTION_ID --topic TOPIC_ID
    

    Ganti SUBSCRIPTION_ID dengan ID langganan.

  4. Berikan peran ke akun layanan notifikasi dengan izin 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'
    

Untuk mempelajari lebih lanjut cara menyiapkan Pub/Sub, lihat Mengelola topik dan langganan. Pada langkah berikutnya, Anda akan menyelesaikan penyiapan dengan membuat NotificationConfig.

Membuat NotificationConfig

Sebelum Anda membuat NotificationConfig, perhatikan bahwa setiap organisasi dapat memiliki file NotificationConfig dalam jumlah terbatas. Untuk informasi selengkapnya, lihat Kuota dan batas.

NotificationConfig menyertakan kolom filter yang membatasi notifikasi hanya untuk peristiwa yang berguna. Kolom ini menerima semua filter yang tersedia di metode findings.list Security Command Center API.

Saat membuat NotificationConfig, Anda menentukan induk untuk NotificationConfig dari hierarki resource Google Cloud, baik organisasi, folder, maupun project. Jika nanti perlu mengambil, memperbarui, atau menghapus NotificationConfig, Anda harus menyertakan ID numerik organisasi, folder, atau project induk saat mereferensikannya.

Untuk membuat NotificationConfig menggunakan bahasa atau platform pilihan Anda:

gcloud

gcloud scc notifications create NOTIFICATION_NAME \
--PARENT=PARENT_ID \
--location=LOCATION
--description="NOTIFICATION_DESCRIPTION" \
--pubsub-topic=PUBSUB_TOPIC \
--filter="FILTER"

Ganti kode berikut:

  • NOTIFICATION_NAME: nama notifikasi. Harus berisi antara 1 hingga 128 karakter dan hanya berisi karakter alfanumerik, garis bawah, atau tanda hubung.
  • PARENT: cakupan dalam hierarki resource tempat notifikasi diterapkan, organization, folder, atau project.
  • PARENT_ID: ID organisasi, folder, atau project induk, yang ditentukan dalam format organizations/123, folders/456, atau projects/789.
  • LOCATION: Jika residensi data diaktifkan, tentukan lokasi Security Command Center untuk membuat notifikasi. Resource notificationConfig yang dihasilkan hanya disimpan di lokasi ini. Hanya temuan yang dikeluarkan di lokasi ini yang dikirim ke Pub/Sub.

    Jika residensi data tidak diaktifkan, menentukan flag --location akan membuat notifikasi menggunakan Security Command Center API v2, dan satu-satunya nilai yang valid untuk flag tersebut adalah global.

  • NOTIFICATION_DESCRIPTION: deskripsi notifikasi yang berisi maksimal 1.024 karakter.

  • PUBSUB_TOPIC: Topik Pub/Sub yang akan menerima notifikasi. Formatnya adalah projects/PROJECT_ID/topics/TOPIC.

  • FILTER: ekspresi yang Anda tentukan untuk memilih temuan yang akan dikirim ke Pub/Sub. Misalnya, state="ACTIVE".

Python

Contoh berikut menggunakan API v1. Guna memodifikasi contoh untuk v2, ganti v1 dengan v2 dan tambahkan /locations/LOCATION ke nama resource.

Untuk sebagian besar resource, tambahkan /locations/LOCATION ke nama resource setelah /PARENT/PARENT_ID, dengan PARENT adalah organizations, folders, atau projects.

Untuk temuan, tambahkan /locations/LOCATION ke nama resource setelah /sources/SOURCE_ID, dengan SOURCE_ID adalah ID layanan Security Command Center yang mengeluarkan temuan tersebut.

def create_notification_config(parent_id, notification_config_id, pubsub_topic):
    """
    Args:
        parent_id: must be in one of the following formats:
            "organizations/{organization_id}"
            "projects/{project_id}"
            "folders/{folder_id}"
        notification_config_id: "your-config-id"
        pubsub_topic: "projects/{your-project-id}/topics/{your-topic-ic}"

    Ensure this ServiceAccount has the "pubsub.topics.setIamPolicy" permission on the new topic.
    """
    from google.cloud import securitycenter as securitycenter

    client = securitycenter.SecurityCenterClient()

    created_notification_config = client.create_notification_config(
        request={
            "parent": parent_id,
            "config_id": notification_config_id,
            "notification_config": {
                "description": "Notification for active findings",
                "pubsub_topic": pubsub_topic,
                "streaming_config": {"filter": 'state = "ACTIVE"'},
            },
        }
    )

    print(created_notification_config)

Java

Contoh berikut menggunakan API v1. Guna memodifikasi contoh untuk v2, ganti v1 dengan v2 dan tambahkan /locations/LOCATION ke nama resource.

Untuk sebagian besar resource, tambahkan /locations/LOCATION ke nama resource setelah /PARENT/PARENT_ID, dengan PARENT adalah organizations, folders, atau projects.

Untuk temuan, tambahkan /locations/LOCATION ke nama resource setelah /sources/SOURCE_ID, dengan SOURCE_ID adalah ID layanan Security Command Center yang mengeluarkan temuan tersebut.


import com.google.cloud.securitycenter.v1.CreateNotificationConfigRequest;
import com.google.cloud.securitycenter.v1.NotificationConfig;
import com.google.cloud.securitycenter.v1.NotificationConfig.StreamingConfig;
import com.google.cloud.securitycenter.v1.SecurityCenterClient;
import java.io.IOException;

public class CreateNotificationConfigSnippets {

  public static void main(String[] args) throws IOException {
    // parentId: must be in one of the following formats:
    //    "organizations/{organization_id}"
    //    "projects/{project_id}"
    //    "folders/{folder_id}"
    String parentId = String.format("organizations/%s", "ORG_ID");
    String notificationConfigId = "{config-id}";
    String projectId = "{your-project}";
    String topicName = "{your-topic}";

    createNotificationConfig(parentId, notificationConfigId, projectId, topicName);
  }

  // Crete a notification config.
  // Ensure the ServiceAccount has the "pubsub.topics.setIamPolicy" permission on the new topic.
  public static NotificationConfig createNotificationConfig(
      String parentId, String notificationConfigId, String projectId, String topicName)
      throws IOException {
    // Initialize client that will be used to send requests. This client only needs to be created
    // once, and can be reused for multiple requests. After completing all of your requests, call
    // the "close" method on the client to safely clean up any remaining background resources.
    try (SecurityCenterClient client = SecurityCenterClient.create()) {

      // Ensure this ServiceAccount has the "pubsub.topics.setIamPolicy" permission on the topic.
      String pubsubTopic = String.format("projects/%s/topics/%s", projectId, topicName);

      CreateNotificationConfigRequest request =
          CreateNotificationConfigRequest.newBuilder()
              .setParent(parentId)
              .setConfigId(notificationConfigId)
              .setNotificationConfig(
                  NotificationConfig.newBuilder()
                      .setDescription("Java notification config")
                      .setPubsubTopic(pubsubTopic)
                      .setStreamingConfig(
                          StreamingConfig.newBuilder().setFilter("state = \"ACTIVE\"").build())
                      .build())
              .build();

      NotificationConfig response = client.createNotificationConfig(request);
      System.out.printf("Notification config was created: %s%n", response);
      return response;
    }
  }
}

Go

Contoh berikut menggunakan API v1. Guna memodifikasi contoh untuk v2, ganti v1 dengan v2 dan tambahkan /locations/LOCATION ke nama resource.

Untuk sebagian besar resource, tambahkan /locations/LOCATION ke nama resource setelah /PARENT/PARENT_ID, dengan PARENT adalah organizations, folders, atau projects.

Untuk temuan, tambahkan /locations/LOCATION ke nama resource setelah /sources/SOURCE_ID, dengan SOURCE_ID adalah ID layanan Security Command Center yang mengeluarkan temuan tersebut.

import (
	"context"
	"fmt"
	"io"

	securitycenter "cloud.google.com/go/securitycenter/apiv1"
	"cloud.google.com/go/securitycenter/apiv1/securitycenterpb"
)

func createNotificationConfig(w io.Writer, orgID string, pubsubTopic string, notificationConfigID string) error {
	// orgID := "your-org-id"
	// pubsubTopic := "projects/{your-project}/topics/{your-topic}"
	// notificationConfigID := "your-config-id"

	ctx := context.Background()
	client, err := securitycenter.NewClient(ctx)

	if err != nil {
		return fmt.Errorf("securitycenter.NewClient: %w", err)
	}
	defer client.Close()

	req := &securitycenterpb.CreateNotificationConfigRequest{
		// Parent must be in one of the following formats:
		//		"organizations/{orgId}"
		//		"projects/{projectId}"
		//		"folders/{folderId}"
		Parent:   fmt.Sprintf("organizations/%s", orgID),
		ConfigId: notificationConfigID,
		NotificationConfig: &securitycenterpb.NotificationConfig{
			Description: "Go sample config",
			PubsubTopic: pubsubTopic,
			NotifyConfig: &securitycenterpb.NotificationConfig_StreamingConfig_{
				StreamingConfig: &securitycenterpb.NotificationConfig_StreamingConfig{
					Filter: `state = "ACTIVE"`,
				},
			},
		},
	}

	notificationConfig, err := client.CreateNotificationConfig(ctx, req)
	if err != nil {
		return fmt.Errorf("Failed to create notification config: %w", err)
	}
	fmt.Fprintln(w, "New NotificationConfig created: ", notificationConfig)

	return nil
}

Node.js

Contoh berikut menggunakan API v1. Guna memodifikasi contoh untuk v2, ganti v1 dengan v2 dan tambahkan /locations/LOCATION ke nama resource.

Untuk sebagian besar resource, tambahkan /locations/LOCATION ke nama resource setelah /PARENT/PARENT_ID, dengan PARENT adalah organizations, folders, atau projects.

Untuk temuan, tambahkan /locations/LOCATION ke nama resource setelah /sources/SOURCE_ID, dengan SOURCE_ID adalah ID layanan Security Command Center yang mengeluarkan temuan tersebut.

// npm install '@google-cloud/security-center'
const {SecurityCenterClient} = require('@google-cloud/security-center');

const client = new SecurityCenterClient();

// parent: must be in one of the following formats:
//    `organizations/${organization_id}`
//    `projects/${project_id}`
//    `folders/${folder_id}`
// configId = "your-config-name";
// pubsubTopic = "projects/{your-project}/topics/{your-topic}";
// Ensure this Service Account has the "pubsub.topics.setIamPolicy" permission on this topic.
const parent = `organizations/${organizationId}`;

async function createNotificationConfig() {
  const [response] = await client.createNotificationConfig({
    parent: parent,
    configId: configId,
    notificationConfig: {
      description: 'Sample config for node.js',
      pubsubTopic: pubsubTopic,
      streamingConfig: {filter: 'state = "ACTIVE"'},
    },
  });
  console.log('Notification config creation succeeded: ', response);
}

createNotificationConfig();

PHP

Contoh berikut menggunakan API v1. Guna memodifikasi contoh untuk v2, ganti v1 dengan v2 dan tambahkan /locations/LOCATION ke nama resource.

Untuk sebagian besar resource, tambahkan /locations/LOCATION ke nama resource setelah /PARENT/PARENT_ID, dengan PARENT adalah organizations, folders, atau projects.

Untuk temuan, tambahkan /locations/LOCATION ke nama resource setelah /sources/SOURCE_ID, dengan SOURCE_ID adalah ID layanan Security Command Center yang mengeluarkan temuan tersebut.

use Google\Cloud\SecurityCenter\V1\Client\SecurityCenterClient;
use Google\Cloud\SecurityCenter\V1\CreateNotificationConfigRequest;
use Google\Cloud\SecurityCenter\V1\NotificationConfig;
use Google\Cloud\SecurityCenter\V1\NotificationConfig\StreamingConfig;

/**
 * @param string $organizationId        Your org ID
 * @param string $notificationConfigId  A unique identifier
 * @param string $projectId             Your Cloud Project ID
 * @param string $topicName             Your topic name
 */
function create_notification(
    string $organizationId,
    string $notificationConfigId,
    string $projectId,
    string $topicName
): void {
    $securityCenterClient = new SecurityCenterClient();
    // 'parent' must be in one of the following formats:
    //		"organizations/{orgId}"
    //		"projects/{projectId}"
    //		"folders/{folderId}"
    $parent = $securityCenterClient::organizationName($organizationId);
    $pubsubTopic = $securityCenterClient::topicName($projectId, $topicName);

    $streamingConfig = (new StreamingConfig())->setFilter('state = "ACTIVE"');
    $notificationConfig = (new NotificationConfig())
        ->setDescription('A sample notification config')
        ->setPubsubTopic($pubsubTopic)
        ->setStreamingConfig($streamingConfig);
    $createNotificationConfigRequest = (new CreateNotificationConfigRequest())
        ->setParent($parent)
        ->setConfigId($notificationConfigId)
        ->setNotificationConfig($notificationConfig);

    $response = $securityCenterClient->createNotificationConfig($createNotificationConfigRequest);
    printf('Notification config was created: %s' . PHP_EOL, $response->getName());
}

Ruby

Contoh berikut menggunakan API v1. Guna memodifikasi contoh untuk v2, ganti v1 dengan v2 dan tambahkan /locations/LOCATION ke nama resource.

Untuk sebagian besar resource, tambahkan /locations/LOCATION ke nama resource setelah /PARENT/PARENT_ID, dengan PARENT adalah organizations, folders, atau projects.

Untuk temuan, tambahkan /locations/LOCATION ke nama resource setelah /sources/SOURCE_ID, dengan SOURCE_ID adalah ID layanan Security Command Center yang mengeluarkan temuan tersebut.

require "google/cloud/security_center"

# Your organization id. e.g. for "organizations/123", this would be "123".
# org_id = "YOUR_ORGANZATION_ID"

# Your notification config id. e.g. for
# "organizations/123/notificationConfigs/my-config" this would be "my-config".
# config_id = "YOUR_CONFIG_ID"

# The PubSub topic where notifications will be published.
# pubsub_topic = "YOUR_TOPIC"

client = Google::Cloud::SecurityCenter.security_center

# You can also use 'project_id' or 'folder_id' as a parent.
# client.project_path project: project_id
# client.folder_path folder: folder_id
parent = client.organization_path organization: org_id

notification_config = {
  description:      "Sample config for Ruby",
  pubsub_topic:     pubsub_topic,
  streaming_config: { filter: 'state = "ACTIVE"' }
}

response = client.create_notification_config(
  parent:              parent,
  config_id:           config_id,
  notification_config: notification_config
)
puts "Created notification config #{config_id}: #{response}."

C#

Contoh berikut menggunakan API v1. Guna memodifikasi contoh untuk v2, ganti v1 dengan v2 dan tambahkan /locations/LOCATION ke nama resource.

Untuk sebagian besar resource, tambahkan /locations/LOCATION ke nama resource setelah /PARENT/PARENT_ID, dengan PARENT adalah organizations, folders, atau projects.

Untuk temuan, tambahkan /locations/LOCATION ke nama resource setelah /sources/SOURCE_ID, dengan SOURCE_ID adalah ID layanan Security Command Center yang mengeluarkan temuan tersebut.


using Google.Api.Gax.ResourceNames;
using Google.Cloud.SecurityCenter.V1;
using System;

///<summary> Create NotificationConfig Snippet. </summary>
public class CreateNotificationConfigSnippets
{
    public static NotificationConfig CreateNotificationConfig(
        string organizationId, string notificationConfigId, string projectId, string topicName)
    {
        // You can also use 'projectId' or 'folderId' instead of the 'organizationId'.
        //      ProjectName projectName = new ProjectName(projectId);
        //      FolderName folderName = new FolderName(folderId);
        OrganizationName orgName = new OrganizationName(organizationId);
        TopicName pubsubTopic = new TopicName(projectId, topicName);

        SecurityCenterClient client = SecurityCenterClient.Create();
        CreateNotificationConfigRequest request = new CreateNotificationConfigRequest
        {
            ParentAsOrganizationName = orgName,
            ConfigId = notificationConfigId,
            NotificationConfig = new NotificationConfig
            {
                Description = ".Net notification config",
                PubsubTopicAsTopicName = pubsubTopic,
                StreamingConfig = new NotificationConfig.Types.StreamingConfig { Filter = "state = \"ACTIVE\"" }
            }
        };

        NotificationConfig response = client.CreateNotificationConfig(request);
        Console.WriteLine($"Notification config was created: {response}");
        return response;
    }
}

Sekarang notifikasi dipublikasikan ke topik Pub/Sub yang Anda tentukan.

Untuk memublikasikan notifikasi, akun layanan dibuat untuk Anda dalam bentuk service-org-ORGANIZATION_ID@gcp-sa-scc-notification.iam.gserviceaccount.com. Akun layanan ini dibuat saat Anda membuat NotificationConfig pertama dan otomatis diberi peran securitycenter.notificationServiceAgent berdasarkan kebijakan IAM untuk PUBSUB_TOPIC saat membuat konfigurasi notifikasi. Peran akun layanan ini diperlukan agar notifikasi dapat berfungsi.

Memberikan akses perimeter di Kontrol Layanan VPC

Jika Anda menggunakan Kontrol Layanan VPC dan topik Pub/Sub merupakan bagian dari project di dalam perimeter layanan, Anda harus memberikan akses ke project untuk membuat notifikasi.

Untuk memberikan akses ke project, buat aturan masuk dan keluar untuk akun utama dan project yang digunakan untuk membuat notifikasi. Aturan ini mengizinkan akses ke resource yang dilindungi dan memungkinkan Pub/Sub memverifikasi bahwa pengguna memiliki izin setIamPolicy pada topik Pub/Sub.

Sebelum membuat NotificationConfig

Sebelum menyelesaikan langkah-langkah di Membuat NotificationConfig, lakukan hal berikut:

  1. Buka halaman Kontrol Layanan VPC di Konsol Google Cloud.

    Buka Kontrol Layanan VPC

  2. Jika perlu, pilih organisasi Anda.

  3. Klik nama perimeter layanan yang ingin Anda ubah.

    Untuk menemukan perimeter layanan yang perlu diubah, Anda dapat memeriksa log untuk menemukan entri yang menampilkan pelanggaran RESOURCES_NOT_IN_SAME_SERVICE_PERIMETER. Dalam entri tersebut, periksa kolom servicePerimeterName: accessPolicies/ACCESS_POLICY_ID/servicePerimeters/SERVICE_PERIMETER_NAME.

  4. Klik Edit Perimeter.

  5. Di menu navigasi, klik Ingress Policy.

  6. Untuk mengonfigurasi aturan ingress bagi akun pengguna atau layanan, gunakan parameter berikut:

    • Atribut FROM klien API:
      • Di menu drop-down Sumber, pilih Semua Sumber.
      • Di menu drop-down Identitas, pilih Identitas yang dipilih.
      • Klik Select, lalu masukkan akun utama yang digunakan untuk memanggil Security Command Center API.
    • Atribut TO layanan/resource Google Cloud:
      • Di menu drop-down Project, pilih Selected projects.
      • Klik Select, lalu masukkan project yang berisi topik Pub/Sub.
      • Di menu drop-down Services, pilih Selected services, lalu pilih Cloud Pub/Sub API.
      • Di menu drop-down Metode, pilih Semua tindakan.
  7. Klik Save.

  8. Pada menu navigasi, klik Kebijakan Keluar.

  9. Klik Add Rule.

  10. Untuk mengonfigurasi aturan traffic keluar untuk akun pengguna atau layanan, masukkan parameter berikut:

    • Atribut FROM klien API:
      • Di menu drop-down Identities, pilih Selected identities.
      • Klik Select, lalu masukkan akun utama yang digunakan untuk memanggil Security Command Center API.
    • Atribut TO layanan/resource Google Cloud:
      • Di menu drop-down Project, pilih All projects.
      • Di menu drop-down Services, pilih Selected services, lalu pilih Cloud Pub/Sub API.
      • Di menu drop-down Metode, pilih Semua tindakan.
  11. Klik Save.

Membuat aturan masuk untuk NotificationConfig

Untuk membuat aturan masuk untuk NotificationConfig, lakukan hal berikut:

  1. Selesaikan petunjuk di Membuat NotificationConfig.
  2. Buka kembali perimeter layanan dari bagian sebelumnya.
  3. Klik Kebijakan Ingress.
  4. Klik Add Rule.
  5. Untuk mengonfigurasi aturan masuk untuk akun layanan NotificationConfig yang Anda buat, masukkan parameter berikut:
    • Atribut FROM klien API:
      • Di menu drop-down Sumber, pilih Semua Sumber.
      • Di menu drop-down Identitas, pilih Identitas yang dipilih.
      • Klik Select, lalu masukkan nama akun layanan NotificationConfig: service-org-ORGANIZATION_ID@gcp-sa-scc-notification.iam.gserviceaccount.com
    • KE atribut layanan/resource GCP:
      • Di menu drop-down Project, pilih Selected projects.
      • Klik Select, lalu pilih project yang berisi topik Pub/Sub.
      • Di menu drop-down Services, pilih Selected services, lalu pilih Cloud Pub/Sub API.
      • Di menu drop-down Metode, pilih Semua tindakan.
  6. Di menu navigasi, klik Simpan.

Akun project, pengguna, dan layanan yang dipilih kini dapat mengakses resource yang dilindungi dan membuat notifikasi.

Jika telah mengikuti semua langkah dalam panduan ini dan notifikasi berfungsi dengan baik, Anda kini dapat menghapus hal berikut:

  • Aturan masuk untuk akun utama
  • Aturan keluar untuk akun utama

Aturan tersebut hanya diperlukan untuk mengonfigurasi NotificationConfig. Namun, agar notifikasi terus berfungsi, Anda harus mempertahankan aturan ingress untuk NotificationConfig, yang memungkinkannya memublikasikan notifikasi ke topik Pub/Sub Anda di balik perimeter layanan.

Langkah selanjutnya