Melakukan streaming temuan ke BigQuery untuk analisis

Halaman ini menjelaskan cara melakukan streaming temuan baru dan yang diperbarui ke set data BigQuery menggunakan fungsi ekspor Security Command Center untuk BigQuery. Temuan yang ada tidak dikirim ke BigQuery kecuali jika diperbarui.

BigQuery adalah data warehouse analisis yang terkelola sepenuhnya, berskala petabyte, dan hemat biaya dari Google Cloud, yang memungkinkan Anda menjalankan analisis pada sejumlah besar data secara hampir real time. Anda dapat menggunakan BigQuery untuk menjalankan kueri terhadap temuan baru dan yang diperbarui, memfilter data untuk menemukan apa yang Anda butuhkan, dan membuat laporan kustom. Untuk mempelajari lebih lanjut BigQuery, lihat dokumentasi BigQuery.

Ringkasan

Jika Anda mengaktifkan fitur ini, temuan baru yang ditulis ke Security Command Center akan diekspor ke tabel BigQuery hampir secara real time. Kemudian, Anda dapat mengintegrasikan data ke dalam alur kerja yang ada dan membuat analisis kustom. Anda dapat mengaktifkan fitur ini di tingkat organisasi, folder, dan project untuk mengekspor temuan berdasarkan persyaratan Anda.

Fitur ini adalah cara yang direkomendasikan untuk mengekspor temuan Security Command Center ke BigQuery, karena dikelola sepenuhnya dan tidak memerlukan operasi manual atau penulisan kode kustom.

Struktur set data

Fitur ini menambahkan setiap temuan baru dan pembaruan berikutnya sebagai baris baru dalam tabel findings, yang dikelompokkan berdasarkan source_id, finding_id, dan event_time.

Saat temuan diperbarui, fitur ini membuat beberapa catatan temuan dengan nilai source_id dan finding_id yang sama, tetapi dengan nilai event_time yang berbeda. Struktur set data ini memungkinkan Anda melihat perubahan status setiap temuan dari waktu ke waktu.

Perhatikan bahwa entri duplikat mungkin ada dalam set data Anda. Untuk menguraikannya, Anda dapat menggunakan klausa DISTINCT, seperti yang ditunjukkan dalam kueri contoh pertama.

Setiap set data berisi tabel findings, yang memiliki kolom berikut:

Kolom Deskripsi
source_id

ID unik yang ditetapkan Security Command Center ke sumber temuan. Misalnya, semua temuan dari sumber Cloud Anomaly Detection memiliki nilai source_id yang sama.

Contoh: 1234567890

finding_id ID unik yang merepresentasikan temuan. ID ini unik dalam sumber untuk organisasi. Alfanumerik dan memiliki kurang dari atau sama dengan 32 karakter.
event_time

Waktu terjadinya peristiwa atau waktu terjadinya update pada temuan. Misalnya, jika temuan mewakili firewall yang terbuka, maka event_time akan mencatat waktu saat detektor yakin bahwa firewall dibuka. Jika temuan diselesaikan setelahnya, maka waktu ini mencerminkan kapan temuan tersebut diselesaikan.

Contoh: 2019-09-26 12:48:00.985000 UTC

bulk_export_id

Kolom ini tidak diisi dengan data.

menemukan

Kumpulan data penilaian seperti keamanan, risiko, kesehatan, atau privasi, yang dimasukkan ke Security Command Center untuk presentasi, pemberitahuan, analisis, pengujian kebijakan, dan penegakan. Misalnya, kerentanan pembuatan skrip lintas situs (XSS) di aplikasi App Engine adalah temuan.

Untuk mengetahui informasi selengkapnya tentang kolom bertingkat, lihat referensi API untuk objek Finding.

resource

Informasi terkait resource yang dikaitkan dengan temuan ini. Google Cloud

Untuk mengetahui informasi selengkapnya tentang kolom bertingkat, lihat referensi API untuk objek Resource.

Biaya

Anda akan dikenai biaya BigQuery terkait fitur ini. Untuk mengetahui informasi selengkapnya, lihat harga BigQuery.

Sebelum memulai

Anda harus menyelesaikan langkah-langkah ini sebelum mengaktifkan fitur ini.

Siapkan izin

Untuk menyelesaikan panduan ini, Anda harus memiliki peran Identity and Access Management (IAM) berikut:

Membuat set data BigQuery

Membuat set data BigQuery. Untuk informasi selengkapnya, lihat Membuat set data.

Merencanakan residensi data

Jika aset data diaktifkan untuk Security Command Center, konfigurasi yang menentukan ekspor streaming ke BigQuery—resource BigQueryExport—tunduk pada kontrol aset data dan disimpan di lokasi Security Command Center yang Anda pilih.

Untuk mengekspor temuan di lokasi Security Command Center ke BigQuery, Anda harus mengonfigurasi ekspor BigQuery di lokasi Security Command Center yang sama dengan temuan.

Karena filter yang digunakan dalam ekspor BigQuery 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 BigQuery hanya disimpan di lokasi tempat ekspor tersebut dibuat dan tidak dapat dilihat atau diedit di lokasi lain.

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

Untuk mempelajari cara menggunakan Security Command Center saat residensi data diaktifkan, lihat Endpoint regional Security Command Center.

Mengekspor temuan dari Security Command Center ke BigQuery

Untuk mengekspor temuan, aktifkan terlebih dahulu Security Command Center API.

Mengaktifkan Security Command Center API

Untuk mengaktifkan Security Command Center API:

  1. Buka halaman API Library di konsol Google Cloud .

    Buka Library API

  2. Pilih project yang ingin Anda aktifkan Security Command Center API-nya.

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

  4. Di halaman API yang muncul, klik Enable.

Security Command Center API diaktifkan untuk project Anda. Selanjutnya, Anda akan menggunakan gcloud CLI untuk membuat konfigurasi ekspor baru ke BigQuery.

