Gunakan logging permintaan

Log per permintaan Google Cloud Armor untuk nama kebijakan keamanan, prioritas aturan kecocokan, tindakan terkait, dan informasi terkait dicatat sebagai bagian dari logging untuk Load Balancer Aplikasi eksternal dan Load Balancer Jaringan proxy eksternal. Logging untuk layanan backend baru dinonaktifkan secara default, sehingga Anda harus mengaktifkan logging guna mencatat informasi logging lengkap untuk Google Cloud Armor.

Log Google Cloud Armor adalah bagian dari log Cloud Load Balancing. Artinya, pembuatan log Google Cloud Armor bergantung pada frekuensi pengambilan sampel log yang dikonfigurasi untuk load balancer Anda. Jika Anda mengurangi frekuensi sampling untuk load balancer, log permintaan Google Cloud Armor akan diambil sampelnya dengan frekuensi yang lebih rendah. Selain itu, jika Anda menggunakan referensi layanan lintas project, log akan dibuat di project layanan atau host yang mencakup peta URL dan frontend load balancer Anda. Oleh karena itu, sebaiknya administrator di project frontend memberikan izin untuk membaca log dan metrik kepada administrator di project backend.

Dengan logging, Anda dapat melihat setiap permintaan yang dievaluasi oleh kebijakan keamanan Google Cloud Armor dan hasil atau tindakan yang diambil. Misalnya, untuk melihat permintaan yang ditolak, Anda dapat menggunakan filter seperti jsonPayload.enforcedSecurityPolicy.outcome="DENY" atau jsonPayload.statusDetails="denied_by_security_policy".

Guna mengaktifkan logging untuk Load Balancer Aplikasi eksternal, lihat Logging dan pemantauan Load Balancer Aplikasi Eksternal. Untuk Load Balancer Jaringan proxy eksternal, Anda dapat menggunakan perintah Google Cloud CLI seperti yang tercantum di halaman Logging dan pemantauan Load Balancer Aplikasi Eksternal sebelumnya. Anda tidak dapat mengaktifkan logging untuk Load Balancer Jaringan proxy eksternal menggunakan Konsol Google Cloud.

Selain itu, Anda dapat menetapkan berbagai level logging untuk membantu mengevaluasi apakah kebijakan keamanan dan aturannya berfungsi sebagaimana mestinya. Untuk mengetahui informasi selengkapnya, lihat Logging panjang.

Entri log kebijakan keamanan

