Secara default, beban kerja dalam Service Mesh (ASM) dapat berkomunikasi satu sama lain. Anda dapat membuat kebijakan otorisasi untuk mengontrol akses dan mengelola izin pada beban kerja dalam kluster. Dengan kebijakan ini, hanya permintaan yang memenuhi persyaratan tertentu yang dapat mengakses beban kerja. Sebagai contoh, Anda dapat mengontrol akses berdasarkan jalur permintaan, metode permintaan, atau alamat IP klien. Hal ini meningkatkan keamanan dan melindungi sumber daya dalam instance ASM.
Prasyarat
Pengenalan fitur
Anda dapat menentukan tindakan CUSTOM, DENY, atau ALLOW dalam kebijakan otorisasi. Ketika beberapa kebijakan diterapkan pada satu beban kerja, prioritas pemeriksaan adalah sebagai berikut: CUSTOM, DENY, lalu ALLOW. Jika terdapat beberapa kebijakan untuk beban kerja, aturan berikut berlaku:
Jika permintaan sesuai dengan kondisi dalam kebijakan CUSTOM yang menolaknya, permintaan akan ditolak.
Jika permintaan sesuai dengan kondisi dalam kebijakan DENY yang menolaknya, permintaan akan ditolak.
Secara default, jika tidak ada kebijakan ALLOW yang dikonfigurasi, permintaan dapat mengakses beban kerja.
Jika kebijakan ALLOW dikonfigurasi dan permintaan sesuai dengan kondisi tersebut, permintaan dapat mengakses beban kerja.
Jika permintaan tidak memenuhi semua persyaratan sebelumnya, permintaan akan ditolak.
Berikut adalah empat contoh untuk membantu Anda memahami dan mengonfigurasi kebijakan otorisasi dengan cepat:
Skenario 1: Kontrol akses ke jalur tertentu dari beban kerja
Dalam contoh ini, kebijakan otorisasi dibuat untuk membatasi aplikasi dalam namespace foo agar hanya dapat mengakses jalur /headers dari aplikasi HTTPBin di namespace foo. Permintaan ke jalur lain akan gagal. Aplikasi di luar namespace foo tidak dapat mengakses aplikasi HTTPBin.
Langkah 1: Aktifkan injeksi proxy sidecar otomatis untuk namespace default dan foo
Buat namespace default dan foo. Untuk informasi lebih lanjut, lihat Buat Namespace.
Aktifkan injeksi proxy sidecar otomatis untuk namespace default dan foo. Untuk informasi lebih lanjut, lihat Aktifkan Injeksi Proxy Sidecar Otomatis.
Langkah 2: Deploy aplikasi uji
Deploy aplikasi sleep di namespace default dan foo.
Buat file sleep.yaml dengan konten berikut:
Jalankan perintah berikut untuk mendeploy aplikasi sleep di namespace default:
kubectl apply -f sleep.yaml -n defaultJalankan perintah berikut untuk mendeploy aplikasi sleep di namespace foo:
kubectl apply -f sleep.yaml -n foo
Deploy aplikasi HTTPBin di namespace foo.
Buat file httpbin.yaml dengan konten berikut:
Jalankan perintah berikut untuk mendeploy aplikasi HTTPBin di namespace foo:
kubectl apply -f httpbin.yaml -n foo
Langkah 3: Buat kebijakan otorisasi
Masuk ke Konsol ASM. Di panel navigasi kiri, pilih .
Di halaman Mesh Management, klik nama instance ASM. Di panel navigasi kiri, pilih . Di halaman yang muncul, klik Create.
Di halaman Create, konfigurasikan parameter yang dijelaskan dalam tabel berikut dan klik Create.
Parameter
Deskripsi
Name
Nama kebijakan otorisasi.
Policy Type
Tindakan otorisasi. Dalam contoh ini, nilainya diatur ke ALLOW.
Namespace
Namespace tempat Anda ingin membuat kebijakan otorisasi. Dalam contoh ini, parameter Namespace di tab Workload Scope diatur ke foo.
Effective Scope
Cakupan efektif kebijakan otorisasi. Dalam contoh ini, nilainya diatur ke Service.
Workload
Beban kerja tempat kebijakan otorisasi berlaku. Dalam contoh ini, nilainya diatur ke httpbin.
Request Matching Rules
Aturan pencocokan permintaan kebijakan otorisasi. Dalam contoh ini, saklar di sebelah Namespaces diaktifkan di bagian Add Request Source dan nilainya diatur ke foo. Pengaturan ini memungkinkan semua aplikasi dalam namespace foo mengakses aplikasi HTTPBin.
Dalam contoh ini, saklar di sebelah Paths diaktifkan di bagian Add Request Target dan nilainya diatur ke /headers. Pengaturan ini memungkinkan aplikasi di semua namespace selain foo mengakses hanya jalur /headers dari aplikasi HTTPBin di namespace foo.
Langkah 4: Periksa apakah kebijakan otorisasi yang mengontrol akses ke jalur tertentu berlaku
Kirim permintaan menggunakan aplikasi sleep di namespace default untuk mengakses aplikasi HTTPBin di namespace foo.
Masuk ke Konsol ACK. Di panel navigasi kiri, klik Clusters.
Di halaman Clusters, temukan kluster yang diinginkan dan klik namanya. Di panel kiri, pilih .
Di bagian atas halaman Pods, pilih default dari daftar drop-down Namespace. Temukan kontainer sleep dalam daftar, klik di kolom Actions.
Jalankan perintah berikut di Terminal kontainer sleep untuk mengakses jalur /headers dari aplikasi HTTPBin:
curl httpbin.foo.svc.cluster.local:8000/headersKode 403 dikembalikan, yang menunjukkan bahwa permintaan ditolak.
Jalankan perintah berikut di Terminal kontainer sleep untuk mengakses jalur /ip dari aplikasi HTTPBin:
curl httpbin.foo.svc.cluster.local:8000/ipKode 403 dikembalikan, yang menunjukkan bahwa permintaan ditolak.
Kirim permintaan menggunakan aplikasi sleep di namespace foo untuk mengakses aplikasi HTTPBin di namespace foo.
Di panel navigasi kiri halaman detail, pilih .
Di bagian atas halaman Pods, pilih foo dari daftar drop-down Namespace. Temukan kontainer sleep dalam daftar, klik di kolom Actions.
Jalankan perintah berikut di Terminal kontainer sleep untuk mengakses jalur /headers dari aplikasi HTTPBin:
curl httpbin.foo.svc.cluster.local:8000/headersOutput yang Diharapkan:
{ "headers": { "Accept": "*/*", "Host": "httpbin.foo.svc.cluster.local:8000", "User-Agent": "curl/7.82.0-DEV", "X-Envoy-Attempt-Count": "1", "X-Forwarded-Client-Cert": "By=spiffe://cluster.local/ns/foo/sa/httpbin;Hash=f7ab4985563b5b1986314d5a36c6e46819213e2f38301f534f00afb7cd4b9164;Subject=\"\";URI=spiffe://cluster.local/ns/foo/sa/sleep" } }Jalankan perintah berikut di Terminal kontainer sleep untuk mengakses jalur /ip dari aplikasi HTTPBin:
curl httpbin.foo.svc.cluster.local:8000/ipKode 403 dikembalikan, yang menunjukkan bahwa permintaan telah ditolak.
Hasil output menunjukkan bahwa aplikasi di namespace default tidak dapat mengakses jalur HTTPBin di namespace foo. Namun, aplikasi di namespace foo dapat mengakses jalur /headers dari aplikasi HTTPBin.
Skenario 2: Kontrol metode permintaan dan akses ke jalur tertentu dari beban kerja
Dalam contoh ini, kebijakan otorisasi dibuat untuk menentukan bahwa aplikasi dalam namespace selain foo hanya dapat mengakses jalur /status dari aplikasi HTTPBin menggunakan permintaan GET. Aplikasi HTTPBin berada di namespace foo. Permintaan ke jalur lain dari aplikasi HTTPBin dan permintaan yang menggunakan metode selain GET akan gagal.
Langkah 1: Aktifkan injeksi proxy sidecar otomatis untuk namespace default dan foo
Buat namespace default dan foo. Untuk informasi lebih lanjut, lihat Buat namespace.
Aktifkan injeksi proxy sidecar otomatis untuk namespace default dan foo. Untuk informasi lebih lanjut, lihat Aktifkan injeksi proxy sidecar otomatis.
Langkah 2: Deploy aplikasi uji
Deploy aplikasi sleep di namespace default dan foo.
Buat file sleep.yaml dengan konten berikut:
Jalankan perintah berikut untuk mendeploy aplikasi sleep di namespace default:
kubectl apply -f sleep.yaml -n defaultJalankan perintah berikut untuk mendeploy aplikasi sleep di namespace foo:
kubectl apply -f sleep.yaml -n foo
Deploy aplikasi HTTPBin di namespace foo.
Buat file httpbin.yaml dengan konten berikut:
Jalankan perintah berikut untuk mendeploy aplikasi HTTPBin di namespace foo:
kubectl apply -f httpbin.yaml -n foo
Langkah 3: Buat kebijakan otorisasi
Masuk ke Konsol ASM. Di panel navigasi kiri, pilih .
Di halaman Mesh Management, klik nama instance ASM. Di panel navigasi kiri, pilih . Di halaman yang muncul, klik Create.
Di halaman Create, konfigurasikan parameter yang dijelaskan dalam tabel berikut dan klik Create.
Aktifkan saklar di sebelah Methods dan atur nilainya ke GET.
Aktifkan saklar di sebelah Paths dan atur nilainya ke /status/*. Pengaturan ini memungkinkan aplikasi di semua namespace selain foo mengakses hanya jalur /status dari aplikasi HTTPBin menggunakan permintaan GET. Aplikasi HTTPBin berada dalam namespace foo.
Parameter | Deskripsi |
Name | Nama kebijakan otorisasi. |
Policy Type | Tindakan otorisasi. Dalam contoh ini, nilainya diatur ke ALLOW. |
Namespace | Namespace tempat Anda ingin membuat kebijakan otorisasi. Dalam contoh ini, parameter Namespace di tab Workload Scope diatur ke foo. |
Effective Scope | Cakupan efektif kebijakan otorisasi. Dalam contoh ini, nilainya diatur ke Service. |
Workload | Beban kerja tempat kebijakan otorisasi berlaku. Dalam contoh ini, nilainya diatur ke httpbin. |
Request Matching Rules | Aturan pencocokan permintaan kebijakan otorisasi. Untuk contoh ini, lakukan operasi berikut di bagian Add Request Target: |
Langkah 4: Periksa apakah kebijakan otorisasi yang mengontrol metode permintaan dan akses ke jalur tertentu dari beban kerja berlaku
Masuk ke Konsol ACK. Di panel navigasi kiri, klik Clusters.
Di halaman Clusters, temukan kluster yang Anda inginkan dan klik namanya. Di panel kiri, pilih .
Di bagian atas halaman Pods, pilih default dari daftar drop-down Namespace. Temukan kontainer sleep dalam daftar, klik di kolom Aksi.
Jalankan perintah berikut di Terminal kontainer sleep untuk mengakses jalur /status dari aplikasi HTTPBin menggunakan permintaan POST:
curl -I -X POST "httpbin.foo.svc.cluster.local:8000/status/200" -H "accept: text/plain"Kode 403 dikembalikan, yang menunjukkan bahwa permintaan ditolak.
Jalankan perintah berikut untuk mengakses jalur /IP dari aplikasi HTTPBin menggunakan permintaan GET:
curl -I -X GET "httpbin.foo.svc.cluster.local:8000/IP/200" -H "accept: text/plain"Kode 403 dikembalikan, yang menunjukkan bahwa permintaan ditolak.
Jalankan perintah berikut untuk mengakses jalur /status dari aplikasi HTTPBin menggunakan permintaan GET:
curl -I -X GET "httpbin.foo.svc.cluster.local:8000/status/200" -H "accept: text/plain"Output yang diharapkan:
HTTP/1.1 200 OK server: envoy date: Fri, 29 Apr 2022 03:01:16 GMT content-type: text/html; charset=utf-8 access-control-allow-origin: * access-control-allow-credentials: true content-length: 0 x-envoy-upstream-service-time: 5Hasilnya menunjukkan bahwa aplikasi dalam namespace default dapat mengakses jalur /status dari aplikasi HTTPBin hanya menggunakan permintaan GET. Ini berarti kebijakan otorisasi berlaku.
Contoh 3: Kontrol akses ke beban kerja berdasarkan alamat IP klien
Anda dapat membuat kebijakan otorisasi yang hanya mengizinkan permintaan dari alamat IP klien berwenang untuk mengakses aplikasi HTTPBin di namespace foo.
Langkah 1: Aktifkan injeksi proxy sidecar otomatis untuk namespace foo
Buat namespace foo. Untuk informasi lebih lanjut, lihat Kelola Namespace Global.
Aktifkan injeksi proxy sidecar otomatis untuk namespace foo. Untuk informasi lebih lanjut, lihat Aktifkan Injeksi Proxy Sidecar Otomatis.
Langkah 2: Deploy gateway masuk
Masuk ke Konsol ASM. Di panel navigasi kiri, pilih .
Di halaman Mesh Management, klik nama instance ASM. Di panel navigasi kiri, pilih .
Di halaman Ingress Gateway, klik Create, konfigurasikan parameter sesuai kebutuhan, lalu klik Create.
Parameter
Deskripsi
Name
Nama gateway masuk.
Cluster
Kluster tempat Anda ingin menerapkan gateway masuk.
LoadBalancer
Jenis instance load balancer yang ingin Anda gunakan. Nilai valid: Network Load Balancer (NLB) dan Classic Load Balancer (CLB). Dalam contoh ini, pilih CLB dan Internet Access.
Create LoadBalancer Instance
Instance load balancer yang ingin Anda gunakan. Anda dapat memilih instance load balancer menggunakan salah satu metode berikut:
Use Existing LoadBalancer Instance: Pilih instance load balancer yang ada dari daftar drop-down.
Create LoadBalancer Instance: Klik Create LoadBalancer Instance dan pilih spesifikasi instance yang Anda butuhkan dari daftar drop-down.
Port Mapping
Port tempat layanan diekspos. Atur Protocol dan Service Port.
External Traffic Policy
Kebijakan untuk mendistribusikan trafik eksternal. Untuk contoh ini, klik Advanced Options dan atur External Traffic Policy ke Local.
Langkah 3: Buat layanan virtual dan gateway Istio
Gunakan konten berikut untuk membuat layanan virtual di namespace foo. Untuk informasi lebih lanjut, lihat Kelola Layanan Virtual.
apiVersion: networking.istio.io/v1beta1 kind: VirtualService metadata: name: httpbin spec: gateways: - httpbin-gateway hosts: - '*' http: - match: - uri: prefix: /headers route: - destination: host: httpbin port: number: 8000Gunakan konten berikut untuk membuat gateway Istio di namespace foo. Untuk informasi lebih lanjut, lihat Kelola Gateway Istio.
apiVersion: networking.istio.io/v1beta1 kind: Gateway metadata: name: httpbin-gateway spec: selector: istio: ingressgateway servers: - hosts: - '*' port: name: http number: 80 protocol: HTTP
Langkah 4: Buat kebijakan otorisasi
Dapatkan alamat IP gateway masuk. Untuk informasi lebih lanjut, lihat Buat Gateway Masuk.
Dapatkan alamat IP klien.
Masukkan http://{alamat IP gateway masuk}/headers di bilah alamat browser Anda. Di halaman yang muncul, dapatkan nilai parameter X-Envoy-External-Address.

Buat kebijakan otorisasi.
Masuk ke Konsol ASM. Di panel navigasi kiri, pilih .
Di halaman Mesh Management, klik nama instance ASM. Di panel navigasi kiri, pilih . Di halaman yang muncul, klik Create.
Di halaman Create, konfigurasikan parameter yang dijelaskan dalam tabel berikut dan klik Create.
Parameter
Deskripsi
Name
Nama kebijakan otorisasi.
Policy Type
Tindakan otorisasi. Dalam contoh ini, nilainya diatur ke DENY.
Namespace
Namespace tempat Anda ingin membuat kebijakan otorisasi. Dalam contoh ini, parameter Namespace di tab Workload Scope diatur ke foo.
Effective Scope
Cakupan efektif kebijakan otorisasi. Dalam contoh ini, nilainya diatur ke Service.
Workload
Beban kerja tempat kebijakan otorisasi berlaku. Dalam contoh ini, nilainya diatur ke httpbin.
Request Matching Rules
Aturan pencocokan permintaan kebijakan otorisasi. Dalam contoh ini, saklar di sebelah RemoteIPBlocks diaktifkan di bagian Add Request Source dan nilainya diatur ke alamat IP klien yang diperoleh di Langkah 2. Pengaturan ini menolak permintaan yang dikirim dari alamat IP klien tertentu untuk mengakses aplikasi HTTPBin.
Langkah 5: Periksa apakah kebijakan otorisasi yang menolak permintaan dari alamat IP klien tertentu berlaku
Masukkan http://{alamat IP gateway masuk}/headers di bilah alamat browser Anda. Jika pesan RBAC: akses ditolak dikembalikan, permintaan untuk mengakses aplikasi HTTPBin gagal. Ini menunjukkan bahwa kebijakan otorisasi telah diterapkan.
Contoh 4: Kontrol akses layanan lintas namespace
Langkah 1: Aktifkan injeksi proxy sidecar otomatis untuk namespace demo-frontend dan demo-server
Buat namespace demo-frontend dan demo-server. Untuk informasi lebih lanjut, lihat Buat Namespace.
Aktifkan injeksi proxy sidecar otomatis untuk namespace demo-frontend dan demo-server. Untuk informasi lebih lanjut, lihat bagian "Aktifkan Injeksi Proxy Sidecar Otomatis" dari topik Kelola Namespace Global.
Langkah 2: Deploy layanan uji
Buat layanan bernama sleep di namespace demo-frontend dan layanan bernama httpbin di namespace demo-server. Layanan sleep digunakan untuk mengirim permintaan guna mengakses layanan httpbin.
Buat layanan bernama sleep di namespace demo-frontend.
Buat file sleep.yaml dengan konten berikut:
Gunakan kubectl untuk terhubung ke kluster Container Service for Kubernetes (ACK) berdasarkan informasi dalam file kubeconfig, lalu jalankan perintah berikut untuk membuat layanan sleep:
kubectl apply -f sleep.yaml -n demo-frontend
Buat layanan bernama httpbin di namespace demo-server.
Buat file httpbin.yaml dengan konten berikut:
Gunakan kubectl untuk terhubung ke kluster ACK berdasarkan informasi dalam file kubeconfig, lalu jalankan perintah berikut untuk membuat layanan httpbin:
kubectl apply -f httpbin.yaml -n demo-server
Verifikasi bahwa proxy sidecar telah diinjeksi ke dalam pod tempat layanan sleep dan httpbin berada.
Masuk ke Konsol ACK. Di panel navigasi kiri, klik Clusters.
Di halaman Clusters, temukan kluster yang Anda inginkan dan klik namanya. Di panel kiri, pilih .
Di bagian atas halaman Pods, pilih demo-frontend dari daftar drop-down Namespace dan klik nama pod layanan sleep.
Di tab Container, proxy sidecar bernama istio-proxy ditampilkan. Ini menunjukkan bahwa proxy sidecar telah diinjeksi ke dalam pod tempat layanan sleep berada.
Di bagian atas halaman Pods, pilih demo-server dari daftar drop-down Namespace dan klik nama pod layanan httpbin.
Di tab Container, proxy sidecar bernama istio-proxy ditampilkan. Ini menunjukkan bahwa proxy sidecar telah diinjeksi ke dalam pod tempat layanan httpbin berada.
Langkah 3: Buat kebijakan otorisasi untuk mengontrol akses layanan lintas namespace
Anda dapat membuat kebijakan otorisasi dan memodifikasi parameter tindakan dalam kebijakan tersebut untuk menolak atau mengizinkan permintaan akses dari layanan di namespace demo-frontend ke layanan di namespace demo-server. Dengan cara ini, Anda dapat mengontrol akses layanan lintas namespace.
Buat kebijakan otorisasi untuk menolak permintaan akses dari namespace demo-frontend ke namespace demo-server.
Masuk ke Konsol ASM. Di panel navigasi kiri, pilih .
Di halaman Mesh Management, klik nama instance ASM. Di panel navigasi kiri, pilih . Di halaman yang muncul, klik Create.
Di halaman Buat, konfigurasikan parameter yang dijelaskan dalam tabel berikut dan klik Create.
Parameter
Deskripsi
Name
Nama kebijakan otorisasi.
Policy Type
Tindakan otorisasi. Dalam contoh ini, nilainya diatur ke DENY.
Namespace
Namespace tempat Anda ingin membuat kebijakan otorisasi. Dalam contoh ini, parameter Namespace di tab Workload Scope diatur ke demo-server.
Effective Scope
Cakupan efektif kebijakan otorisasi. Dalam contoh ini, nilainya diatur ke Namespace Scope.
Request Matching Rules
Dalam contoh ini, Namespaces diaktifkan di bagian Add Request Source dan nilainya diatur ke demo-frontend.
Akses layanan httpbin.
Masuk ke Konsol ACK. Di panel navigasi kiri, klik Clusters.
Di halaman Clusters, temukan kluster yang Anda inginkan dan klik namanya. Di panel kiri, pilih .
Di bagian atas halaman Pods, pilih demo-frontend dari daftar drop-down Namespace. Temukan nama pod layanan sleep dan klik di kolom Actions.
Jalankan perintah berikut di terminal kontainer sleep untuk mengakses layanan httpbin:
curl -I httpbin.demo-server.svc.cluster.local:8000Output yang Diharapkan:
HTTP/1.1 403 Forbidden content-length: 19 content-type: text/plain date: Wed, 11 Oct 2023 08:15:25 GMT server: envoy x-envoy-upstream-service-time: 4Output sebelumnya menunjukkan bahwa layanan dalam namespace demo-frontend gagal mengakses layanan dalam namespace demo-server.
Ubah nilai parameter tindakan dalam kebijakan otorisasi menjadi ALLOW untuk mengizinkan permintaan akses dari namespace demo-frontend ke namespace demo-server.
Masuk ke Konsol ASM. Di panel navigasi kiri, pilih .
Di halaman Mesh Management, klik nama instance ASM. Di panel navigasi kiri, pilih .
Di halaman AuthorizationPolicy, temukan kebijakan otorisasi yang ingin Anda kelola dan klik YAML di kolom Actions.
Di kotak dialog Edit, ubah nilai parameter tindakan menjadi ALLOW, lalu klik OK.
Jalankan perintah berikut di terminal kontainer sleep untuk mengakses layanan httpbin:
curl -I httpbin.demo-server.svc.cluster.local:8000Output yang Diharapkan:
HTTP/1.1 200 OK server: envoy date: Wed, 11 Oct 2023 08:21:40 GMT content-type: text/html; charset=utf-8 content-length: 9593 access-control-allow-origin: * access-control-allow-credentials: true x-envoy-upstream-service-time: 13Output sebelumnya menunjukkan bahwa layanan dalam namespace demo-frontend berhasil mengakses layanan dalam namespace demo-server.
#### Hasil pengujian menunjukkan bahwa kebijakan otorisasi dapat digunakan untuk mengontrol akses layanan lintas namespace.