Memberikan akses perimeter di Kontrol Layanan VPC

Jika Anda menggunakan Kontrol Layanan VPC dan set data BigQuery Anda adalah bagian dari project di dalam perimeter layanan, Anda harus memberikan akses ke project untuk mengekspor temuan.

Untuk memberikan akses ke project, buat aturan masuk dan keluar untuk principal dan project tempat Anda mengekspor temuan. Aturan mengizinkan akses ke resource yang dilindungi dan memungkinkan BigQuery memverifikasi bahwa pengguna memiliki izin setIamPolicy pada set data BigQuery.

Sebelum menyiapkan ekspor baru ke BigQuery

Konsol

  1. Di konsol Google Cloud , buka halaman VPC Service Controls.

    Buka Kontrol Layanan VPC

  2. Pilih organisasi atau project Anda.
  3. Jika Anda memilih organisasi, klik Pilih kebijakan akses, lalu pilih kebijakan akses yang terkait dengan perimeter yang ingin Anda perbarui.
  4. Klik nama perimeter yang ingin Anda perbarui.

    Untuk menemukan perimeter layanan yang perlu diubah, Anda dapat memeriksa entri log yang menunjukkan pelanggaran RESOURCES_NOT_IN_SAME_SERVICE_PERIMETER. Dalam entri tersebut, periksa kolom servicePerimeterName:

    accessPolicies/ACCESS_POLICY_ID/servicePerimeters/SERVICE_PERIMETER_NAME
  5. Klik Edit perimeter.
  6. Klik Kebijakan traffic keluar.
  7. Klik Tambahkan aturan traffic keluar.
  8. Di bagian DARI, tetapkan detail berikut:

    1. Untuk Identity, pilih Select identities & groups.
    2. Klik Tambahkan identitas
    3. Masukkan alamat email principal yang digunakan untuk memanggil Security Command Center API.

    4. Pilih pemilik atau tekan ENTER, lalu klik Tambahkan identitas.
  9. Di bagian KE, tetapkan detail berikut:

    1. Untuk Project, pilih Semua project.
    2. Untuk Operasi atau peran IAM, pilih Pilih operasi.
    3. Klik Tambahkan operasi, lalu tambahkan operasi berikut:

      • Tambahkan layanan bigquery.googleapis.com.
        1. Klik Semua metode.
        2. Klik Tambahkan semua metode.
  10. Klik Ingress policy.
  11. Klik Tambahkan aturan ingress.
  12. Di bagian DARI, tetapkan detail berikut:

    1. Untuk Identity, pilih Select identities & groups.
    2. Klik Tambahkan identitas
    3. Masukkan alamat email principal yang digunakan untuk memanggil Security Command Center API.

    4. Pilih pemilik atau tekan ENTER, lalu klik Tambahkan identitas.
    5. Untuk Sumber, pilih Semua sumber
  13. Di bagian KE, tetapkan detail berikut:

    1. Untuk Project, pilih Pilih project.
    2. Klik Tambahkan project, lalu tambahkan project yang berisi set data BigQuery.
    3. Untuk Operasi atau peran IAM, pilih Pilih operasi.
    4. Klik Tambahkan operasi, lalu tambahkan operasi berikut:

      • Tambahkan layanan bigquery.googleapis.com.
        1. Klik Semua metode.
        2. Klik Tambahkan semua metode.
  14. Klik Simpan.

gcloud

  1. Jika project kuota belum ditetapkan, tetapkan project kuota. Pilih project yang mengaktifkan Access Context Manager API.

    gcloud config set billing/quota_project QUOTA_PROJECT_ID

    Ganti QUOTA_PROJECT_ID dengan ID project yang ingin Anda gunakan untuk penagihan dan kuota.

  2. Buat file bernama egress-rule.yaml dengan konten berikut:

    - egressFrom:
        identities:
        - PRINCIPAL_ADDRESS
      egressTo:
        operations:
        - serviceName: bigquery.googleapis.com
          methodSelectors:
          - method: '*'
        resources:
        - '*'

    Ganti PRINCIPAL_ADDRESS dengan alamat principal yang digunakan untuk memanggil Security Command Center API.

  3. Buat file bernama ingress-rule.yaml dengan konten berikut:

    - ingressFrom:
        identities:
        - PRINCIPAL_ADDRESS
        sources:
        - accessLevel: '*'
      ingressTo:
        operations:
        - serviceName: bigquery.googleapis.com
          methodSelectors:
          - method: '*'
        resources:
        - '*'

    Ganti PRINCIPAL_ADDRESS dengan alamat principal yang digunakan untuk memanggil Security Command Center API.

  4. Tambahkan aturan traffic keluar ke perimeter:

    gcloud access-context-manager perimeters update PERIMETER_NAME \
        --set-egress-policies=egress-rule.yaml

    Ganti kode berikut:

    • PERIMETER_NAME: nama perimeter. Misalnya, accessPolicies/1234567890/servicePerimeters/example_perimeter.

      Untuk menemukan perimeter layanan yang perlu diubah, Anda dapat memeriksa log untuk menemukan entri yang menunjukkan pelanggaran RESOURCES_NOT_IN_SAME_SERVICE_PERIMETER. Dalam entri tersebut, periksa kolom servicePerimeterName:

      accessPolicies/ACCESS_POLICY_ID/servicePerimeters/SERVICE_PERIMETER_NAME
  5. Tambahkan aturan traffic masuk ke perimeter:

    gcloud access-context-manager perimeters update PERIMETER_NAME \
        --set-ingress-policies=ingress-rule.yaml

    Ganti kode berikut:

    • PERIMETER_NAME: nama perimeter. Misalnya, accessPolicies/1234567890/servicePerimeters/example_perimeter.

      Untuk menemukan perimeter layanan yang perlu diubah, Anda dapat memeriksa log untuk menemukan entri yang menunjukkan pelanggaran RESOURCES_NOT_IN_SAME_SERVICE_PERIMETER. Dalam entri tersebut, periksa kolom servicePerimeterName:

      accessPolicies/ACCESS_POLICY_ID/servicePerimeters/SERVICE_PERIMETER_NAME

