Konfigurasi yang tidak tepat dari kebijakan otorisasi dapat menyebabkan akses yang tidak terduga ditolak atau diizinkan. Anda dapat menggunakan kebijakan otorisasi Service Mesh (ASM) dalam mode uji coba untuk memverifikasi kebenaran dan keandalannya tanpa memengaruhi lingkungan produksi. Ini mengurangi risiko masalah yang muncul di lingkungan produksi dan memastikan penerapan serta operasi kebijakan berjalan lancar.
Prasyarat
Sebuah klaster telah ditambahkan ke instance ASM, dan versi instance ASM adalah 1.14 atau lebih baru. Untuk informasi lebih lanjut tentang cara memperbarui instance ASM, lihat Perbarui instance ASM.
Namespace contoh bernama foo telah dibuat dan injeksi proxy sidecar otomatis telah diaktifkan. Untuk informasi lebih lanjut, lihat Kelola namespace global.
Informasi latar belakang
ASM memungkinkan Anda mengonfigurasi kebijakan otorisasi untuk mengimplementasikan kontrol akses untuk semua beban kerja atau hanya beban kerja tertentu dalam sebuah namespace. Kebijakan otorisasi mengontrol lalu lintas akses. Jika tidak dikonfigurasi dengan benar, permintaan akses mungkin diizinkan atau ditolak secara tidak terduga. Dalam hal ini, administrator ASM menghadapi tantangan besar. Misalnya, beberapa permintaan akses normal ditolak, sedangkan permintaan akses yang seharusnya ditolak diizinkan. Untuk menyelesaikan masalah ini, ASM menyediakan mode uji coba untuk kebijakan otorisasi. Dalam mode uji coba, kebijakan otorisasi dieksekusi, tetapi mereka tidak mengizinkan atau memblokir lalu lintas. Hanya log eksekusi yang dicatat. Administrator ASM dapat memeriksa apakah hasil eksekusi kebijakan otorisasi sesuai dengan harapan berdasarkan log ini. Jika tidak, mereka dapat menyesuaikan kebijakan otorisasi hingga hasil eksekusi memenuhi harapan dan kemudian menonaktifkan mode uji coba untuk membuat kebijakan otorisasi berlaku.
Dalam contoh ini, dua aplikasi uji, sleep dan HTTPBin, diterapkan. Proses pengujian keseluruhan adalah sebagai berikut: Akses aplikasi HTTPBin menggunakan perintah curl di pod tempat aplikasi sleep berada, verifikasi konektivitas, konfigurasikan kebijakan otorisasi untuk instance ASM untuk menolak permintaan tertentu dan aktifkan mode uji coba, lalu inisiasi permintaan yang memenuhi kondisi penolakan kebijakan otorisasi. Dalam mode uji coba, permintaan tidak ditolak dan proxy sidecar menghasilkan log eksekusi kebijakan otorisasi. Setelah Anda mengonfirmasi bahwa hasil eksekusi kebijakan otorisasi memenuhi harapan Anda, nonaktifkan mode uji coba untuk membuat kebijakan otorisasi berlaku.
Langkah 1: Terapkan aplikasi sleep dan HTTPbin dan uji konektivitasnya
Gunakan konten berikut untuk membuat file sleep.yaml:
Gunakan kubectl untuk terhubung ke klaster dan jalankan perintah berikut untuk menerapkan aplikasi sleep di namespace foo.
Untuk informasi lebih lanjut tentang cara menggunakan kubectl untuk terhubung ke klaster, lihat Dapatkan file kubeconfig klaster dan gunakan kubectl untuk terhubung ke klaster.
kubectl apply -f sleep.yaml -n fooGunakan konten berikut untuk membuat file httpbin.yaml:
Jalankan perintah berikut untuk menerapkan aplikasi HTTPBin di namespace foo:
kubectl apply -f httpbin.yaml -n fooJalankan perintah berikut untuk menguji konektivitas antara aplikasi sleep dan aplikasi HTTPBin:
for i in {1..20}; do kubectl exec "$(kubectl get pod -l app=sleep -n foo -o jsonpath={.items..metadata.name})" -c sleep -n foo -- curl http://httpbin.foo:8000/headers -s -o /dev/null -w "%{http_code}\n"; doneOutput yang diharapkan:
200 200 200 ...Output menunjukkan bahwa ketika Anda mengakses aplikasi HTTPBin sebanyak 20 kali dengan menjalankan perintah curl di pod tempat aplikasi sleep berada, kode status yang dikembalikan selalu 200. Ini menunjukkan bahwa koneksi jaringan normal.
Langkah 2: Buat kebijakan otorisasi dan aktifkan mode uji coba
Masuk ke Konsol ASM. Di panel navigasi sisi kiri, pilih .
Di halaman Mesh Management, klik nama instance ASM. Di panel navigasi sisi kiri, pilih . Di halaman yang muncul, klik Create.
Di halaman Create, konfigurasikan parameter berikut dan klik Create.

