Untuk menerapkan kontrol yang lebih rinci atas permintaan TCP antar layanan, konfigurasikan kebijakan otorisasi untuk mengelola izin interaksi layanan. Ini memastikan bahwa hanya permintaan berwenang yang dapat mengakses layanan tertentu, sehingga meningkatkan keamanan dan keandalan layanan.
Prasyarat
Sumber daya Istio telah didefinisikan. Untuk informasi lebih lanjut, lihat Gunakan sumber daya Istio untuk merutekan lalu lintas ke versi layanan yang berbeda.
Nama ruang foo telah dibuat dan proxy sidecar telah disuntikkan. Untuk informasi lebih lanjut, lihat Buat nama ruang dan Aktifkan injeksi proxy sidecar otomatis.
Langkah 1: Sebarkan aplikasi sampel
Sebarkan aplikasi tcp-echo sebagai layanan TCP yang menerima permintaan dan aplikasi sleep sebagai layanan TCP yang mengirimkan permintaan.
Sebarkan layanan TCP untuk menerima permintaan.
Buat file tcp-echo.yaml dengan konten berikut.
Setelah tcp-echo menerima permintaan, tcp-echo menambahkan isi permintaan dengan awalan
hellodan mengembalikan isi yang telah diberi awalan sebagai respons. Sebagai contoh, jika tcp-echo menerimaworld, makahello worldakan dikembalikan.Gunakan kubectl untuk terhubung ke kluster. Jalankan perintah berikut untuk menyebarkan layanan tcp-echo sebagai layanan TCP untuk menerima permintaan di namespace foo.
Untuk informasi lebih lanjut tentang cara menggunakan kubectl untuk terhubung ke kluster, lihat Dapatkan file kubeconfig dari kluster dan gunakan kubectl untuk terhubung ke kluster.
kubectl apply -f tcp-echo.yaml -n foo
Sebarkan layanan TCP untuk mengirimkan permintaan.
Buat file sleep.yaml dengan konten berikut:
Jalankan perintah berikut untuk menyebarkan layanan sleep di namespace foo untuk mengirimkan permintaan TCP:
kubectl apply -f sleep.yaml -n foo
Langkah 2: Periksa apakah layanan tcp-echo dapat diminta sesuai harapan sebelum kebijakan otorisasi dikonfigurasi
Jalankan perintah berikut untuk memeriksa apakah permintaan dari layanan sleep dapat mengakses layanan tcp-echo melalui port 9000:
kubectl exec "$(kubectl get pod -l app=sleep -n foo -o jsonpath={.items..metadata.name})" -c sleep -n foo -- sh -c 'echo "port 9000" | nc tcp-echo 9000' | grep "hello" && echo 'koneksi berhasil' || echo 'koneksi ditolak'Output yang diharapkan:
hello port 9000 koneksi berhasilOutput ini menunjukkan bahwa permintaan dari layanan sleep dapat mengakses layanan tcp-echo melalui port 9000.
Jalankan perintah berikut untuk memeriksa apakah permintaan dari layanan sleep dapat mengakses layanan tcp-echo melalui port 9001:
kubectl exec "$(kubectl get pod -l app=sleep -n foo -o jsonpath={.items..metadata.name})" -c sleep -n foo -- sh -c 'echo "port 9001" | nc tcp-echo 9001' | grep "hello" && echo 'koneksi berhasil' || echo 'koneksi ditolak'Output yang diharapkan:
hello port 9001 koneksi berhasilOutput ini menunjukkan bahwa permintaan dari layanan sleep dapat mengakses layanan tcp-echo melalui port 9001.
Langkah 3: Konfigurasikan kebijakan otorisasi
Lakukan langkah-langkah berikut untuk mengonfigurasi kebijakan otorisasi agar memperbolehkan permintaan TCP mengakses layanan tcp-echo melalui port 9000:
Masuk ke Konsol ASM. Di panel navigasi kiri, pilih .
Di halaman Mesh Management, klik nama instance ASM. Di panel navigasi kiri, pilih .
Buat kebijakan otorisasi dengan salah satu metode berikut:
PentingSaat mengonfigurasi kebijakan otorisasi untuk permintaan TCP, jangan aktifkan saklar Methods di bagian Tambah Target Permintaan. Saklar ini hanya cocok untuk permintaan HTTP tetapi tidak untuk permintaan TCP. Aturan ALLOW yang diatur menggunakan saklar ini untuk permintaan TCP tidak valid. Service Mesh mengabaikan aturan ALLOW yang tidak valid. Oleh karena itu, jika Anda mengaktifkan saklar ini untuk permintaan TCP, permintaan TCP akan ditolak dan
koneksi ditolakakan dikembalikan.Metode 1: Gunakan YAML untuk membuat kebijakan otorisasi
Di halaman AuthorizationPolicy, klik Create from YAML.
Di halaman Create, pilih foo dari daftar drop-down Namespace, pilih template, salin konten berikut ke editor kode YAML, lalu klik Create.
kind: AuthorizationPolicy apiVersion: security.istio.io/v1beta1 metadata: name: demo namespace: foo spec: action: ALLOW rules: - to: - operation: ports: - '9000'
Metode 2: Gunakan antarmuka pengguna grafis (GUI) untuk membuat kebijakan otorisasi
Di halaman AuthorizationPolicy, klik Create.
Di halaman Create, atur parameter dan klik Create.
Parameter
Deskripsi
Name
Nama kebijakan otorisasi. Dalam contoh ini, nilai diatur menjadi demo.
Policy Type
Tindakan otorisasi. Dalam contoh ini, nilai diatur menjadi ALLOW.
Namespace
Namespace tempat Anda ingin membuat kebijakan otorisasi. Dalam contoh ini, parameter Namespace pada tab Workload Scope diatur menjadi foo.
Effective Scope
Cakupan efektif kebijakan otorisasi. Dalam contoh ini, nilai diatur menjadi Namespace Scope.
Request Matching Rules
Aturan pencocokan permintaan kebijakan otorisasi. Dalam contoh ini, Ports diaktifkan di bagian Add Request Target dan nilainya diatur menjadi 9000.
Langkah 4: Periksa apakah kebijakan otorisasi yang Anda buat berlaku
Jalankan perintah berikut untuk memeriksa apakah permintaan dari layanan sleep dapat mengakses layanan tcp-echo melalui port 9001:
kubectl exec "$(kubectl get pod -l app=sleep -n foo -o jsonpath={.items..metadata.name})" -c sleep -n foo -- sh -c 'echo "port 9001" | nc tcp-echo 9001' | grep "hello" && echo 'koneksi berhasil' || echo 'koneksi ditolak'Output yang diharapkan:
koneksi ditolakOutput ini menunjukkan bahwa permintaan dari layanan sleep gagal mengakses layanan tcp-echo melalui port 9001.
Jalankan perintah berikut untuk memeriksa apakah permintaan dari layanan sleep dapat mengakses layanan tcp-echo melalui port 9000:
kubectl exec "$(kubectl get pod -l app=sleep -n foo -o jsonpath={.items..metadata.name})" -c sleep -n foo -- sh -c 'echo "port 9000" | nc tcp-echo 9000' | grep "hello" && echo 'koneksi berhasil' || echo 'koneksi ditolak'Output yang diharapkan:
hello port 9000 koneksi berhasilOutput ini menunjukkan bahwa permintaan dari layanan sleep dapat mengakses layanan tcp-echo melalui port 9000.
Referensi
Konfigurasi kebijakan otorisasi yang tidak tepat dapat menyebabkan akses yang tidak diinginkan ditolak atau diizinkan. Anda dapat menggunakan kebijakan otorisasi ASM dalam mode uji coba untuk memeriksa apakah hasil eksekusi kebijakan sesuai harapan berdasarkan log. Jika tidak, sesuaikan kebijakan hingga hasilnya sesuai. Setelah itu, nonaktifkan mode uji coba agar kebijakan berlaku. Untuk informasi lebih lanjut, lihat Jalankan kebijakan otorisasi ASM dalam mode uji coba.
Untuk informasi lebih lanjut tentang cara menerapkan kontrol yang lebih rinci atas permintaan HTTP antar layanan, lihat Konfigurasikan kebijakan otorisasi untuk permintaan HTTP.
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 konten log akses gateway ASM untuk mendeteksi risiko keamanan potensial 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 pengguna yang berbeda. Anda juga dapat mengonfigurasi peringatan audit untuk operasi pada sumber daya ASM dan mengirimkan 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.