Entri log di Logs Explorer berikut adalah untuk kebijakan keamanan dan logging aturan Google Cloud Armor. Entri ini menyertakan struktur berikut di jsonPayload. Detail permintaan HTTP muncul dalam pesan httpRequest.

  • statusDetails (string): deskripsi tekstual dari kode respons.
    • redirected_by_security_policy: permintaan dialihkan oleh aturan pengalihan, GOOGLE_RECAPTCHA atau EXTERNAL_302.
    • denied_by_security_policy: permintaan ditolak oleh load balancer karena kebijakan keamanan Google Cloud Armor.
    • body_denied_by_security_policy: isi permintaan ditolak oleh load balancer karena kebijakan keamanan Google Cloud Armor.
  • enforcedSecurityPolicy: aturan kebijakan keamanan yang diterapkan.
    • name (string): nama kebijakan keamanan.
    • priority (angka): prioritas aturan yang cocok dalam kebijakan keamanan.
    • adaptiveProtection: informasi tentang aturan Perlindungan Adaptif yang di-deploy secara otomatis, jika berlaku.
      • autoDeployAlertId: ID pemberitahuan peristiwa yang terdeteksi Perlindungan Adaptif.
    • configuredAction (string): nama tindakan yang dikonfigurasi dalam aturan yang cocok—misalnya, ALLOW, DENY, GOOGLE_RECAPTCHA, EXTERNAL_302, THROTTLE (untuk aturan throttle), RATE_BASED_BAN (untuk aturan pemblokiran berbasis tarif).
    • rateLimitAction: informasi tentang tindakan batas kapasitas ketika aturan throttle atau aturan pemblokiran berbasis kapasitas cocok.
      • key (string): nilai kunci batas kapasitas (hingga 32 byte). Kolom ini dihapus jika jenis kunci adalah ALL, atau jika jenis kunci adalah HTTP-HEADER atau HTTP-COOKIE, dan header atau cookie yang ditentukan tidak ada dalam permintaan.
      • outcome (string): kemungkinan nilainya adalah sebagai berikut:
        • "RATE_LIMIT_THRESHOLD_CONFORM" jika berada di bawah batas kapasitas yang dikonfigurasi.
        • "RATE_LIMIT_THRESHOLD_EXCEED" jika berada di atas batas batas kapasitas yang dikonfigurasi.
        • "BAN_THRESHOLD_EXCEED" jika berada di atas batas pemblokiran yang dikonfigurasi.
    • outcome (string): hasil dari menjalankan tindakan yang dikonfigurasi—misalnya, ACCEPT, DENY, REDIRECT, EXEMPT.
    • preconfiguredExprIds (string): ID dari semua ekspresi aturan WAF yang telah dikonfigurasi sebelumnya dan memicu aturan.
    • threatIntelligence: informasi tentang daftar alamat IP yang cocok dari Threat Intelligence, jika ada.
      • categories: (string) nama daftar alamat IP yang cocok.
  • previewSecurityPolicy: diisi jika permintaan cocok dengan aturan yang dikonfigurasi untuk pratinjau (hanya muncul jika aturan pratinjau akan diprioritaskan daripada aturan yang diterapkan).
    • name (string): nama kebijakan keamanan
    • priority (angka): prioritas aturan yang cocok dalam kebijakan keamanan.
    • configuredAction (string): nama tindakan yang dikonfigurasi dalam aturan yang cocok—misalnya, ALLOW, DENY, GOOGLE_RECAPTCHA, EXTERNAL_302, THROTTLE (untuk aturan throttle), RATE_BASED_BAN (untuk aturan pemblokiran berbasis tarif).
    • rateLimitAction: informasi tentang tindakan batas kapasitas ketika aturan throttle atau aturan pemblokiran berbasis kapasitas cocok.
      • key (string): nilai kunci batas kapasitas (hingga 32 byte). Kolom ini dihilangkan jika jenis kunci adalah ALL, atau jika jenis kunci adalah HTTP-HEADER atau HTTP-COOKIE dan header atau cookie yang ditentukan tidak ada dalam permintaan.
      • outcome (string): kemungkinan nilainya adalah sebagai berikut:
        • "RATE_LIMIT_THRESHOLD_CONFORM" jika berada di bawah batas kapasitas yang dikonfigurasi.
        • "RATE_LIMIT_THRESHOLD_EXCEED" jika berada di atas batas batas kapasitas yang dikonfigurasi.
        • "BAN_THRESHOLD_EXCEED" jika berada di atas batas pemblokiran yang dikonfigurasi.
    • outcome (string): hasil dari eksekusi yang dikonfigurasi.
    • outcome (string): hasil dari menjalankan tindakan yang dikonfigurasi—misalnya, ACCEPT, DENY, REDIRECT, EXEMPT.
    • preconfiguredExprIds (string): ID dari semua ekspresi aturan WAF yang telah dikonfigurasi sebelumnya dan memicu aturan.
    • threatIntelligence: informasi tentang daftar alamat IP yang cocok dari Threat Intelligence, jika ada.
      • categories: (string) nama daftar alamat IP yang cocok.
  • enforcedEdgeSecurityPolicy (Pratinjau): aturan kebijakan keamanan edge yang diterapkan.
    • name (string): nama kebijakan keamanan.
    • priority (angka): prioritas aturan yang cocok dalam kebijakan keamanan.
    • configuredAction (string): nama tindakan yang dikonfigurasi dalam aturan pencocokan—misalnya, ALLOW, DENY.
    • outcome (string): hasil dari menjalankan tindakan yang dikonfigurasi—misalnya, ACCEPT, DENY.
  • previewEdgeSecurityPolicy (Pratinjau): diisi jika permintaan sesuai dengan aturan kebijakan keamanan edge yang dikonfigurasi untuk pratinjau (hanya ditampilkan saat aturan pratinjau akan lebih diprioritaskan daripada aturan yang diterapkan).
    • name (string): nama kebijakan keamanan.
    • priority (angka): prioritas aturan yang cocok dalam kebijakan keamanan.
    • configuredAction (string): nama tindakan yang dikonfigurasi dalam aturan pencocokan—misalnya, ALLOW, DENY.
    • outcome (string): hasil dari menjalankan tindakan yang dikonfigurasi—misalnya, ACCEPT, DENY.

