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 Google Cloud yang terkelola sepenuhnya, berskala petabyte, dan hemat biaya, 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 data yang Anda butuhkan, dan membuat laporan kustom. Untuk mempelajari BigQuery lebih lanjut, lihat dokumentasi BigQuery.

Ringkasan

Saat Anda mengaktifkan fitur ini, temuan baru yang ditulis ke Security Command Center akan diekspor ke tabel BigQuery secara hampir real time. Selanjutnya, 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 terkelola sepenuhnya dan tidak memerlukan pelaksanaan 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 akan membuat beberapa data 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 mengurainya, Anda dapat menggunakan klausa DISTINCT, seperti yang ditunjukkan dalam contoh kueri 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 mewakili temuan. ID ini unik dalam sumber untuk organisasi. Karakter ini bersifat alfanumerik dan memiliki kurang dari atau sama dengan 32 karakter.
event_time

Waktu terjadinya peristiwa atau waktu pembaruan pada temuan terjadi. Misalnya, jika temuan mewakili firewall yang terbuka, event_time akan merekam waktu saat detektor yakin firewall telah dibuka. Jika temuan tersebut diselesaikan setelahnya, waktu ini akan mencerminkan kapan temuan tersebut diselesaikan.

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

temuan

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

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

resource

Informasi terkait resource Google Cloud yang terkait dengan temuan ini.

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

Biaya

Anda akan dikenai biaya BigQuery yang terkait dengan 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 tempat tinggal, pastikan Anda menentukan lokasi yang benar sebelum membuatnya. Security Command Center tidak membatasi lokasi tempat Anda membuat ekspor.

BigQuery Export hanya disimpan di lokasi tempat data 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 mengambil ekspor BigQuery menggunakan panggilan API, Anda perlu menentukan lokasi dalam nama resource lengkap bigQueryExport. Contoh:

GET https://securitycenter.googleapis.com/v2/organizations/123/locations/eu/bigQueryExports/my-export-01

Demikian pula, untuk mengambil ekspor BigQuery menggunakan gcloud CLI, Anda harus menentukan lokasi menggunakan flag --location. Contoh:

gcloud scc bqexports get myBigQueryExport --organization=123 \
    --location=us

Mengekspor temuan dari Pusat Komando Keamanan ke BigQuery

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

Mengaktifkan Security Command Center API

Untuk mengaktifkan Security Command Center API:

  1. Buka halaman Library API di konsol Google Cloud.

    Buka Library API

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

  3. Di kotak Telusuri, 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 prinsipal dan project tempat Anda mengekspor temuan. Aturan ini mengizinkan akses ke resource yang dilindungi dan memungkinkan BigQuery memverifikasi bahwa pengguna memiliki izin setIamPolicy di set data BigQuery.

Sebelum menyiapkan ekspor baru ke BigQuery

  1. Buka halaman VPC Service Controls di konsol Google Cloud.

    Buka Kontrol Layanan VPC

  2. Jika perlu, pilih organisasi Anda.

  3. Klik nama perimeter layanan yang ingin diubah.

    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 masuk bagi pengguna atau akun layanan, gunakan parameter berikut:

    • Atribut FROM klien API:
      • Di menu Identities, pilih Selected identities.
      • Di menu Sumber, pilih Semua Sumber.
      • Klik Select, lalu masukkan akun utama yang digunakan untuk memanggil Security Command Center API.
    • Atribut TO layanan/resource Google Cloud:
      • Di menu Project, pilih Selected projects.
      • Klik Select, lalu masukkan project yang berisi set data BigQuery.
      • Di menu Services, pilih Selected services, lalu pilih BigQuery API.
      • Di menu Metode, pilih Semua tindakan.
  7. Klik Simpan.

  8. Di menu navigasi, klik Egress Policy.

  9. Klik Add Rule.

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

    • Atribut FROM klien API:
      • Di menu 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 Project, pilih All projects.
      • Di menu Services, pilih Selected services, lalu pilih BigQuery API.
      • Di menu Metode, pilih Semua tindakan.
  11. Klik Simpan.

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 ingin mengekspor temuan dari project ke set data BigQuery, Anda membuat konfigurasi ekspor di tingkat project untuk hanya mengekspor temuan yang terkait dengan project tersebut. Secara opsional, Anda dapat menentukan filter untuk mengekspor temuan tertentu saja.

Pastikan untuk membuat konfigurasi ekspor di tingkat yang sesuai. Misalnya, jika Anda membuat konfigurasi ekspor di Project B untuk mengekspor temuan dari Project A dan 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 mengekspor temuan ke tabel. Akun ini 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 Lama, 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 konsol Google Cloud.

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

  3. Klik Aktifkan 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 menetapkan salah satu opsi ini. Untuk folder dan organisasi, namanya adalah ID folder atau ID organisasi. Untuk project, namanya adalah nomor project atau project ID.
    • LOCATION: jika aset data diaktifkan, lokasi Security Command Center tempat membuat konfigurasi ekspor; jika aset data tidak diaktifkan, gunakan nilai global.
    • DESCRIPTION dengan deskripsi konfigurasi ekspor yang dapat dibaca manusia. Variabel ini bersifat opsional.
    • FILTER dengan ekspresi yang menentukan temuan apa yang akan disertakan dalam ekspor. Misalnya, jika Anda ingin memfilter berdasarkan kategori XSS_SCRIPTING, ketik "category=\"XSS_SCRIPTING\". Variabel ini bersifat opsional.

Java

Untuk melakukan autentikasi ke Security Command Center, siapkan Kredensial Default Aplikasi. Untuk 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 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 membuat konfigurasi ekspor. Setelah tabel BigQuery dibuat, setiap temuan baru dan yang diperbarui yang cocok dengan filter dan cakupan Anda akan muncul di tabel secara hampir real time.

