Mengintegrasikan Pub/Sub dengan Google SecOps

Dokumen ini menjelaskan cara mengintegrasikan Pub/Sub dengan Google Security Operations.

Kasus penggunaan

Integrasi Pub/Sub mendukung kasus penggunaan berikut:

  • Penyerapan pemberitahuan otomatis: Terus-menerus mengambil log keamanan, pemberitahuan, dan telemetri yang dipublikasikan ke topik Pub/Sub untuk menyerapnya ke Google SecOps sebagai kasus.

  • Orkestrasi keamanan terpusat: Gabungkan perutean peristiwa keamanan melalui Pub/Sub dari sistem cloud dan pihak ketiga untuk memicu playbook respons otomatis.

Sebelum memulai

Sebelum mengonfigurasi integrasi Pub/Sub di Google SecOps, selesaikan langkah-langkah prasyarat berikut:

  1. Membuat akun layanan:

  2. Berikan peran Identity and Access Management yang diperlukan ke akun layanan Anda.

  3. Pilih dan konfigurasi salah satu metode autentikasi berikut:

    • Opsi 1: Workload Identity (direkomendasikan): Metode ini menggunakan token berjangka pendek menggunakan peniruan identitas akun layanan.

    • Opsi 2: Kunci JSON akun layanan: Metode ini mengandalkan file kunci rahasia statis yang berlaku lama.

Membuat akun layanan

  1. Di konsol Google Cloud , buka IAM & Admin > Service Accounts.

    Buka Akun Layanan

  2. Klik addBuat akun layanan.

  3. Berikan nama dan deskripsi, lalu klik Selesai. Catat Alamat email akun layanan.

Memberikan peran IAM

Dengan memberikan izin, integrasi dapat melihat dan menarik pesan dari langganan Anda. Untuk menetapkan peran standar, selesaikan langkah-langkah berikut:

  1. Di konsol Google Cloud , buka IAM.

    Buka IAM

  2. Temukan akun layanan Anda, lalu klik Edit principal (edit).

  3. Klik Add another role, lalu pilih Pub/Sub Viewer (roles/pubsub.viewer).

  4. Klik Simpan.

Mengonfigurasi kredensial Workload Identity

Workload Identity adalah pendekatan yang direkomendasikan karena menggunakan token akses berumur pendek menggunakan peniruan akun layanan.

Mengidentifikasi identitas instance yang unik

Untuk membuat koneksi, Anda harus memberikan izin kepada instance Google SecOps Anda untuk meniru identitas akun layanan Anda.

  1. Di Google SecOps, buka Content Hub > Integrasi Respons.

  2. Pilih integrasi Pub/Sub dan masukkan email akun layanan Anda di Workload Identity Email.

  3. Klik Simpan > Uji. Pengujian diperkirakan akan gagal.

  4. Klik close_small di samping tombol Uji dan temukan email identitas yang diawali dengan gke-init-python@... atau soar-python@....

  5. Salin alamat email unik ini.

Memberikan otorisasi identitas instance di Google Cloud

  1. Di konsol Google Cloud , buka IAM & Admin > Service Accounts.

    Buka Akun Layanan

  2. Pilih akun layanan target, lalu buka Izin > Beri Akses.

  3. Tempelkan alamat email unik ke New principals dan tetapkan peran Service Account Token Creator (roles/iam.serviceAccountTokenCreator).

Memberikan akses project kuota

Melakukan autentikasi dengan Workload Identity memerlukan Quota Project ID untuk melacak penggunaan dan penagihan API.

  1. Di konsol Google Cloud , buka IAM untuk project yang digunakan sebagai project kuota.

    Buka IAM

  2. Temukan akun layanan Anda, lalu klik Edit principal (edit).

  3. Klik Add another role, lalu pilih Service Usage Consumer (roles/serviceusage.serviceUsageConsumer).

  4. Klik Simpan.

Mengonfigurasi kunci JSON

