Mengonfigurasi kebijakan audit untuk layanan Anda

Tutorial ini hanya mendukung implementasi bidang kontrol dalam cluster.

Dengan kebijakan audit, Anda dapat mengaudit akses data ke layanan Anda di Cloud Service Mesh. Mengaudit layanan membantu Anda menjawab pertanyaan "siapa melakukan apa, kapan, dan mungkin mengapa". Dengan kebijakan audit, Anda dapat menentukan kapan log audit dibuat dan konten log. Panduan ini menjelaskan cara menginstal Cloud Service Mesh agar Anda dapat menggunakan kebijakan audit.

Karena Anda melihat log audit di Logs Explorer Cloud Logging di Konsol Google Cloud, kebijakan audit hanya didukung di platform berikut:

  • GKE di Google Cloud
  • GKE on VMware
  • Google Distributed Cloud Virtual untuk Bare Metal

Kebijakan audit memperluas AuthorizationPolicy dengan menambahkan tindakan AUDIT. Ini hanya berlaku dalam cakupan kebijakan targetnya (yang dapat berupa beban kerja, namespace, atau seluruh mesh). Kebijakan ini digabungkan dalam ORed, artinya, permintaan akan dicatat ke dalam log jika ada kebijakan yang menyatakan demikian. Jika tidak ada kebijakan audit yang berlaku untuk beban kerja tertentu, log audit tidak akan dibuat untuk beban kerja tersebut.