Lihat Aturan traffic masuk dan keluar untuk informasi selengkapnya.

Menyiapkan ekspor baru ke BigQuery

Pada langkah ini, Anda membuat konfigurasi ekspor untuk mengekspor temuan ke instance BigQuery. Anda dapat membuat konfigurasi ekspor di level project, folder, atau organisasi. Misalnya, jika Anda ingin mengekspor temuan dari project ke set data BigQuery, Anda membuat konfigurasi ekspor di tingkat project untuk mengekspor hanya temuan yang terkait dengan project tersebut. Secara opsional, Anda dapat menentukan filter untuk mengekspor temuan tertentu saja.

Pastikan untuk membuat konfigurasi ekspor Anda di tingkat yang sesuai. Misalnya, jika Anda membuat konfigurasi ekspor di Project B untuk mengekspor temuan dari Project A dan Anda menentukan filter seperti resource.project_display_name: project-a-id, konfigurasi tidak akan mengekspor temuan apa pun.

Anda dapat membuat maksimal 500 konfigurasi ekspor ke BigQuery untuk organisasi Anda. Anda dapat menggunakan set data yang sama untuk beberapa konfigurasi ekspor. Jika Anda menggunakan set data yang sama, semua pembaruan akan dilakukan pada tabel temuan yang sama.

Saat Anda membuat konfigurasi ekspor pertama, akun layanan akan otomatis dibuat untuk Anda. Akun layanan ini diperlukan untuk membuat atau memperbarui tabel temuan dalam set data dan untuk mengekspor temuan ke tabel. Memiliki bentuk service-org-ORGANIZATION_ID@gcp-sa-scc-notification.iam.gservicaccount.com dan diberi peran BigQuery Data Editor (roles/bigquery.dataEditor) di tingkat set data BigQuery.

Di konsol Google Cloud , beberapa resource BigQueryExport mungkin memiliki label Legacy yang menunjukkan bahwa resource tersebut dibuat dengan Security Command Center API v1. Anda dapat mengelola resource BigQueryExport ini dengan konsol Google Cloud , gcloud CLI, Security Command Center API v1, atau library klien v1 untuk Security Command Center.

Untuk mengelola resource BigQueryExport ini dengan gcloud CLI, Anda tidak boleh menentukan lokasi saat menjalankan perintah gcloud CLI.

gcloud

  1. Buka konsol Google Cloud .

    Buka Google Cloud konsol

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

  3. Klik Activate Cloud Shell.

  4. Untuk membuat konfigurasi ekspor baru, jalankan perintah berikut:

    gcloud scc bqexports create BIGQUERY_EXPORT \
        --dataset=DATASET_NAME \
        --folder=FOLDER_ID | --organization=ORGANIZATION_ID | --project=PROJECT_ID \
        --location=LOCATION \
        [--description=DESCRIPTION] \
        [--filter=FILTER]
    

    Ganti kode berikut:

    • BIGQUERY_EXPORT dengan nama untuk konfigurasi ekspor ini.
    • DATASET_NAME dengan nama set data BigQuery—misalnya, projects/PROJECT_ID/datasets/DATASET_ID.
    • FOLDER_ID, ORGANIZATION_ID, atau PROJECT_ID dengan nama folder, organisasi, atau project Anda. Anda harus menyetel salah satu opsi ini. Untuk folder dan organisasi, namanya adalah ID folder atau ID organisasi. Untuk project, namanya adalah nomor project atau ID project.
    • LOCATION: lokasi Security Command Center tempat konfigurasi ekspor akan dibuat; jika retensi data diaktifkan, gunakan eu, ksa, atau us; jika tidak, gunakan nilai global.
    • DESCRIPTION dengan deskripsi konfigurasi ekspor yang dapat dibaca manusia. Variabel ini bersifat opsional.
    • FILTER dengan ekspresi yang menentukan temuan yang akan disertakan dalam ekspor. Misalnya, jika Anda ingin memfilter kategori XSS_SCRIPTING, ketik "category=\"XSS_SCRIPTING\". Variabel ini bersifat opsional.

Terraform

Untuk mempelajari cara menerapkan atau menghapus konfigurasi Terraform, lihat Perintah dasar Terraform. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi penyedia Terraform.

Buat konfigurasi ekspor untuk organisasi:

resource "google_bigquery_dataset" "default" {
  dataset_id                  = "my-dataset"
  friendly_name               = "test"
  description                 = "This is a test description"
  location                    = "US"
  default_table_expiration_ms = 3600000
  default_partition_expiration_ms = null

  labels = {
    env = "default"
  }

  lifecycle {
    ignore_changes = [default_partition_expiration_ms]
  }
}

resource "google_scc_v2_organization_scc_big_query_export" "custom_big_query_export_config" {
  name         = "my-export"
  big_query_export_id    = "my-export"
  organization = "123456789"
  dataset      = google_bigquery_dataset.default.id
  location     = "global"
  description  = "Cloud Security Command Center Findings Big Query Export Config"
  filter       = "state=\"ACTIVE\" AND NOT mute=\"MUTED\""
}

Membuat konfigurasi ekspor untuk folder:

resource "google_folder" "folder" {
  parent       = "organizations/123456789"
  display_name = "folder-name"

  deletion_protection = false
}

resource "google_bigquery_dataset" "default" {
  dataset_id                  = "my_dataset_id"
  friendly_name               = "test"
  description                 = "This is a test description"
  location                    = "US"
  default_table_expiration_ms = 3600000
  default_partition_expiration_ms = null

  labels = {
    env = "default"
  }

  lifecycle {
    ignore_changes = [default_partition_expiration_ms]
  }
}