Langkah 3: Amati hasil eksekusi kebijakan otorisasi
Jalankan perintah berikut lagi untuk mengakses aplikasi HTTPBin dari pod tempat aplikasi sleep berada:
for i in {1..20}; do kubectl exec "$(kubectl get pod -l app=sleep -n foo -o jsonpath={.items..metadata.name})" -c sleep -n foo -- curl http://httpbin.foo:8000/headers -s -o /dev/null -w "%{http_code}\n"; doneOutput yang diharapkan:
200 200 200 ...Output menunjukkan bahwa permintaan akses masih diizinkan karena kebijakan otorisasi sedang berjalan dalam mode uji coba.
Jalankan perintah berikut untuk menyesuaikan level log kontrol akses berbasis peran (RBAC) dari proxy sidecar aplikasi HTTPBin ke Debug:
kubectl exec "$(kubectl get pod -l app=httpbin -n foo -o jsonpath={.items..metadata.name})" -c istio-proxy -n foo -- curl -X POST 127.0.0.1:15000/logging?rbac=debugOutput yang diharapkan:
% Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0active loggers: ... rbac: debug ... 100 1028 0 1028 0 0 1003k 0 --:--:-- --:--:-- --:--:-- 1003kJalankan perintah berikut untuk memfilter log uji coba kebijakan otorisasi dari proxy sidecar aplikasi HTTPBin:
kubectl logs "$(kubectl -n foo -l app=httpbin get pods -o jsonpath={.items..metadata.name})" -c istio-proxy -n foo | grep "shadow denied"Output berikut menunjukkan log pemblokiran:
2023-12-20T03:58:47.107915Z debug envoy rbac external/envoy/source/extensions/filters/http/rbac/rbac_filter.cc:130 shadow denied, matched policy ns[foo]-policy[test]-rule[0] thread=32 2023-12-20T03:58:48.800098Z debug envoy rbac external/envoy/source/extensions/filters/http/rbac/rbac_filter.cc:130 shadow denied, matched policy ns[foo]-policy[test]-rule[0] thread=33 2023-12-20T03:58:50.420179Z debug envoy rbac external/envoy/source/extensions/filters/http/rbac/rbac_filter.cc:130 shadow denied, matched policy ns[foo]-policy[test]-rule[0] thread=32
Langkah 4: Nonaktifkan mode uji coba
Setelah Anda menentukan bahwa hasil eksekusi kebijakan otorisasi memenuhi harapan berdasarkan log, Anda dapat menonaktifkan mode uji coba untuk membuat kebijakan otorisasi berlaku.
Masuk ke Konsol ASM. Di panel navigasi sisi kiri, pilih .
Di halaman Mesh Management, klik nama instance ASM. Di panel navigasi sisi kiri, pilih .
Di halaman AuthorizationPolicy, temukan kebijakan otorisasi yang Anda buat di Langkah 2, matikan sakelar di kolom Commissioning mode, lalu klik OK di pesan Submit untuk menonaktifkan mode uji coba.
Jalankan perintah berikut untuk menginisiasi permintaan akses lagi:
for i in {1..20}; do kubectl exec "$(kubectl get pod -l app=sleep -n foo -o jsonpath={.items..metadata.name})" -c sleep -n foo -- curl http://httpbin.foo:8000/headers -s -o /dev/null -w "%{http_code}\n"; doneOutput yang diharapkan:
403 403 403 ...Output menunjukkan bahwa permintaan akses ditolak dan 403 dikembalikan karena kebijakan otorisasi berlaku.
Jalankan perintah berikut untuk mengembalikan level log proxy sidecar ke Warning:
kubectl exec "$(kubectl get pod -l app=httpbin -n foo -o jsonpath={.items..metadata.name})" -c istio-proxy -n foo -- curl -X POST 127.0.0.1:15000/logging?rbac=warningOutput yang diharapkan:
% Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0active loggers: ... rbac: warning ... 100 1028 0 1028 0 0 1003k 0 --:--:-- --:--:-- --:--:-- 1003k
Referensi
Jika Anda perlu melakukan manajemen RAM dan izin pada beban kerja di klaster, Anda dapat menggunakan kebijakan otorisasi untuk menetapkan kondisi akses untuk beban kerja tersebut, seperti membatasi jalur permintaan, metode permintaan, dan alamat IP klien. Ini memastikan bahwa hanya permintaan yang memenuhi persyaratan tertentu yang dapat mengakses beban kerja. Untuk informasi lebih lanjut, lihat Konfigurasikan kebijakan otorisasi untuk kontrol akses pada beban kerja.
Jika Anda perlu melakukan RAM yang lebih rinci untuk permintaan HTTP atau TCP layanan-ke-layanan, Anda dapat mengonfigurasi kebijakan otorisasi untuk permintaan tersebut. Untuk informasi lebih lanjut, lihat Konfigurasikan kebijakan otorisasi untuk permintaan HTTP dan Konfigurasikan kebijakan otorisasi untuk permintaan TCP.
Untuk informasi lebih lanjut tentang cara mengontrol lalu lintas akses dari layanan di instance ASM ke layanan eksternal, lihat Gunakan kebijakan otorisasi untuk mengontrol lalu lintas akses dari layanan di instance ASM ke situs web eksternal dan Gunakan kebijakan otorisasi untuk mengontrol lalu lintas akses dari layanan di instance ASM ke database eksternal.
Anda dapat menyesuaikan isi log akses gateway ASM untuk mendeteksi potensi risiko keamanan secara tepat waktu. Untuk informasi lebih lanjut, lihat Konfigurasikan fitur pembuatan dan pengumpulan log akses gateway ASM.
Anda dapat mengaktifkan fitur audit mesh untuk mencatat atau melacak operasi harian dari pengguna yang berbeda. Anda juga dapat mengonfigurasi peringatan audit untuk operasi pada sumber daya ASM dan mengirim notifikasi peringatan kepada kontak peringatan secara tepat waktu ketika sumber daya penting berubah. Untuk informasi lebih lanjut, lihat Gunakan fitur audit operasi KubeAPI di ASM dan Konfigurasikan peringatan audit untuk operasi pada sumber daya ASM.