File kunci rahasia statis yang dapat digunakan untuk jangka waktu lama memerlukan rotasi manual. Gunakan metode ini hanya jika autentikasi Workload Identity tidak tersedia.

  1. Di konsol Google Cloud , buka IAM & Admin > Service Accounts, lalu pilih akun layanan Anda.

    Buka Akun Layanan

  2. Buka tab Keys, lalu klik Add key > Create new key.

  3. Pilih JSON, lalu klik Create. Browser mendownload file JSON ke komputer Anda.

Parameter integrasi

Integrasi Pub/Sub memerlukan parameter berikut:

Parameter Deskripsi
Workload Identity Email

Opsional.

Alamat email klien akun layanan Anda.

Konfigurasi parameter ini hanya jika Anda melakukan autentikasi menggunakan Workload Identity. Jika dikonfigurasi, Anda juga harus memberikan Quota Project ID dan Service Account JSON File Content diabaikan.

Service Account JSON File Content

Opsional.

Konten lengkap file JSON kunci akun layanan.

Konfigurasi parameter ini untuk autentikasi kunci akun layanan.

Quota Project ID

Opsional.

Project ID yang digunakan untuk penggunaan dan penagihan API.

Parameter ini diperlukan saat menggunakan autentikasi Workload Identity.

Jika tidak ada nilai yang diberikan, integrasi akan mengambil ID dari kredensial akun layanan.

Project ID

Opsional.

Project ID yang akan ditargetkan di Pub/Sub.

Jika tidak ada nilai yang diberikan, integrasi akan mengambil ID dari kredensial akun layanan.

Verify SSL

Wajib.

Memvalidasi sertifikat SSL untuk koneksi ke server. Diaktifkan secara default.

Untuk mengetahui petunjuk tentang cara mengonfigurasi integrasi di Google SecOps, lihat Mengonfigurasi integrasi.

Anda dapat melakukan perubahan di tahap selanjutnya, jika diperlukan. Setelah mengonfigurasi instance integrasi, Anda dapat menggunakannya dalam playbook. Untuk mengetahui informasi selengkapnya tentang cara mengonfigurasi dan mendukung beberapa instance, lihat Mendukung beberapa instance.

Tindakan

Untuk mengetahui informasi selengkapnya tentang tindakan, lihat Merespons tindakan tertunda dari Ruang Kerja Anda dan Melakukan tindakan manual.

Ping

Gunakan tindakan Ping untuk menguji konektivitas ke Pub/Sub.

Tindakan ini tidak dijalankan pada entity Google SecOps.

Input tindakan

Tidak ada.

Output tindakan

Tindakan Ping memberikan output berikut:

Jenis output tindakan Ketersediaan
Lampiran repositori kasus Tidak tersedia
Link repositori kasus Tidak tersedia
Tabel repositori kasus Tidak tersedia
Tabel pengayaan Tidak tersedia
Hasil JSON Tidak tersedia
Pesan output Tersedia
Hasil skrip Tersedia
Pesan output

Tindakan Ping dapat menampilkan pesan output berikut:

Pesan output Deskripsi pesan
Successfully connected to the Pub/Sub server with the provided connection parameters! Tindakan berhasil.
Failed to connect to the Pub/Sub server! Error is ERROR_REASON

Tindakan gagal.

Periksa koneksi ke server, parameter input, atau kredensial.

Hasil skrip

Tabel berikut mencantumkan nilai untuk output hasil skrip saat menggunakan tindakan Ping:

Nama hasil skrip Nilai
is_success True atau False

Konektor

Untuk mengetahui petunjuk mendetail tentang cara mengonfigurasi konektor di Google SecOps, lihat Menyerap data Anda (konektor).

Pub/Sub – Konektor Pesan

Di platform Google SecOps, Pub/Sub – Messages Connector disebut PubSub – Messages Connector.

Gunakan Konektor Pesan – Pub/Sub untuk mengambil pesan dari Pub/Sub.

Pemetaan tingkat keparahan JSON