resource "google_scc_v2_folder_scc_big_query_export" "custom_big_query_export_config" {
  big_query_export_id    = "my-export"
  folder       = google_folder.folder.folder_id
  dataset      = google_bigquery_dataset.default.id
  location     = "global"
  description  = "Cloud Security Command Center Findings Big Query Export Config"
  filter       = "state=\"ACTIVE\" AND NOT mute=\"MUTED\""
}

Buat konfigurasi ekspor untuk project:

resource "google_bigquery_dataset" "default" {
  dataset_id                  = "my_dataset_id"
  friendly_name               = "test"
  description                 = "This is a test description"
  location                    = "US"
  default_table_expiration_ms = 3600000
  default_partition_expiration_ms = null

  labels = {
    env = "default"
  }

  lifecycle {
    ignore_changes = [default_partition_expiration_ms]
  }
}

resource "google_scc_v2_project_scc_big_query_export" "custom_big_query_export_config" {
  name         = "my-export"
  big_query_export_id    = "my-export"
  project      = "my-project-name"
  dataset      = google_bigquery_dataset.default.id
  location     = "global"
  description  = "Cloud Security Command Center Findings Big Query Export Config"
  filter       = "state=\"ACTIVE\" AND NOT mute=\"MUTED\""
}

Java

Untuk melakukan autentikasi ke Security Command Center, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan ADC untuk lingkungan pengembangan lokal.


import com.google.cloud.securitycenter.v2.BigQueryExport;
import com.google.cloud.securitycenter.v2.CreateBigQueryExportRequest;
import com.google.cloud.securitycenter.v2.OrganizationLocationName;
import com.google.cloud.securitycenter.v2.SecurityCenterClient;
import java.io.IOException;
import java.util.UUID;

public class CreateBigQueryExport {

  public static void main(String[] args) throws IOException {
    // TODO(Developer): Modify the following variable values.
    // organizationId: Google Cloud Organization id.
    String organizationId = "{google-cloud-organization-id}";

    // projectId: Google Cloud Project id.
    String projectId = "{your-project}";

    // Specify the location.
    String location = "global";

    // filter: Expression that defines the filter to apply across create/update events of findings.
    String filter = "severity=\"LOW\" OR severity=\"MEDIUM\"";

    // bigQueryDatasetId: The BigQuery dataset to write findings' updates to.
    String bigQueryDatasetId = "{bigquery-dataset-id}";

    // bigQueryExportId: Unique identifier provided by the client.
    // For more info, see:
    // https://cloud.google.com/security-command-center/docs/how-to-analyze-findings-in-big-query#export_findings_from_to
    String bigQueryExportId = "default-" + UUID.randomUUID().toString().split("-")[0];

    createBigQueryExport(organizationId, location, projectId, filter, bigQueryDatasetId,
        bigQueryExportId);
  }

  // Create export configuration to export findings from a project to a BigQuery dataset.
  // Optionally specify filter to export certain findings only.
  public static BigQueryExport createBigQueryExport(String organizationId, String location,
      String projectId, String filter, String bigQueryDatasetId, String bigQueryExportId)
      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.
    try (SecurityCenterClient client = SecurityCenterClient.create()) {
      OrganizationLocationName organizationName = OrganizationLocationName.of(organizationId,
          location);
      // Create the BigQuery export configuration.
      BigQueryExport bigQueryExport =
          BigQueryExport.newBuilder()
              .setDescription(
                  "Export low and medium findings if the compute resource "
                      + "has an IAM anomalous grant")
              .setFilter(filter)
              .setDataset(String.format("projects/%s/datasets/%s", projectId, bigQueryDatasetId))
              .build();

      CreateBigQueryExportRequest bigQueryExportRequest =
          CreateBigQueryExportRequest.newBuilder()
              .setParent(organizationName.toString())
              .setBigQueryExport(bigQueryExport)
              .setBigQueryExportId(bigQueryExportId)
              .build();

      // Create the export request.
      BigQueryExport response = client.createBigQueryExport(bigQueryExportRequest);

      System.out.printf("BigQuery export request created successfully: %s\n", response.getName());
      return response;
    }
  }
}

Python

Untuk melakukan autentikasi ke Security Command Center, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan ADC untuk lingkungan pengembangan lokal.



def create_bigquery_export(
    parent: str, export_filter: str, bigquery_dataset_id: str, bigquery_export_id: str
):
    from google.cloud import securitycenter_v2

    """
    Create export configuration to export findings from a project to a BigQuery dataset.
    Optionally specify filter to export certain findings only.

    Args:
        parent: Use any one of the following resource paths:
             - organizations/{organization_id}/locations/{location_id}
             - folders/{folder_id}/locations/{location_id}
             - projects/{project_id}/locations/{location_id}
        export_filter: Expression that defines the filter to apply across create/update events of findings.
        bigquery_dataset_id: The BigQuery dataset to write findings' updates to.
             - projects/{PROJECT_ID}/datasets/{BIGQUERY_DATASET_ID}
        bigquery_export_id: Unique identifier provided by the client.
             - example id: f"default-{str(uuid.uuid4()).split('-')[0]}"
        For more info, see:
        https://cloud.google.com/security-command-center/docs/how-to-analyze-findings-in-big-query#export_findings_from_to
    """
    client = securitycenter_v2.SecurityCenterClient()

    # Create the BigQuery export configuration.
    bigquery_export = securitycenter_v2.BigQueryExport()
    bigquery_export.description = "Export low and medium findings if the compute resource has an IAM anomalous grant"
    bigquery_export.filter = export_filter
    bigquery_export.dataset = bigquery_dataset_id

    request = securitycenter_v2.CreateBigQueryExportRequest()
    request.parent = parent
    request.big_query_export = bigquery_export
    request.big_query_export_id = bigquery_export_id

    # Create the export request.
    response = client.create_big_query_export(request)

    print(f"BigQuery export request created successfully: {response.name}\n")
    return response