Logging panjang

Mungkin sulit untuk mengetahui alasan aturan WAF yang telah dikonfigurasi sebelumnya dipicu oleh permintaan tertentu. Log peristiwa default Google Cloud Armor berisi aturan yang dipicu, serta subtanda tangan. Namun, Anda mungkin perlu mengidentifikasi detail dari permintaan masuk yang memicu aturan untuk tujuan pemecahan masalah, validasi aturan, atau penyesuaian aturan.

Anda dapat mengubah tingkat detail yang dicatat ke dalam log untuk kebijakan menggunakan flag --log-level. Tanda ini dapat memiliki nilai NORMAL atau VERBOSE:

--log-level=[NORMAL | VERBOSE]

Contoh:

gcloud compute security-policies update ca-policy-1 \
    --log-level=VERBOSE

Sebaiknya aktifkan logging panjang saat pertama kali membuat kebijakan, membuat perubahan pada kebijakan, atau memecahkan masalah kebijakan.

Nilai yang dicatat saat logging panjang diaktifkan

Saat logging panjang diaktifkan, informasi tambahan akan dicatat ke log permintaan load balancing yang dikirim ke Cloud Logging. Kolom tambahan berikut muncul di log permintaan saat logging panjang diaktifkan:

  • matchedFieldType (string): Ini adalah jenis kolom yang menyebabkan kecocokan.

    • ARG_NAMES
    • ARG_VALUES
    • BODY

      • Jika kolom BODY ada di log, artinya seluruh isi postingan cocok dengan aturan.
    • COOKIE_VALUES

    • COOKIE_NAMES

    • FILENAME

    • HEADER_VALUES

    • RAW_URI

    • REFERER

    • REQUEST_LINE

    • URI

    • USER_AGENT

    • HEADER_NAMES

    • ARGS_GET

    • X_FILENAME

    • ARG_NAME_COUNT

    • TRANSFER_ENCODING

    • REQUEST_METHOD

  • matchedFieldName (string): Jika cocok dengan bagian nilai dari pasangan nilai kunci, nilai kunci akan disimpan di kolom ini. Jika tidak, kolom tersebut akan kosong.

  • matchedFieldValue (string): Awalan hingga 16 byte untuk bagian kolom yang menyebabkan kecocokan.

  • matchedFieldLength (bilangan bulat): Total panjang kolom.

  • matchedOffset (bilangan bulat): Offset awal di dalam kolom yang menyebabkan kecocokan.

  • matchedLength (bilangan bulat): Panjang pencocokan.

Misalnya, Anda dapat mengirim permintaan ini ke project tempat aturan WAF injeksi SQL diaktifkan:

curl http://IP_ADDR/?sql_table=abc%20pg_catalog%20xyz

Entri di Logs Explorer akan terlihat seperti berikut:

enforcedSecurityPolicy: {
 name: "user-staging-sec-policy"
 priority: 100
 configuredAction: "DENY"
 outcome: "DENY
 preconfiguredExprIds: [
   0: "owasp-crs-v030001-id942140-sqli"
  ]
matchedFieldType: "ARG_VALUES"
matchedFieldName: "sql_table"
matchedFieldValue: "pg_catalog"
matchedFieldLength: 18
matchedOffset: 4
matchedLength: 10
}

Menjaga privasi saat logging panjang diaktifkan