Untuk memetakan tingkat keparahan pemberitahuan, Anda perlu menentukan kolom yang digunakan oleh Konektor Pub/Sub – Pesan untuk mendapatkan nilai tingkat keparahan dalam parameter Severity Mapping JSON. Respons konektor dapat berisi jenis nilai, seperti integer, float, dan string.

Pub/Sub – Messages Connector membaca nilai integer dan float serta memetakannya sesuai dengan setelan Google SecOps. Tabel berikut menunjukkan pemetaan nilai integer ke tingkat keparahan di Google SecOps:

Nilai bilangan bulat Tingkat keparahan yang dipetakan
100 Critical
Dari 80 hingga 100 High
Dari 60 hingga 80 Medium
Dari 40 hingga 60 Low
Kurang dari 40 Informational

Jika respons berisi nilai string, Pub/Sub – Messages Connector memerlukan konfigurasi tambahan.

Awalnya, nilai default muncul sebagai berikut:

{
    "Default": 60
}

Jika nilai yang diperlukan untuk pemetaan berada di kunci JSON event_severity, nilai dapat berupa sebagai berikut:

  • "Malicious"
  • "Benign"
  • "Unknown"

Untuk mengurai nilai kunci JSON event_severity dan memastikan objek JSON memiliki format yang benar, konfigurasikan parameter Severity Mapping JSON sebagai berikut:

{
    "event_severity": {
        "Malicious": 100,
        "Unknown": 60,
        "Benign": -1
    },
    "Default": 50
}

Nilai "Default" wajib diisi.

Jika ada beberapa kecocokan untuk objek JSON yang sama, Pub/Sub – Messages Connector akan memprioritaskan kunci objek JSON pertama.

Untuk menggunakan kolom yang berisi nilai integer atau float, konfigurasikan kunci dan string kosong dalam parameter Severity Mapping JSON:

{
  "Default":"60",
  "integer_field": "",
  "float_field": ""
}

Input konektor

Pub/Sub – Messages Connector memerlukan parameter berikut:

Parameter Deskripsi
Product Field Name Wajib

Nama kolom tempat nama produk disimpan.

Nilai defaultnya adalah Product Name.

Event Field Name Wajib

Nama kolom yang digunakan untuk menentukan nama peristiwa (subtipe).

Nilai defaultnya adalah event_type.

Environment Field Name Opsional

Nama kolom tempat nama lingkungan disimpan.

Jika kolom lingkungan tidak ditemukan, lingkungan akan disetel ke lingkungan default.

Nilai defaultnya adalah "".

Environment Regex Pattern Opsional

Pola ekspresi reguler untuk dijalankan pada nilai yang ditemukan di kolom Environment Field Name. Dengan parameter ini, Anda dapat memanipulasi kolom lingkungan menggunakan logika ekspresi reguler.

Gunakan nilai default .* untuk mengambil nilai Environment Field Name mentah yang diperlukan.

Jika pola ekspresi reguler adalah null atau kosong, atau nilai lingkungan adalah null, hasil lingkungan akhir adalah lingkungan default.

PythonProcessTimeout Wajib

Batas waktu dalam detik untuk proses Python yang menjalankan skrip saat ini.

Nilai defaultnya adalah 60.

Service Account JSON File Content Opsional

Konten file JSON kunci akun layanan.

Anda dapat mengonfigurasi parameter ini atau parameter Workload Identity Email.

Untuk mengonfigurasi parameter ini, berikan konten lengkap file JSON kunci akun layanan yang Anda download saat membuat akun layanan.

Untuk Pub/Sub – Messages Connector, autentikasi dengan file JSON kunci akun layanan memiliki prioritas lebih tinggi daripada Workload Identity Federation.

Workload Identity Email Opsional

Alamat email klien akun layanan Anda.

Anda dapat mengonfigurasi parameter ini atau parameter Service Account JSON File Content.

Untuk meniru identitas akun layanan dengan Workload Identity Federation, berikan peran Service Account Token Creator ke akun layanan Anda.