Anda akan melihat temuan di set data BigQuery dalam waktu sekitar 15 menit setelah Anda membuat konfigurasi ekspor. Setelah tabel BigQuery dibuat, temuan baru dan yang diperbarui yang cocok dengan filter dan cakupan Anda akan muncul di tabel hampir secara real time.

Untuk meninjau temuan Anda, lihat Meninjau temuan.

Buat aturan ingress untuk ekspor baru ke BigQuery

Jika Anda menggunakan Kontrol Layanan VPC dan set data BigQuery Anda adalah bagian dari project di dalam perimeter layanan, Anda harus membuat aturan masuk untuk ekspor baru ke BigQuery.

Konsol

  1. Buka kembali perimeter layanan dari bagian sebelumnya.

    Buka Kontrol Layanan VPC

  2. Klik Ingress policy.
  3. Klik Tambahkan aturan ingress.
  4. Di bagian DARI, tetapkan detail berikut:

    1. Untuk Identity, pilih Select identities & groups.
    2. Klik Tambahkan identitas
    3. Masukkan alamat email agen layanan konfigurasi ekspor BigQuery. Alamat agen layanan memiliki format berikut:

      service-org-ORGANIZATION_ID@gcp-sa-scc-notification.iam.gserviceaccount.com

      Ganti ORGANIZATION_ID dengan ID organisasi Anda.

    4. Pilih agen layanan atau tekan ENTER, lalu klik Tambahkan identitas.
    5. Untuk Sumber, pilih Semua sumber
  5. Di bagian KE, tetapkan detail berikut:

    1. Untuk Project, pilih Pilih project.
    2. Klik Tambahkan project, lalu tambahkan project yang berisi set data BigQuery.
    3. Untuk Operasi atau peran IAM, pilih Pilih operasi.
    4. Klik Tambahkan operasi, lalu tambahkan operasi berikut:

      • Tambahkan layanan bigquery.googleapis.com.
        1. Klik Semua metode.
        2. Klik Tambahkan semua metode.
  6. Klik Simpan.

gcloud

  1. Jika project kuota belum ditetapkan, tetapkan project kuota. Pilih project yang mengaktifkan Access Context Manager API.

    gcloud config set billing/quota_project QUOTA_PROJECT_ID

    Ganti QUOTA_PROJECT_ID dengan ID project yang ingin Anda gunakan untuk penagihan dan kuota.

  2. Buat file bernama ingress-rule.yaml dengan konten berikut:

    - ingressFrom:
        identities:
        - serviceAccount:service-org-ORGANIZATION_ID@gcp-sa-scc-notification.iam.gserviceaccount.com
        sources:
        - accessLevel: '*'
      ingressTo:
        operations:
        - serviceName: bigquery.googleapis.com
          methodSelectors:
          - method: '*'
        resources:
        - '*'

    Ganti ORGANIZATION_ID dengan ID organisasi Anda.

  3. Tambahkan aturan traffic masuk ke perimeter:

    gcloud access-context-manager perimeters update PERIMETER_NAME \
        --set-ingress-policies=ingress-rule.yaml

    Ganti kode berikut:

    • PERIMETER_NAME: nama perimeter. Misalnya, accessPolicies/1234567890/servicePerimeters/example_perimeter.

      Untuk menemukan perimeter layanan yang perlu diubah, Anda dapat memeriksa log untuk menemukan entri yang menunjukkan pelanggaran RESOURCES_NOT_IN_SAME_SERVICE_PERIMETER. Dalam entri tersebut, periksa kolom servicePerimeterName:

      accessPolicies/ACCESS_POLICY_ID/servicePerimeters/SERVICE_PERIMETER_NAME

Lihat Aturan traffic masuk dan keluar untuk informasi selengkapnya.

Project, pengguna, dan akun layanan yang dipilih kini dapat mengakses resource yang dilindungi dan mengekspor temuan.

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

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

Aturan tersebut hanya diperlukan untuk mengonfigurasi konfigurasi ekspor. Namun, agar konfigurasi ekspor terus berfungsi, Anda harus mempertahankan aturan masuk yang Anda buat sebelumnya, yang memungkinkan Security Command Center mengekspor temuan ke set data BigQuery Anda di balik perimeter layanan.

Melihat detail konfigurasi ekspor

gcloud

  1. Buka konsol Google Cloud .

    Buka Google Cloud konsol

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

  3. Klik Activate Cloud Shell.

  4. Untuk memverifikasi detail konfigurasi ekspor, jalankan perintah berikut:

    gcloud scc bqexports get BIGQUERY_EXPORT \
        --folder=FOLDER_ID | --organization=ORGANIZATION_ID | --project=PROJECT_ID \
        --location=LOCATION
    

    Ganti kode berikut:

Memperbarui konfigurasi ekspor

Jika perlu, Anda dapat mengubah filter, set data, dan deskripsi konfigurasi ekspor yang ada. Anda tidak dapat mengubah nama konfigurasi ekspor.

gcloud

  1. Buka konsol Google Cloud .

    Buka Google Cloud konsol

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

  3. Klik Activate Cloud Shell.

  4. Untuk memperbarui konfigurasi ekspor, jalankan perintah berikut:

    gcloud scc bqexports update BIGQUERY_EXPORT \
        --dataset=DATASET_NAME \
        --folder=FOLDER_ID | --organization=ORGANIZATION_ID | --project=PROJECT_ID \
        --location=LOCATION \
        [--description=DESCRIPTION] \
        [--filter=FILTER]
    

    Ganti kode berikut:

    • BIGQUERY_EXPORT dengan nama konfigurasi ekspor yang ingin Anda perbarui.
    • DATASET_NAME dengan nama set data BigQuery—misalnya, projects/PROJECT_ID/datasets/DATASET_ID.
    • FOLDER_ID, ORGANIZATION_ID, atau PROJECT_ID dengan nama folder, organisasi, atau project Anda. Anda harus menyetel salah satu opsi ini. Untuk folder dan organisasi, namanya adalah ID folder atau ID organisasi. Untuk project, namanya adalah nomor project atau ID project.
    • LOCATION: lokasi Security Command Center tempat konfigurasi ekspor akan diperbarui; jika retensi data diaktifkan, gunakan eu, ksa, atau us; jika tidak, gunakan nilai global.
    • DESCRIPTION dengan deskripsi konfigurasi ekspor yang dapat dibaca manusia. Variabel ini bersifat opsional.
    • FILTER dengan ekspresi yang menentukan temuan yang akan disertakan dalam ekspor. Misalnya, jika Anda ingin memfilter kategori XSS_SCRIPTING, ketik "category=\"XSS_SCRIPTING\". Variabel ini bersifat opsional.