Saat Anda menggunakan logging panjang, Google Cloud Armor akan mencatat cuplikan elemen dari permintaan masuk yang memicu aturan WAF tertentu yang telah dikonfigurasi sebelumnya. Cuplikan ini mungkin berisi bagian header permintaan, parameter permintaan, atau elemen isi POST. Cuplikan dapat berisi data sensitif seperti alamat IP atau data sensitif lainnya dari permintaan masuk, bergantung pada isi atau header permintaan dan faktor yang memicu aturan WAF.

Dengan mengaktifkan logging panjang, perhatikan bahwa ada risiko mengumpulkan data yang berpotensi sensitif di log Anda di Logging. Sebaiknya aktifkan logging panjang hanya selama pembuatan dan validasi aturan atau untuk pemecahan masalah. Selama pengoperasian normal, sebaiknya nonaktifkan logging panjang.

Melihat log

Anda hanya dapat melihat log untuk kebijakan keamanan Google Cloud Armor di Konsol Google Cloud.

Konsol

  1. Di konsol Google Cloud, buka kebijakan Google Cloud Armor.

    Buka kebijakan Google Cloud Armor

  2. Klik Tindakan.

  3. Pilih Lihat log.

Meminta logging data

Saat digunakan dengan Google Cloud Armor, jsonPayload memiliki kolom tambahan berikut:

  • securityPolicyRequestData: data yang berkaitan dengan permintaan saat sedang diproses oleh kebijakan keamanan, terlepas dari aturan mana yang pada akhirnya cocok.
    • recaptchaActionToken: data yang terkait dengan token tindakan reCAPTCHA Enterprise.
      • score (float): skor legitimasi pengguna yang disematkan dalam token tindakan reCAPTCHA Enterprise. Hanya ada jika token tindakan reCAPTCHA Enterprise dilampirkan dengan permintaan dan berhasil didekode berdasarkan aturan kebijakan keamanan. Untuk mengetahui informasi selengkapnya, lihat Menerapkan penilaian reCAPTCHA Enterprise.
    • recaptchaSessionToken: data yang terkait dengan token sesi reCAPTCHA Enterprise.
      • score (float): skor legitimasi pengguna yang disematkan dalam token sesi reCAPTCHA Enterprise. Hanya ada jika token sesi reCAPTCHA Enterprise dilampirkan dengan permintaan dan berhasil didekode berdasarkan aturan kebijakan keamanan.
    • tlsJa3Fingerprint: sidik jari TTL/SSL JA3 jika klien terhubung menggunakan HTTPS, HTTP/2, atau HTTP/3. Hanya ada jika sidik jari tersedia dan ada kebijakan keamanan yang mengevaluasi permintaan (terlepas dari apakah ekspresi dalam kebijakan cocok dengan permintaan).

Contoh log

Berikut adalah contoh detail log untuk aturan throttle yang memblokir permintaan:

jsonPayload: {
 enforcedSecurityPolicy: {
  priority: 100
  name: "sample-prod-policy"
  configuredAction: "THROTTLE"
  outcome: "DENY"
  rateLimitAction: {
    key:"sample-key"
    outcome:"RATE_LIMIT_THRESHOLD_EXCEED"
  }
 }
 @type: "type.googleapis.com/google.cloud.loadbalancing.type.LoadBalancerLogEntry"
 statusDetails: "denied_by_security_policy"
}
httpRequest: {8}
resource: {2}
timestamp: "2021-03-17T19:16:48.185763Z"

Berikut adalah contoh detail log untuk aturan pemblokiran berbasis tarif yang memblokir permintaan:

jsonPayload: {
 @type: "type.googleapis.com/google.cloud.loadbalancing.type.LoadBalancerLogEntry"
 enforcedSecurityPolicy: {
  priority: 150
  name: "sample-prod-policy"
  outcome: "DENY"
  configuredAction: "RATE_BASED_BAN"
  rateLimitAction: {
    key:"sample-key"
    outcome:"BAN_THRESHOLD_EXCEED"
  }
 }
 statusDetails: "denied_by_security_policy"
}
httpRequest: {8}
resource: {2}
timestamp: "2021-03-17T19:27:17.393244Z"

Langkah selanjutnya

Pelajari Memecahkan masalah Google Cloud Armor.