Mengonfigurasi fitur lanjutan kebijakan otorisasi

Kebijakan otorisasi Anthos Service Mesh menyediakan kontrol akses level mesh, namespace, dan workload untuk workload Anda di mesh. Halaman ini menjelaskan detail cara mengonfigurasi fitur lanjutan kebijakan otorisasi Anthos Service Mesh, termasuk mode uji coba dan pencatatan log. Fitur yang dijelaskan di halaman ini mengasumsikan bahwa Anda sudah memahami konsep kebijakan otorisasi dasar yang dijelaskan dalam Ringkasan kebijakan otorisasi.

Mode uji coba

Kebijakan otorisasi Anthos Service Mesh mendukung mode uji coba, yang memungkinkan Anda menguji kebijakan otorisasi dengan traffic produksi sebenarnya tanpa menerapkannya. Mode uji coba memungkinkan Anda lebih memahami efek kebijakan otorisasi sebelum menerapkannya. Hal ini membantu mengurangi risiko pelanggaran traffic produksi yang disebabkan oleh kebijakan otorisasi yang salah.

Anda dapat menggunakan anotasi "istio.io/dry-run": "true" dalam kebijakan otorisasi untuk mengubahnya ke mode uji coba.

Contoh mode uji coba

Contoh berikut, deny-path-headers, menunjukkan kebijakan dengan anotasi dry-run yang disetel ke "true. Kebijakan otorisasi akan menolak permintaan ke jalur headers dan mengizinkan semua permintaan lainnya.

apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:
  name: deny-path-headers
  annotations:
    "istio.io/dry-run": "true"
spec:
  selector:
    matchLabels:
      app: httpbin
  action: DENY
  rules:
  - to:
    - operation:
        paths: ["/headers"]

Saat Anda menerapkan kebijakan otorisasi dalam mode uji coba, Anthos Service Mesh akan mencatat hasil penerapan ke dalam log ke Cloud Logging, tetapi tidak menerapkan kebijakan tersebut. Permintaan ini selalu diizinkan, dan Anda dapat memeriksa Logs Explorer untuk menentukan apakah kebijakan otorisasi berfungsi seperti yang diharapkan atau tidak.

Detail logging uji coba

Setelah menerapkan kebijakan otorisasi dalam mode uji coba, Anda dapat melihat hasil kebijakan di Logs Explorer.

  1. Buka Logs Explorer. Di URL berikut, ganti PROJECT_ID dengan project ID Anda:

    https://console.cloud.google.com/logs/query?project=PROJECT_ID
    
  2. Di kolom Query-builder, masukkan kueri untuk menemukan kebijakan otorisasi mode uji coba. Dalam kueri berikut, ganti NAMESPACE dengan namespace Anda:

    logName="projects/PROJECT_ID/logs/server-accesslog-stackdriver" labels.destination_namespace="NAMESPACE" labels.dry_run_result="AuthzDenied"
    
  3. Klik Jalankan kueri.

  4. Sesuaikan rentang waktu sesuai kebutuhan.

Screenshot berikut menunjukkan label uji coba di log traffic di Logs Explorer setelah contoh kebijakan deny-path-headers diterapkan:

gambar

Mode uji coba mendukung kebijakan otorisasi ALLOW dan DENY, selain hasil uji coba Istio. Anthos Service Mesh menyimpan hasil uji coba ke Cloud Logging dalam label berikut:

  • dry_run_result: Hasil uji coba adalah "AuthzAllowed" atau "AuthzDenied".
  • dry_run_policy_name: Namespace dan nama kebijakan otorisasi yang cocok yang menentukan keputusan uji coba.
  • dry_run_policy_rule: Indeks aturan kebijakan otorisasi yang cocok yang mengambil keputusan uji coba.

Tabel berikut menunjukkan detail yang dicatat dalam log untuk kebijakan otorisasi dalam mode uji coba:

Kebijakan otorisasi diterapkan dalam mode uji coba Hasil pencocokan Hasil uji coba Cloud Logging
Hanya kebijakan DENY Tidak Cocok diizinkan dry_run_result: "AuthzAllowed"
Cocok ditolak dry_run_result: "AuthzDenied"
dry_run_policy_name: .
dry_run_policy_rule:
Hanya kebijakan ALLOW Tidak Cocok ditolak dry_run_result: "AuthzDenied"
Cocok diizinkan dry_run_result: "AuthzAllowed"
dry_run_policy_name: .
dry_run_policy_rule:
Kebijakan ALLOW dan DENY Tidak Cocok ditolak dry_run_result: "AuthzDenied"
Hanya kebijakan DENY yang cocok ditolak dry_run_result: "AuthzDenied"
dry_run_policy_name: .
dry_run_policy_rule:
Hanya kebijakan ALLOW yang cocok diizinkan dry_run_result: "AuthzAllowed"
dry_run_policy_name: .
dry_run_policy_rule:
Cocok dengan kedua kebijakan ditolak dry_run_result: "AuthzDenied"
dry_run_policy_name: .
dry_run_policy_rule:

Jika sudah yakin dengan hasil uji coba, Anda dapat menonaktifkan mode uji coba menggunakan salah satu pendekatan berikut:

  • Menghapus anotasi uji coba sepenuhnya; atau

  • Ubah nilai anotasi uji coba menjadi false.

Setelah Anda menerapkan kebijakan dengan mode uji coba dinonaktifkan, Anthos Service Mesh akan menerapkan kebijakan tersebut.

Logging penolakan

Kebijakan otorisasi menolak permintaan jika tidak diizinkan oleh kebijakan. Untuk protokol HTTP (termasuk gRPC), permintaan ditolak dengan kode status 403. Untuk protokol non-HTTP, koneksi diakhiri secara langsung. Log traffic Cloud Logging menyertakan informasi tambahan yang berguna untuk memahami alasan traffic ditolak. Misalnya, log menunjukkan jumlah permintaan yang ditolak oleh kebijakan otorisasi, yang dapat membantu Anda menentukan aturan kebijakan mana yang menyebabkan penolakan versus penolakan dari aplikasi backend.

Pada contoh berikut, anotasi dry-run disetel ke "false. Saat Anda menerapkan kebijakan otorisasi DENY, Anthos Service Mesh akan menerapkannya.

apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:
  name: deny-path-headers
  annotations:
    "istio.io/dry-run": "false"
spec:
  selector:
    matchLabels:
      app: httpbin
  action: DENY
  rules:
  - to:
    - operation:
        paths: ["/headers"]

Setelah menerapkan kebijakan otorisasi DENY, Anda dapat melihat hasil kebijakan tersebut di Logs Explorer.

  1. Buka Logs Explorer. Di URL berikut, ganti PROJECT_ID dengan project ID Anda:

    https://console.cloud.google.com/logs/query?project=PROJECT_ID
    
  2. Di kolom Query-builder, masukkan kueri untuk menemukan kebijakan otorisasi DENY. Dalam kueri berikut, ganti NAMESPACE dengan namespace Anda:

    logName="projects/PROJECT_ID/logs/server-accesslog-stackdriver" labels.destination_namespace="NAMESPACE" labels.response_details="AuthzDenied"
    
  3. Klik Jalankan kueri.

  4. Sesuaikan rentang waktu sesuai kebutuhan.

Screenshot berikut menunjukkan entri log di Logs Explorer setelah contoh kebijakan deny-path-headers diterapkan untuk menerapkan kebijakan. Anda dapat mengetahui bahwa kebijakan otorisasi menyebabkan error 403 dengan melihat labelnya:

gambar

Log traffic Logs Explorer menyertakan label berikut untuk penolakan otorisasi:

  • response_details: Disetel ke "AuthzDenied" jika penolakan disebabkan oleh kebijakan otorisasi.
  • policy_name: Berisi namespace dan nama kebijakan DENY otorisasi yang menyebabkan penolakan. Nilai dalam format <Namespace>.<Name>, misalnya, foo.deny-path-headers berarti kebijakan otorisasi deny-path-headers dalam namespace foo.
  • policy_rule: Berisi indeks aturan di dalam kebijakan otorisasi yang menyebabkan penolakan. Misalnya, 0 berarti aturan pertama dalam kebijakan.

Apa langkah selanjutnya?

Untuk melihat daftar semua kebijakan otorisasi dalam mesh layanan:

kubectl get authorizationpolicy --all-namespaces

Jika ada kebijakan otorisasi yang berlaku, Anda dapat menghapusnya dengan kubectl delete:

kubectl delete authorizationpolicy -n NAMESPACE AUTH_POLICY_NAME

Untuk mengetahui informasi selengkapnya tentang cara mendapatkan log traffic, baca artikel Mengakses log di Cloud Logging.