Memecahkan masalah Cloud Armor

Gunakan petunjuk ini untuk memecahkan masalah terkait kebijakan keamanan Google Cloud Armor.

Masalah umum

Men-debug kebijakan keamanan

Jika Anda memerlukan informasi tambahan tentang peristiwa tertentu yang memicu aturan yang telah dikonfigurasi sebelumnya, baca bagian Penggunaan logging permintaan, lalu aktifkan logging panjang. Cloud Logging mencatat tingkat detail yang lebih tinggi dalam log Anda, yang dapat Anda gunakan untuk menganalisis dan men-debug kebijakan serta aturan.

Meskipun aturan penolakan dikonfigurasi dalam kebijakan keamanan Cloud Armor, traffic tetap diizinkan.

Untuk mengatasi masalah tersebut, ikuti langkah-langkah berikut:

  1. Pastikan kebijakan keamanan Cloud Armor telah diterapkan pada layanan backend target. Misalnya, perintah berikut menggambarkan semua data yang terkait dengan layanan backend BACKEND. Hasil yang ditampilkan harus mencakup nama kebijakan keamanan Cloud Armor yang terkait dengan layanan backend ini.

    gcloud compute backend-services describe BACKEND
    
  2. Tinjau log HTTP(S) untuk menentukan kebijakan dan aturan mana yang cocok untuk traffic Anda beserta tindakan yang terkait. Untuk melihat log, gunakan Cloud Logging.

    Berikut adalah contoh log permintaan yang diizinkan dengan kolom menarik yang ditandai. Periksa kolom berikut dan pastikan seluruh kolom cocok dengan aturan yang Anda konfigurasi untuk menolak traffic:

    • configuredAction harus cocok dengan tindakan yang dikonfigurasi dalam aturan.
    • name harus cocok dengan nama kebijakan keamanan Cloud Armor yang dilampirkan ke layanan backend ini.
    • outcome harus cocok dengan configuredAction.
    • priority harus cocok dengan nomor prioritas aturan.
      httpRequest:
       remoteIp: 104.133.0.95
       requestMethod: GET
       requestSize: '801'
       requestUrl: http://74.125.67.38/
       responseSize: '246'
       serverIp: 10.132.0.4
       status: 200
       userAgent: curl/7.35.0
         insertId: ajvis5ev4i60
         internalId:
           projectNumber: '895280006100'
         jsonPayload:
           '@type': type.googleapis.com/google.cloud.loadbalancing.type.LoadBalancerLogEntry
           enforcedSecurityPolicy:
             configuredAction: ACCEPT
             name: mydev-policy-log-test1
             outcome: ACCEPT
             priority: 2147483647
           statusDetails: response_sent_by_backend
         logName: projects/mydev-staging/logs/requests
         resource:
           labels:
             backend_service_name: BACKEND_SERVICE_NAME
             forwarding_rule_name: FORWARDING_RULE_NAME
             project_id: PROJECT_ID
             target_proxy_name: TARGET_HTTP_PROXY_NAME
             url_map_name: URL_MAP_NAME
             zone: global
           type: http_load_balancer
         severity: INFO
         timestamp: '2017-04-18T18:57:05.845960288Z'
    
  3. Tinjau hierarki aturan untuk memastikan aturan yang benar telah cocok. Mungkin ada aturan prioritas yang lebih tinggi dengan tindakan izinkan yang cocok dengan traffic Anda. Gunakan perintah describe pada security-policies di Google Cloud CLI untuk melihat isi kebijakan keamanan Cloud Armor.

    Misalnya, contoh berikut menunjukkan bagaimana aturan izin dengan prioritas lebih tinggi (pada prioritas 100) cocok dengan traffic yang berasal dari alamat IP 1.2.3.4, sehingga mencegah aturan penolakan dengan prioritas lebih rendah (pada prioritas 200) untuk aktif dan memblokir traffic.

    gcloud compute security-policies describe POLICY_NAME
    

    Output:

      creationTimestamp: '2017-04-18T14:47:58.045-07:00
      description: ''
      fingerprint: Yu5spBjdoC0=
      id: '2560355463394441057'
      kind: compute#securityPolicy
      name: POLICY_NAME
      rules:
      -action: allow
       description: allow high priority rule
       kind: compute#securityPolicyRule
       match:
         srcIpRanges:
         -'1.2.3.4/32'
       preview: false
       priority: 100
      -action: deny
       description: deny lower priority rule
       kind: compute#securityPolicyRule
       match:
         srcIpRanges:
         -'1.2.3.0/24
       preview: false
       priority: 200
      -action: deny
       description: default rule
       kind: compute#securityPolicyRule
       match:
         srcIpRanges:
         -'*'
       preview: false
       priority: 2147483647
       selfLink: http://www.googleapis.com/compute/v1/projects/bigclustertestdev0-devconsole/global/securityPolicies/sp
    

Aturan yang telah dikonfigurasi sebelumnya menampilkan positif palsu

Deteksi XSS dan SQLi didasarkan pada pencocokan signature statis pada header permintaan HTTP dan parameter L7 lainnya. Pola ekspresi reguler ini rentan terhadap positif palsu. Anda dapat menggunakan aturan yang telah dikonfigurasi sebelumnya untuk deteksi XSS dan SQLi dalam mode pratinjau, lalu memeriksa log untuk mengetahui apakah ada positif palsu.