Berikut adalah contoh kebijakan audit untuk mengaudit semua akses TULIS ke jalur /user/profile/* di myapi:

  apiVersion: security.istio.io/v1beta1
  kind: AuthorizationPolicy
  metadata:
    namespace: ns1
    name: anyname
  spec:
    selector:
      matchLabels:
        app: myapi
    action: AUDIT
    rules:
    - to:
      - operation:
          methods: ["POST", "UPDATE", "DELETE"]
          paths: ["/user/profile/*"]

Batasan

  • Tidak ada log audit di ingress-gateway.
  • Konten audit tidak dapat dikonfigurasi.
  • Saat ini, log audit Cloud Service Mesh memiliki properti keandalan yang sama seperti log akses normal. Misalnya, jika Pod beban kerja dimulai ulang, beberapa log audit untuk beban kerja tersebut, jika tidak dipertahankan, dapat hilang.

Sebelum memulai

Ikuti langkah-langkah di bagian Menginstal alat dependen dan memvalidasi cluster untuk:

Menyiapkan konfigurasi gateway

Cloud Service Mesh memberi Anda opsi untuk men-deploy dan mengelola gateway sebagai bagian dari mesh layanan Anda. Gateway menjelaskan load balancer yang beroperasi di edge mesh yang menerima koneksi HTTP/TCP masuk atau keluar. Gateway adalah proxy Envoy yang memberi Anda kontrol terperinci atas traffic yang masuk dan meninggalkan mesh.

asmcli tidak menginstal istio-ingressgateway. Sebaiknya deploy serta kelola bidang kontrol dan gateway secara terpisah. Untuk mengetahui informasi selengkapnya, lihat Menginstal dan mengupgrade gateway.

Menyesuaikan penginstalan Cloud Service Mesh

Untuk menggunakan kebijakan audit, sesuaikan penginstalan Cloud Service Mesh:

Penginstalan

  1. Ikuti langkah-langkah di bagian Menginstal Cloud Service Mesh. Saat Anda menjalankan asmcli install, sertakan opsi berikut:

    --option audit-authorizationpolicy
    

    Contoh:

    ./asmcli install \
      --project_id PROJECT_ID \
      --cluster_name CLUSTER_NAME \
      --cluster_location CLUSTER_LOCATION \
      --ca mesh_ca \
      --output_dir DIR_PATH  \
      --enable_all \
      --option audit-authorizationpolicy
    

    Pastikan untuk menentukan file overlay lain yang diperlukan untuk mengonfigurasi Cloud Service Mesh.

  2. Selesaikan penginstalan Cloud Service Mesh untuk mengaktifkan injeksi proxy file bantuan otomatis pada workload Anda. Lihat Men-deploy dan men-deploy ulang workload.

Upgrade

  1. Ikuti langkah-langkah di bagian Mengupgrade Cloud Service Mesh. Saat Anda menjalankan asmcli install, sertakan opsi berikut:

    --option audit-authorizationpolicy
    

    Contoh:

    ./asmcli install \
      --project_id PROJECT_ID \
      --cluster_name CLUSTER_NAME \
      --cluster_location CLUSTER_LOCATION \
      --ca mesh_ca \
      --output_dir DIR_PATH  \
      --enable_all \
      --option audit-authorizationpolicy
    

    Pastikan untuk menentukan file overlay lain yang diperlukan untuk mengonfigurasi Cloud Service Mesh.

  2. Selesaikan penginstalan Cloud Service Mesh untuk mengaktifkan injeksi proxy file bantuan otomatis pada workload Anda. Untuk mengetahui detailnya, lihat Beralih ke bidang kontrol baru

Menggunakan logging audit

Bagian ini menggunakan contoh Bookinfo untuk menunjukkan cara menggunakan logging audit.

  1. Deploy aplikasi contoh Bookinfo ke namespace default.

  2. Mendapatkan alamat IP eksternal gateway masuk dan kirim permintaan ke aplikasi contoh untuk menghasilkan traffic tertentu.

  3. Di konsol Google Cloud, buka menu navigasi dan pilih Logging > Logs Explorer:

    Buka Logs Explorer

  4. Pilih project Google Cloud.

  5. Karena Anda belum men-deploy kebijakan audit, tidak akan ada log audit. Perhatikan bahwa log audit berbeda dengan log akses. Untuk melihat log akses stackdriver, masukkan kueri berikut di kolom Pembuat kueri, lalu klik Jalankan kueri:

    logName="projects/PROJECT_ID/logs/server-accesslog-stackdriver"
    

    Untuk mengetahui informasi selengkapnya tentang penggunaan Logs Explorer, lihat Ringkasan Logs Explorer.

Mengonfigurasi kebijakan audit dan memeriksa log audit

Bagian ini menyediakan beberapa opsi untuk mengaudit aplikasi Bookinfo. Setelah men-deploy kebijakan audit, Anda dapat mengirim beberapa permintaan, lalu memeriksa log audit di Logs Explorer.

  1. Masukkan perintah berikut untuk mendapatkan kredensial autentikasi agar dapat berinteraksi dengan cluster. Perintah ini juga menetapkan konteks saat ini untuk kubectl ke cluster.

    gcloud container clusters get-credentials CLUSTER_NAME \
        --project=PROJECT_ID \
        --zone=CLUSTER_LOCATION
    
  2. Terapkan kebijakan audit berikut untuk mengaudit permintaan GET ke jalur /productpage:

    kubectl apply -f - << EOF
    apiVersion: "security.istio.io/v1beta1"
    kind: "AuthorizationPolicy"
    metadata:
      name: "audit-productpage"
      namespace: default
    spec:
      action: AUDIT
      rules:
      - to:
        - operation:
            methods: ["GET"]
            paths: ["/productpage"]
    EOF
    
  3. Kirim beberapa permintaan ke Bookinfo.

  4. Di Logs Explorer, masukkan kueri berikut di kolom Query builder, lalu klik Run query:

    logName="projects/PROJECT_ID/logs/server-istio-audit-log"
    

    Kueri menampilkan log yang mirip dengan yang berikut ini:

    gambar

  5. Terapkan kebijakan berikut untuk mengaudit permintaan ke layanan bookinfo-ratings. Kebijakan audit bersifat tambahan. Setelah menerapkan kebijakan berikut, Anda akan melihat log audit untuk permintaan ke ProductPage dan Ratings.

    kubectl apply -f - << EOF
    apiVersion: "security.istio.io/v1beta1"
    kind: "AuthorizationPolicy"
    metadata:
      name: "audit-ratings"
      namespace: default
    spec:
      action: AUDIT
      rules:
      - from:
        - source:
            principals: ["cluster.local/ns/default/sa/bookinfo-ratings"]
        to:
        - operation:
            methods: ["GET"]
    EOF
    

    Kebijakan audit baru harus diterapkan terlebih dahulu sebelum diterapkan.

  6. Kirim 10 permintaan atau lebih ke Bookinfo untuk memastikan Anda menekan layanan rating, lalu periksa log audit di Logs Explorer. Log audit terlihat mirip dengan yang berikut ini:

    gambar

  7. Terapkan kebijakan berikut untuk mengaudit semua layanan di namespace default.

    kubectl apply -f - << EOF
    apiVersion: security.istio.io/v1beta1
    kind: AuthorizationPolicy
    metadata:
      namespace: default
      name: "audit-all"
    spec:
      action: AUDIT
      rules:
        - {}
    EOF
    
  8. Kirim beberapa permintaan lainnya ke Bookinfo, lalu periksa log audit di Logs Explorer. Log audit kini mencatat semua permintaan:

    gambar

  9. Jika ingin membatasi kebijakan audit kembali ke ProductPage dan Ratings, Anda dapat menghapus kebijakan audit-all:

    kubectl delete authorizationpolicy audit-all -n default
    

Pemecahan masalah

Jika Anda tidak melihat log audit apa pun setelah mengaktifkan kebijakan audit, berikut beberapa hal yang dapat Anda periksa:

  1. Pastikan ada traffic untuk jangka waktu yang ditentukan di Logs Explorer. Jika melakukan pengujian dengan Bookinfo, Anda dapat mengirim permintaan dengan menjalankan perintah berikut beberapa kali:

    curl -s http://EXTERNAL_IP/productpage | grep Bookstore
    
  2. Periksa apakah ada AuthorizationPolicy di gateway masuk yang memblokir permintaan ke layanan yang diaudit.

  3. Periksa log akses stackdriver dengan filter berikut di Logs Explorer untuk memverifikasi apakah permintaan Anda telah diterima aplikasi:

    logName="projects/PROJECT_ID/logs/server-accesslog-stackdriver"
    

    gambar

  4. Untuk memastikan Stackdriver dikonfigurasi dan log audit diaktifkan, hapus konfigurasi status istiod saat ini. Di config_dump, telusuri enable_audit_log dan nama kebijakan audit Anda.

    istioctl dashboard envoy POD_NAME.NAMESPACE
    

    gambar gambar gambar

  5. Untuk memastikan permintaan Anda cocok dengan aturan kebijakan audit, Anda dapat memeriksa log debug kontrol akses berbasis peran (RBAC). Aktifkan logging debug RBAC dengan perintah berikut:

    kubectl exec POD_NAME -n NAMESPACE -c istio-proxy -- pilot-agent request POST 'logging?rbac=debug'
    
  6. Kirim beberapa permintaan, lalu periksa log untuk Pod dengan perintah kubectl logs:

    kubectl logs POD_NAME -n NAMESPACE -c istio-proxy
    

Langkah selanjutnya