Melihat semua konfigurasi ekspor

Anda dapat melihat semua konfigurasi ekspor dalam organisasi, folder, atau project.

gcloud

  1. Buka konsol Google Cloud .

    Buka Google Cloud konsol

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

  3. Klik Activate Cloud Shell.

  4. Untuk mencantumkan konfigurasi ekspor, jalankan perintah berikut:

    gcloud scc bqexports list \
        --folder=FOLDER_ID | --organization=ORGANIZATION_ID | --project=PROJECT_ID \
        --location=LOCATION \
        [--limit=LIMIT] \
        [--page-size=PAGE_SIZE]
    

    Ganti kode berikut:

    • FOLDER_ID, ORGANIZATION_ID, atau PROJECT_ID dengan nama folder, organisasi, atau project Anda. Anda harus menyetel salah satu opsi ini. Untuk folder dan organisasi, namanya adalah ID folder atau ID organisasi. Untuk project, namanya adalah nomor project atau ID project.

      Jika Anda menentukan ID organisasi, daftar akan mencakup semua konfigurasi ekspor yang ditentukan dalam organisasi tersebut, termasuk yang berada di tingkat folder dan project. Jika Anda menentukan ID folder, daftar ini akan mencakup semua konfigurasi ekspor yang ditentukan di tingkat folder dan di project dalam folder tersebut. Jika Anda menentukan nomor project atau project ID, daftar hanya mencakup semua konfigurasi ekspor untuk project tersebut.

    • LOCATION: lokasi Security Command Center tempat mencantumkan konfigurasi ekspor; jika retensi data diaktifkan, gunakan eu, ksa, atau us; jika tidak, gunakan nilai global.

    • LIMIT dengan jumlah konfigurasi ekspor yang ingin Anda lihat. Variabel ini bersifat opsional.

    • PAGE_SIZE dengan nilai ukuran halaman. Variabel ini bersifat opsional.

Java

Untuk melakukan autentikasi ke Security Command Center, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan ADC untuk lingkungan pengembangan lokal.


import com.google.cloud.securitycenter.v2.BigQueryExport;
import com.google.cloud.securitycenter.v2.ListBigQueryExportsRequest;
import com.google.cloud.securitycenter.v2.OrganizationLocationName;
import com.google.cloud.securitycenter.v2.SecurityCenterClient;
import com.google.cloud.securitycenter.v2.SecurityCenterClient.ListBigQueryExportsPagedResponse;
import java.io.IOException;

public class ListBigQueryExports {

  public static void main(String[] args) throws IOException {
    // TODO(Developer): Modify the following variable values.
    // organizationId: Google Cloud Organization id.
    String organizationId = "{google-cloud-organization-id}";

    // Specify the location to list the findings.
    String location = "global";

    listBigQueryExports(organizationId, location);
  }

  // List BigQuery exports in the given parent.
  public static ListBigQueryExportsPagedResponse listBigQueryExports(String organizationId,
      String location) 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.
    try (SecurityCenterClient client = SecurityCenterClient.create()) {
      OrganizationLocationName organizationName = OrganizationLocationName.of(organizationId,
          location);

      ListBigQueryExportsRequest request = ListBigQueryExportsRequest.newBuilder()
          .setParent(organizationName.toString())
          .build();

      ListBigQueryExportsPagedResponse response = client.listBigQueryExports(request);

      System.out.println("Listing BigQuery exports:");
      for (BigQueryExport bigQueryExport : response.iterateAll()) {
        System.out.println(bigQueryExport.getName());
      }
      return response;
    }
  }
}

Python

Untuk melakukan autentikasi ke Security Command Center, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan ADC untuk lingkungan pengembangan lokal.

def list_bigquery_exports(parent: str):
    from google.cloud import securitycenter_v2

    """
    List BigQuery exports in the given parent.
    Args:
         parent: The parent which owns the collection of BigQuery exports.
             Use any one of the following resource paths:
                 - organizations/{organization_id}/locations/{location_id}
                 - folders/{folder_id}/locations/{location_id}
                 - projects/{project_id}/locations/{location_id}
    """

    client = securitycenter_v2.SecurityCenterClient()

    request = securitycenter_v2.ListBigQueryExportsRequest()
    request.parent = parent

    response = client.list_big_query_exports(request)

    print("Listing BigQuery exports:")
    for bigquery_export in response:
        print(bigquery_export.name)
    return response

Menghapus konfigurasi ekspor

Jika tidak lagi memerlukan konfigurasi ekspor, Anda dapat menghapusnya.

gcloud

  1. Buka konsol Google Cloud .

    Buka Google Cloud konsol

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

  3. Klik Activate Cloud Shell.

  4. Untuk menghapus konfigurasi ekspor, jalankan perintah berikut:

    gcloud scc bqexports delete BIGQUERY_EXPORT \
        --folder=FOLDER_ID | --organization=ORGANIZATION_ID | --project=PROJECT_ID \
        --location=LOCATION
    

    Ganti kode berikut:

Java

Untuk melakukan autentikasi ke Security Command Center, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan ADC untuk lingkungan pengembangan lokal.