Project ID Opsional

Project ID yang akan digunakan di konektor.

Quota Project ID Opsional

Google Cloud Project ID yang Anda gunakan untuk Google Cloud API dan penagihan. Parameter ini mengharuskan Anda memberikan peran Service Usage Consumer ke akun layanan Anda. Untuk informasi selengkapnya tentang peran IAM, lihat Kontrol Akses dengan IAM.

Integrasi melampirkan nilai parameter ini ke semua permintaan API.

Subscription ID Wajib

ID langganan Pub/Sub.

Case Name Template Opsional

Nama kasus kustom.

Saat Anda mengonfigurasi parameter ini, konektor akan menambahkan kunci baru bernama custom_case_name ke peristiwa Google SecOps.

Anda dapat memberikan placeholder dalam format berikut: [name of the field].

Contoh: Phishing - [event_mailbox]

Untuk placeholder, konektor menggunakan peristiwa Google SecOps pertama. Konektor hanya menangani kunci yang berisi nilai string. Untuk mengonfigurasi parameter ini, tentukan kolom peristiwa tanpa awalan.

Alert Name Template Wajib

Nama notifikasi kustom.

Anda dapat memberikan placeholder dalam format berikut: [name of the field].

Contoh: Phishing - [event_mailbox].

Untuk placeholder, konektor menggunakan peristiwa Google SecOps pertama. Konektor hanya menangani kunci yang berisi nilai string. Jika Anda tidak memberikan nilai apa pun atau menggunakan template yang tidak valid, konektor akan menggunakan nilai penggantian dalam format berikut: CONNECTOR_NAME - Alert. Untuk mengonfigurasi parameter ini, tentukan kolom peristiwa tanpa awalan.

Rule Generator Template Wajib

Generator aturan khusus.

Anda dapat memberikan placeholder dalam format berikut: [name of the field].

Contoh: Phishing - [event_mailbox].

Untuk placeholder, konektor menggunakan peristiwa Google SecOps pertama. Konektor hanya menangani kunci yang berisi nilai string. Jika Anda tidak memberikan nilai apa pun atau menggunakan template yang tidak valid, konektor akan menggunakan nilai penggantian dalam format berikut: CONNECTOR_NAME - Rule Generator. Untuk mengonfigurasi parameter ini, tentukan kolom peristiwa tanpa awalan.

Timestamp Field Wajib

Nama kolom untuk menentukan stempel waktu pemberitahuan Google SecOps.

Jika stempel waktu tidak menggunakan format waktu epoch Unix, tentukan format stempel waktu dalam parameter Timestamp Format.

Nilai defaultnya adalah message_publishTime.

Timestamp Format Opsional

Format stempel waktu pesan.

Konektor memerlukan stempel waktu untuk memproses pesan dengan benar. Jika stempel waktu tidak menggunakan format waktu epoch Unix dan Anda tidak mengonfigurasi format stempel waktu, konektor akan gagal.

Nilai defaultnya adalah %Y-%m-%dT%H:%M:%S.%fZ.

Severity Mapping JSON Wajib

Objek JSON yang menentukan cara konektor mengekstraksi tingkat keparahan dari pesan.

Nilai defaultnya adalah sebagai berikut:

    {
      "Default": "60"
    }
    

Untuk mengetahui informasi selengkapnya tentang pemetaan tingkat keparahan, lihat Pemetaan tingkat keparahan JSON.

Unique ID Field Opsional

Nama kolom untuk mengonfirmasi bahwa pesan tersebut unik. Anda dapat menggunakan kata kunci yang dicadangkan pubsub_message_id untuk mengekstraksi ID pesan Pub/Sub native. Jika Anda tidak menetapkan nilai atau kolom tidak ditemukan, konektor akan membuat hash SHA-256 dan menggunakannya sebagai ID untuk pesan.

Max Messages To Fetch Wajib

Jumlah maksimum pesan yang akan diproses untuk setiap iterasi konektor.

Nilai defaultnya adalah 100.