Jika menemukan positif palsu, Anda dapat membandingkan konten traffic dengan aturan OWASP CRS. Jika aturan tidak valid atau tidak relevan, nonaktifkan menggunakan ekspresi evaluatePreconfiguredWaf, dan tentukan ID aturan dalam argumen exclude ID list.

Setelah meninjau log dan menghapus semua positif palsu, nonaktifkan mode pratinjau.

Untuk menambahkan aturan yang telah dikonfigurasi sebelumnya dalam mode pratinjau:

  1. Buat kebijakan keamanan dengan serangkaian ekspresi yang telah dikonfigurasi sebelumnya dalam mode pratinjau:

    gcloud compute security-policies rules create 1000
       --security-policy POLICY_NAME
       --expression "evaluatePreconfiguredWaf('xss-stable')"
       --action deny-403
       --preview
    
  2. Tinjau log HTTP(S) untuk kolom permintaan HTTP seperti url dan cookie. Misalnya, requestUrl membandingkan secara positif dengan aturan OWASP CRS ID 941180:

    httpRequest:
      remoteIp: 104.133.0.95
      requestMethod: GET
      requestSize: '801'
      requestUrl: http://74.125.67.38/foo?document.cookie=1010"
      responseSize: '246'
      serverIp: 10.132.0.4
      status: 200
      userAgent: curl/7.35.0
    insertId: ajvis5ev4i60
    internalId:
      projectNumber: '895280006100'
    jsonPayload:
      '@type': type.googleapis.com/google.cloud.loadbalancing.type.LoadBalancerLogEntry
      enforcedSecurityPolicy:
        configuredAction: ACCEPT
        name: POLICY_NAME
        outcome: ACCEPT
        priority: 2147483647
        preconfiguredExprIds: [ 'owasp-crs-v030001-id941180-xss' ]
      statusDetails: response_sent_by_backend
    logName: projects/mydev-staging/logs/requests
    resource:
      labels:
        backend_service_name: BACKEND_SERVICE
        forwarding_rule_name: mydev-forwarding-rule
        project_id: mydev-staging
        target_proxy_name: mydev-target-http-proxy
        url_map_name: mydev-url-map
        zone: global
      type: http_load_balancer
    severity: INFO
    timestamp: '2017-04-18T18:57:05.845960288Z'
    
  3. Kecualikan aturan OWASP CRS ID 941180 dengan memperbarui aturan tersebut dalam kebijakan keamanan Cloud Armor:

    gcloud compute security-policies rules update 1000 \
        --security-policy POLICY_NAME \
        --expression "evaluatePreconfiguredWaf('xss-stable', ['owasp-crs-v030001-id941180-xss'])" \
        --action deny-403 \
        --preview
    
  4. Tinjau kembali log, lalu nonaktifkan mode pratinjau untuk menerapkan aturan.

Klien dengan signature yang ditolak tidak diblokir atau ditolak

Jika Anda menggunakan Cloud Armor bersama Cloud CDN, kebijakan keamanan hanya diterapkan untuk permintaan konten dinamis, cache yang tidak ditemukan, atau permintaan lain yang ditujukan ke server asal CDN. Cache ditemukan akan ditampilkan meskipun kebijakan keamanan Cloud Armor downstream mencegah permintaan tersebut untuk menjangkau server asal CDN.

Masalah terkait pembatasan kapasitas

Traffic tidak di-throttle seperti yang diharapkan

Anda mungkin menemukan bahwa alamat IP klien mengirimkan traffic tingkat tinggi ke aplikasi dengan kecepatan yang melebihi nilai minimum yang Anda tetapkan, tetapi traffic tidak dibatasi seperti yang Anda harapkan. Ikuti langkah-langkah berikut untuk menyelidiki masalah ini.

Pertama, pastikan apakah aturan dengan prioritas lebih tinggi mengizinkan traffic dari alamat IP tersebut. Periksa log untuk melihat apakah aturan ALLOW diaktifkan untuk alamat IP. Ini bisa berupa aturan ALLOW itu sendiri, atau dalam aturan THROTTLE atau RATE_BASED_BAN lainnya.

Jika Anda menemukan aturan dengan prioritas lebih tinggi, lakukan salah satu tindakan berikut:

  1. Ubah prioritas untuk memastikan aturan pembatasan kecepatan memiliki prioritas yang lebih tinggi, dengan menetapkan nilai numerik yang lebih rendah.
  2. Kecualikan alamat IP dari ekspresi yang cocok dalam aturan yang memiliki prioritas lebih tinggi.

Masalahnya juga mungkin karena nilai minimum ditetapkan dengan tidak tepat. Jika demikian, permintaan diproses dengan akurat, namun tindakan untuk permintaan yang sesuai batas tetap dijalankan. Periksa log untuk mengonfirmasi bahwa hal ini terjadi, lalu kurangi nilai minimum dalam aturan Anda.

Terakhir, alamat IP mungkin tidak cocok dengan aturan throttle atau pemblokiran berbasis kapasitas. Untuk mengatasinya, periksa kesalahan dalam kondisi kecocokan, lalu ubah kondisi kecocokan aturan ke nilai yang tepat.

Langkah berikutnya