import com.google.cloud.securitycenter.v2.BigQueryExportName;
import com.google.cloud.securitycenter.v2.DeleteBigQueryExportRequest;
import com.google.cloud.securitycenter.v2.SecurityCenterClient;
import java.io.IOException;

public class DeleteBigQueryExport {

  public static void main(String[] args) throws IOException {
    // TODO(Developer): Modify the following variable values.
    // organizationId: Google Cloud Organization id.
    String organizationId = "{google-cloud-organization-id}";

    // Specify the location to list the findings.
    String location = "global";

    // bigQueryExportId: Unique identifier that is used to identify the export.
    String bigQueryExportId = "{bigquery-export-id}";

    deleteBigQueryExport(organizationId, location, bigQueryExportId);
  }

  // Delete an existing BigQuery export.
  public static void deleteBigQueryExport(String organizationId, String location,
      String bigQueryExportId)
      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.
    try (SecurityCenterClient client = SecurityCenterClient.create()) {
      // Optionally BigQueryExportName or String can be used
      // String bigQueryExportName = String.format("organizations/%s/locations/%s
      // /bigQueryExports/%s",organizationId,location, bigQueryExportId);
      BigQueryExportName bigQueryExportName = BigQueryExportName.of(organizationId, location,
          bigQueryExportId);

      DeleteBigQueryExportRequest bigQueryExportRequest =
          DeleteBigQueryExportRequest.newBuilder()
              .setName(bigQueryExportName.toString())
              .build();

      client.deleteBigQueryExport(bigQueryExportRequest);
      System.out.printf("BigQuery export request deleted successfully: %s", bigQueryExportId);
    }
  }
}

Python

Untuk melakukan autentikasi ke Security Command Center, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan ADC untuk lingkungan pengembangan lokal.

def delete_bigquery_export(parent: str, bigquery_export_id: str):
    """
    Delete an existing BigQuery export.
    Args:
        parent: Use any one of the following resource paths:
                 - organizations/{organization_id}/locations/{location_id}
                 - folders/{folder_id}/locations/{location_id}
                 - projects/{project_id}/locations/{location_id}
        bigquery_export_id: Unique identifier that is used to identify the export.
    """
    from google.cloud import securitycenter_v2

    client = securitycenter_v2.SecurityCenterClient()

    request = securitycenter_v2.DeleteBigQueryExportRequest()
    request.name = f"{parent}/bigQueryExports/{bigquery_export_id}"

    client.delete_big_query_export(request)
    print(f"BigQuery export request deleted successfully: {bigquery_export_id}")

Setelah menghapus konfigurasi ekspor, Anda dapat menghapus data dari Looker Studio. Untuk mengetahui informasi selengkapnya, lihat Menghapus, menghapus, dan memulihkan sumber data.

Meninjau temuan di BigQuery

Setelah Anda membuat konfigurasi ekspor, temuan baru akan diekspor ke set data BigQuery di project yang Anda tentukan.

Untuk meninjau temuan di BigQuery, lakukan hal berikut:

  1. Buka project di BigQuery.

    Buka BigQuery

  2. Pilih project.

  3. Di panel Explorer, luaskan node untuk project Anda.

  4. Perluas set data Anda.

  5. Klik tabel temuan.

  6. Di tab yang terbuka, klik Pratinjau. Contoh set data akan ditampilkan.

Kueri yang berguna

Bagian ini memberikan contoh kueri untuk menganalisis data temuan. Dalam contoh berikut, ganti DATASET dengan nama yang ditetapkan ke set data Anda dan PROJECT_ID dengan nama project untuk set data Anda.

Untuk memecahkan masalah error yang Anda alami, lihat Pesan error.

Jumlah temuan baru yang dibuat dan diperbarui setiap hari

SELECT
    FORMAT_DATETIME("%Y-%m-%d", event_time) AS date,
    count(DISTINCT finding_id)
FROM `PROJECT_ID.DATASET.findings`
GROUP BY date
ORDER BY date DESC

Data temuan terbaru untuk setiap temuan

SELECT
    * EXCEPT(row)
FROM (
    SELECT *, ROW_NUMBER() OVER(
        PARTITION BY finding_id
        ORDER BY event_time DESC, finding.mute_update_time DESC
    ) AS row
    FROM `PROJECT_ID.DATASET.findings`
)
WHERE row = 1

Temuan saat ini yang aktif, diurutkan berdasarkan waktu

WITH latestFindings AS (
    SELECT * EXCEPT(row)
    FROM (
        SELECT *, ROW_NUMBER() OVER(
            PARTITION BY finding_id
            ORDER BY event_time DESC, finding.mute_update_time DESC
        ) AS row
        FROM `PROJECT_ID.DATASET.findings`
    ) WHERE row = 1
)
SELECT finding_id, event_time, finding
FROM latestFindings
WHERE finding.state = "ACTIVE"
ORDER BY event_time DESC

Temuan saat ini yang ada dalam project

WITH latestFindings AS (
    SELECT * EXCEPT(row)
    FROM (
        SELECT *, ROW_NUMBER() OVER(
            PARTITION BY finding_id
            ORDER BY event_time DESC, finding.mute_update_time DESC
        ) AS row
        FROM `PROJECT_ID.DATASET.findings`
    ) WHERE row = 1
)
SELECT finding_id, event_time, finding, resource
FROM latestFindings
WHERE resource.project_display_name = 'PROJECT'

Ganti PROJECT dengan nama project.

Temuan saat ini yang ada di folder

WITH latestFindings AS(
    SELECT * EXCEPT(row)
    FROM (
        SELECT *, ROW_NUMBER() OVER(
            PARTITION BY finding_id
            ORDER BY event_time DESC, finding.mute_update_time DESC
        ) AS row
        FROM `PROJECT_ID.DATASET.findings`
    ) WHERE row = 1
)
SELECT finding_id, event_time, finding, resource
FROM latestFindings
CROSS JOIN UNNEST(resource.folders) AS folder
WHERE folder.resource_folder_display_name = 'FOLDER'