Untuk meninjau temuan Anda, lihat Meninjau temuan.

Membuat aturan masuk untuk ekspor baru ke BigQuery

Jika 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.

  1. Buka kembali perimeter layanan dari Menyiapkan ekspor baru ke BigQuery.

    Buka Kontrol Layanan VPC

  2. Klik Kebijakan Ingress.

  3. Klik Add Rule.

  4. Untuk mengonfigurasi aturan traffic masuk untuk konfigurasi ekspor, 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 konfigurasi ekspor BigQuery: service-org-ORGANIZATION_ID@gcp-sa-scc-notification.iam.gserviceaccount.com
    • Atribut TO layanan/resource GCP:
      • Di menu drop-down Project, pilih Selected projects.
      • Klik Select, lalu pilih project yang berisi set data BigQuery.
      • Di menu drop-down Services, pilih Selected services, lalu pilih BigQuery API.
      • Di menu drop-down Metode, pilih Semua tindakan.
  5. Di menu navigasi, klik Simpan.

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, sekarang Anda dapat menghapus hal berikut:

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

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

Melihat detail konfigurasi ekspor

gcloud

  1. Buka konsol Google Cloud.

    Buka konsol Google Cloud.

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

  3. Klik Aktifkan 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:

    • BIGQUERY_EXPORT dengan nama untuk konfigurasi ekspor ini.
    • FOLDER_ID, ORGANIZATION_ID, atau PROJECT_ID dengan nama folder, organisasi, atau project Anda. Anda harus menetapkan salah satu opsi ini. Untuk folder dan organisasi, namanya adalah ID folder atau ID organisasi. Untuk project, namanya adalah nomor project atau project ID.
    • LOCATION: jika aset data diaktifkan, lokasi Security Command Center tempat membuat konfigurasi ekspor; jika aset data tidak diaktifkan, gunakan nilai global.

      Misalnya, untuk mendapatkan konfigurasi ekspor bernama my-bq-export dari organisasi dengan ID organisasi yang ditetapkan ke 123, jalankan:

      gcloud scc bqexports get my-bq-export \
          --organization=123 \
          --location=global
      

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 konsol Google Cloud.

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

  3. Klik Aktifkan Cloud Shell.

  4. Untuk mengupdate 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 untuk 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 menetapkan salah satu opsi ini. Untuk folder dan organisasi, namanya adalah ID folder atau ID organisasi. Untuk project, namanya adalah nomor project atau project ID.
    • LOCATION: jika aset data diaktifkan, lokasi Security Command Center tempat mengupdate konfigurasi ekspor; jika aset data tidak diaktifkan, gunakan nilai global.
    • DESCRIPTION dengan deskripsi konfigurasi ekspor yang dapat dibaca manusia. Variabel ini bersifat opsional.
    • FILTER dengan ekspresi yang menentukan temuan apa saja yang akan disertakan dalam ekspor. Misalnya, jika Anda ingin memfilter berdasarkan 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 konsol Google Cloud.

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

  3. Klik Aktifkan Cloud Shell.

  4. Untuk menampilkan 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 menetapkan salah satu opsi ini. Untuk folder dan organisasi, namanya adalah ID folder atau ID organisasi. Untuk project, namanya adalah nomor project atau project ID.

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

    • LOCATION: jika aset data diaktifkan, lokasi Security Command Center tempat mencantumkan konfigurasi ekspor; jika aset data tidak diaktifkan, 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 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 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 konsol Google Cloud.

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

  3. Klik Aktifkan 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:

    • BIGQUERY_EXPORT dengan nama untuk konfigurasi ekspor yang ingin Anda hapus.
    • FOLDER_ID, ORGANIZATION_ID, atau PROJECT_ID dengan nama folder, organisasi, atau project Anda. Anda harus menetapkan salah satu opsi ini. Untuk folder dan organisasi, namanya adalah ID folder atau ID organisasi. Untuk project, namanya adalah nomor project atau project ID.
    • LOCATION: jika aset data diaktifkan, lokasi Security Command Center tempat menghapus konfigurasi ekspor; jika aset data tidak diaktifkan, gunakan nilai global.

      Misalnya, untuk menghapus konfigurasi ekspor bernama my-bq-export dari organisasi dengan ID organisasi yang ditetapkan ke 123, jalankan:

      gcloud scc bqexports delete my-bq-export \
          --organization=123 \
          --location=global
      

Java

Untuk melakukan autentikasi ke Security Command Center, siapkan Kredensial Default Aplikasi. Untuk 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 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 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 dalam 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 dalam 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"

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 tidak wajar dari Event Threat Detection menggunakan Cloud Audit Logs dengan menampilkan urutan tindakan Aktivitas Admin pemberi selama periode waktu sebelum dan sesudah tindakan pemberian IAM yang tidak wajar. Kueri berikut menghubungkan 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 artikel 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 puas, lanjutkan.
  3. Klik Laporan Kosong.
  4. Di tab Hubungkan ke data, klik kartu BigQuery.
  5. Jika diminta, izinkan Looker Studio untuk mengakses project BigQuery.
  6. Menghubungkan 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 Tabel, klik temuan.
    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 Dimensi Perincian, pilih finding.category.
    Screenshot diagram temuan yang dikategorikan menurut tingkat keparahan dan
            subkategori menurut kategori

Laporan diperbarui untuk menampilkan beberapa kolom dengan temuan yang dibagi menurut tingkat keparahan dan kategori.

Langkah selanjutnya

Pelajari cara menjalankan kueri di BigQuery.