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 Menggunakan logging permintaan, lalu aktifkan logging verbose. Cloud Logging mencatat tingkat detail yang lebih tinggi dalam log yang dapat Anda gunakan untuk menganalisis dan men-debug kebijakan dan aturan.

Traffic diizinkan meskipun aturan penolakan dikonfigurasi dalam kebijakan keamanan Cloud Armor

Untuk memperbaikinya, ikuti langkah-langkah berikut:

  1. Pastikan kebijakan keamanan Cloud Armor terpasang ke layanan backend target. Misalnya, perintah berikut menjelaskan 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 terkait. Untuk melihat log, gunakan Cloud Logging.

    Berikut adalah contoh log permintaan yang diizinkan dengan kolom yang relevan ditandai. Periksa kolom berikut dan pastikan kolom tersebut 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 sesuai dengan angka 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 cocok sudah benar. Kemungkinan ada aturan dengan prioritas yang lebih tinggi dan tindakan izinkan yang cocok dengan traffic Anda. Gunakan perintah describe pada security-policies di Google Cloud CLI untuk melihat konten kebijakan keamanan Cloud Armor.

    Misalnya, contoh berikut menunjukkan cara aturan izinkan dengan prioritas lebih tinggi (pada prioritas 100) mencocokkan traffic yang berasal dari alamat IP 1.2.3.4, sehingga mencegah aturan tolak dengan prioritas lebih rendah (pada prioritas 200) dipicu 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 tanda tangan 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 dengan 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 set 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 dibandingkan secara positif dengan ID aturan OWASP CRS 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 ID aturan OWASP CRS 941180 dengan memperbarui aturan 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 log lagi, lalu nonaktifkan mode pratinjau untuk menerapkan aturan.

Klien dengan tanda tangan yang ditolak tidak diblokir atau ditolak

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

Masalah terkait pembatasan kecepatan

Traffic tidak dibatasi seperti yang diharapkan

Anda mungkin mendapati 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, konfirmasi apakah aturan dengan prioritas lebih tinggi mengizinkan traffic dari alamat IP tersebut. Periksa log untuk melihat apakah aturan ALLOW dipicu 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 yang lebih tinggi, lakukan salah satu tindakan berikut:

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

Masalahnya juga mungkin karena nilai minimum ditetapkan secara keliru. Jika demikian, permintaan akan dicocokkan secara akurat, tetapi tindakan sesuai akan dipicu. Periksa log untuk mengonfirmasi bahwa hal ini terjadi, lalu kurangi nilai minimum dalam aturan Anda.

Terakhir, alamat IP mungkin tidak cocok dengan aturan pembatasan atau larangan berbasis kecepatan. Untuk memperbaiki hal ini, periksa kesalahan dalam kondisi kecocokan, lalu ubah kondisi kecocokan aturan ke nilai yang benar.

Langkah berikutnya