Ganti FOLDER dengan nama folder.

Temuan saat ini dari pemindai Logging Scanner

WITH latestFindings AS (
    SELECT * EXCEPT(row)
    FROM (
        SELECT *, ROW_NUMBER() OVER(
            PARTITION BY finding_id
            ORDER BY event_time DESC, finding.mute_update_time DESC
        ) AS row
        FROM `PROJECT_ID.DATASET.findings`
    ) WHERE row = 1
)
SELECT finding_id, event_time, finding
FROM latestFindings
CROSS JOIN UNNEST(finding.source_properties) AS source_property
WHERE source_property.key = "ScannerName"
  AND source_property.value = "LOGGING_SCANNER"

Hasil temuan aktif saat ini dari jenis Persistence: IAM Anomalous Grant

WITH latestFindings AS(
    SELECT * EXCEPT(row)
    FROM (
        SELECT *, ROW_NUMBER() OVER(
            PARTITION BY finding_id
            ORDER BY event_time DESC, finding.mute_update_time DESC
        ) AS row
        FROM `PROJECT_ID.DATASET.findings`
    ) WHERE row = 1
)
SELECT finding_id, event_time, finding
FROM latestFindings
WHERE finding.state = "ACTIVE"
  AND finding.category = "Persistence: IAM Anomalous Grant"

Menghubungkan temuan aktif dari jenis tertentu dengan Cloud Audit Logs

Contoh kueri ini membantu menyelidiki temuan pemberian IAM yang anomali dari Event Threat Detection menggunakan Cloud Audit Logs dengan menampilkan urutan tindakan Aktivitas Admin pemberi selama jangka waktu sebelum dan sesudah tindakan pemberian IAM yang anomali. Kueri berikut mengorelasikan log Aktivitas Admin antara 1 jam sebelum dan 1 jam setelah stempel waktu temuan.

WITH latestFindings AS(
    SELECT * EXCEPT(row)
    FROM (
        SELECT *, ROW_NUMBER() OVER(
            PARTITION BY finding_id
            ORDER BY event_time DESC, finding.mute_update_time DESC
        ) AS row
        FROM `PROJECT_ID.DATASET.findings`
    ) WHERE row = 1
)
SELECT
  finding_id,
  ANY_VALUE(event_time) as event_time,
  ANY_VALUE(finding.access.principal_email) as grantor,
  JSON_VALUE_ARRAY(ANY_VALUE(finding.source_properties_json), '$.properties.sensitiveRoleGrant.members') as grantees,
  ARRAY_AGG(
    STRUCT(
      timestamp,
      IF(timestamp < event_time, 'before', 'after') as timeline,
      protopayload_auditlog.methodName,
      protopayload_auditlog.resourceName,
      protopayload_auditlog.serviceName
    )
    ORDER BY timestamp ASC
  ) AS recent_activity
FROM (
  SELECT
    f.*,
    a.*,
  FROM latestFindings AS f
  LEFT JOIN `PROJECT_ID.DATASET.cloudaudit_googleapis_com_activity` AS a
  ON a.protopayload_auditlog.authenticationInfo.principalEmail = f.finding.access.principal_email
  WHERE f.finding.state = "ACTIVE"
    AND f.finding.category = "Persistence: IAM Anomalous Grant"
    AND a.timestamp >= TIMESTAMP_SUB(f.event_time, INTERVAL 1 HOUR)
    AND a.timestamp <= TIMESTAMP_ADD(f.event_time, INTERVAL 1 HOUR)
  )
GROUP BY
  finding_id
ORDER BY
  event_time DESC

Outputnya mirip dengan hal berikut ini:

Screenshot hasil kueri yang menampilkan temuan dengan log audit yang berkorelasi

Membuat diagram di Looker Studio

Looker Studio memungkinkan Anda membuat laporan dan dasbor interaktif.

Secara umum, Anda akan dikenai biaya penggunaan BigQuery saat mengakses BigQuery melalui Looker Studio. Untuk mengetahui informasi selengkapnya, lihat Memvisualisasikan data BigQuery menggunakan Looker Studio.

Untuk membuat diagram yang memvisualisasikan data temuan berdasarkan tingkat keparahan dan kategori, lakukan hal berikut:

  1. Buka Looker Studio dan login.
  2. Jika diminta, berikan informasi tambahan dan siapkan preferensi lainnya. Baca persyaratan layanan dan, jika Anda setuju, lanjutkan.
  3. Klik Laporan Kosong.
  4. Di tab Hubungkan ke data, klik kartu BigQuery.
  5. Jika diminta, izinkan Looker Studio mengakses project BigQuery.
  6. Hubungkan ke data temuan Anda:

    1. Untuk Project, pilih project tersebut untuk set data Anda. Atau, di tab Project saya, masukkan project ID Anda untuk menelusurinya.
    2. Untuk Set data, klik nama set data Anda.
    3. Untuk Table, klik findings.
    4. Klik Tambahkan.
    5. Pada dialog, klik Tambahkan ke laporan.
  7. Setelah laporan ditambahkan, klik Tambahkan diagram.

  8. Klik Diagram kolom bertumpuk, lalu klik area tempat Anda ingin menempatkannya.

    Screenshot pilihan diagram
  9. Di panel Chart > Bar, pada tab Data, tetapkan kolom berikut:

    1. Di kolom Dimensi, pilih finding.severity.
    2. Di kolom Breakdown Dimension, pilih finding.category.
    Screenshot diagram temuan yang dikategorikan menurut tingkat keparahan dan
            dikategorikan lebih lanjut menurut kategori

Laporan diperbarui untuk menampilkan beberapa kolom dengan temuan yang dikelompokkan berdasarkan tingkat keparahan dan kategori.

Langkah berikutnya

Pelajari cara menjalankan kueri di BigQuery.