Disable Overflow Opsional

Jika dipilih, konektor akan mengabaikan mekanisme peluapan Google SecOps selama pembuatan pemberitahuan.

Dipilih secara default.

Verify SSL Wajib

Jika dipilih, integrasi akan memverifikasi bahwa sertifikat SSL untuk menghubungkan ke Pub/Sub valid.

Dipilih secara default.

Proxy Server Address Opsional

Alamat server proxy yang akan digunakan.

Proxy Username Opsional

Nama pengguna proxy untuk melakukan autentikasi.

Proxy Password Opsional

Sandi proxy untuk mengautentikasi.

Aturan konektor

Pub/Sub – Messages Connector mendukung proxy.

Peristiwa konektor

Contoh berikut menunjukkan output JSON peristiwa Google SecOps yang dihasilkan oleh Pub/Sub – Messages Connector:

{
   "notificationConfigName": "organizations/ORGANIZATION_ID/notificationConfigs/soar_connector_toxic_notifications_config",
   "finding": {
       "name": "organizations/ORGANIZATION_ID/sources/SOURCE_ID/findings/FINDING_ID",
       "parent": "organizations/ORGANIZATION_ID/sources/SOURCE_ID",
       "resourceName": "//compute.googleapis.com/projects/PROJECT_ID/global/firewalls/FIREWALL_ID",
       "state": "ACTIVE",
       "category": "OPEN_NETBIOS_PORT",
       "externalUri": "https://console.cloud.google.com/networking/firewalls/details/default-allow-rdp?project\u003dPROJECT_ID",
       "sourceProperties": {
           "Recommendation": "Restrict the firewall rules at: https://console.cloud.google.com/networking/firewalls/details/default-allow-rdp?project\u003dPROJECT_ID",
           "ExceptionInstructions": "Add the security mark \"allow_open_netbios_port\" to the asset with a value of \"true\" to prevent this finding from being activated again.",
           "Explanation": "Firewall rules that allow connections from all IP addresses on TCP ports 137-139 or UDP ports 137-139 may expose NetBIOS services to attackers.",
           "ScannerName": "FIREWALL_SCANNER",
           "ResourcePath": [
               "projects/PROJECT_ID/",
               "folders/FOLDER_ID/",
               "folders/FOLDER_ID/",
               "organizations/ORGANIZATION_ID/"
           ],
           "ExposedService": "NetBIOS",
           "OpenPorts": {
               "TCP": [
                   137.0,
                   138.0,
                   139.0
               ],
               "UDP": [
                   137.0,
                   138.0,
                   139.0
               ]
           },
           "compliance_standards": {
               "iso": [
                   {
                       "ids": [
                           "A.13.1.1"
                       ]
                   }
               ],
               "pci": [
                   {
                       "ids": [
                           "1.2.1"
                       ]
                   }
               ],
               "nist": [
                   {
                       "ids": [
                           "SC-7"
                       ]
                   }
               ]
           },
           "ReactivationCount": 4.0
       },
       "securityMarks": {
           "name": "organizations/ORGANIZATION_ID/sources/SOURCE_ID/findings/FINDING_ID/securityMarks",
           "marks": {
               "peter": "e2e1"
           }
       },
       "eventTime": "2024-08-30T14:44:37.973090Z",
       "createTime": "2024-06-24T07:08:54.777Z",
       "propertyDataTypes": {
           "ResourcePath": {
               "listValues": {
                   "propertyDataTypes": [
                       {
                           "primitiveDataType": "STRING"
                       }
                   ]
               }
           },
           "ReactivationCount": {
               "primitiveDataType": "NUMBER"
           },
           "Explanation": {
               "primitiveDataType": "STRING"
           },
           "ExposedService": {
               "primitiveDataType": "STRING"
           },
           "ScannerName": {
               "primitiveDataType": "STRING"
           }
       }
   }
}

Perlu bantuan lain? Dapatkan jawaban dari anggota Komunitas dan profesional Google SecOps.