Model konfigurasi autentikasi dan otorisasi dalam mode Ambient Mesh berbeda dari mode Sidecar sebelumnya karena pemisahan antara Lapisan 4 dan Lapisan 7. Topik ini menjelaskan cara menggunakan kebijakan otorisasi Lapisan 7.
Prasyarat
Gateway masuk dan aplikasi terkait telah diterapkan, serta fitur dasar telah diverifikasi. Untuk informasi lebih lanjut, lihat Prasyarat dan Langkah 1 di Memulai.
Batasan
Berikut adalah batasan yang berlaku untuk kebijakan otorisasi pada proxy waypoint:
Bidang
actiontidak dapat diatur keCUSTOM, yang menunjukkan bahwa proxy waypoint tidak mendukung layanan otorisasi kustom.ipBlockstidak didukung dalam bidangsource.
Jika proxy waypoint diterapkan, ztunnel yang sesuai mengizinkan semua permintaan dari proxy waypoint untuk melewati. Dalam hal ini, kebijakan otorisasi harus diikat ke proxy waypoint agar kebijakan tersebut berlaku.
Persiapan
Untuk instance Service Mesh (ASM) versi 1.21 dan sebelumnya
Jalankan perintah berikut untuk menerapkan proxy waypoint untuk layanan productpage:
istioctl x waypoint apply --service-account bookinfo-productpageJalankan perintah berikut untuk melihat pod dari proxy waypoint:
kubectl get pod --show-labels | grep waypointKeluaran yang diharapkan:
bookinfo-productpage-istio-waypoint-6c579dd48d-l**** 1/1 Running 0 91s gateway.istio.io/managed=istio.io-mesh-controller,istio.io/gateway-name=bookinfo-productpage,pod-template-hash=6c579dd48d,service.istio.io/canonical-name=bookinfo-productpage-istio-waypoint,service.istio.io/canonical-revision=latest,sidecar.istio.io/inject=false
Untuk instance ASM versi 1.22 dan setelahnya
Gunakan konten berikut untuk menerapkan gateway:
apiVersion: gateway.networking.k8s.io/v1 kind: Gateway metadata: labels: istio.io/waypoint-for: service name: waypoint namespace: default spec: gatewayClassName: istio-waypoint listeners: - name: mesh port: 15008 protocol: HBONEJalankan perintah berikut untuk menerapkan proxy waypoint untuk layanan productpage:
kubectl label service productpage istio.io/use-waypoint=waypoint
Contoh 1: Jika proxy waypoint diterapkan untuk layanan productpage, kebijakan otorisasi pada ztunnels tidak berlaku.
Jika proxy waypoint diterapkan untuk layanan productpage, ztunnels yang sesuai mengizinkan semua lalu lintas dari proxy waypoint layanan productpage untuk melewati. Dalam hal ini, jika kebijakan otorisasi diterapkan pada ztunnel (pod aplikasi dipilih oleh selector dari kebijakan otorisasi), kebijakan tersebut tidak berlaku.
Gunakan konten berikut untuk membuat file productpage-viewer.yaml.
Kebijakan otorisasi berikut berlaku untuk ztunnel yang sesuai dan melarang akses ke port 9080 layanan productpage.
apiVersion: security.istio.io/v1beta1 kind: AuthorizationPolicy metadata: name: productpage-viewer namespace: default spec: selector: matchLabels: app: productpage action: DENY rules: - to: - operation: ports: - "9080"Gunakan kubectl untuk terhubung ke instance ASM berdasarkan informasi dalam file kubeconfig, lalu jalankan perintah berikut untuk membuat kebijakan otorisasi:
kubectl apply -f productpage-viewer.yamlVerifikasi apakah kebijakan otorisasi berlaku.
Jalankan perintah berikut untuk melakukan uji akses:
kubectl exec deploy/sleep -- curl -s http://productpage:9080/| grep -o "<title>.*</title>"Keluaran yang diharapkan:
command terminated with exit code 56Jalankan perintah berikut untuk melakukan uji akses:
kubectl exec deploy/notsleep -- curl -s http://productpage:9080/ | grep -o "<title>.*</title>"Keluaran yang diharapkan:
<title>Simple Bookstore App</title>
Uji coba di atas dan uji coba dalam Contoh 2: Larang akses ke port 9080 layanan productpage (tidak ada proxy waypoint yang diterapkan) menggunakan kebijakan otorisasi yang sama. Namun, semua akses ke port 9080 layanan productpage berhasil dalam uji coba di atas.
Hasil di atas menunjukkan bahwa setelah Anda menerapkan proxy waypoint, semua kebijakan otorisasi pada ztunnel menjadi tidak valid.
Ubah file productpage-viewer.yaml menjadi konten berikut dan jalankan perintah
kubectl apply -f productpage-viewer.yamluntuk menerapkan kebijakan otorisasi.Untuk instance ASM versi 1.21 dan sebelumnya
Konfigurasi bidang
selectordiubah dalam file YAML berikut.apiVersion: security.istio.io/v1beta1 kind: AuthorizationPolicy metadata: name: productpage-viewer namespace: default spec: selector: matchLabels: istio.io/gateway-name: bookinfo-productpage action: DENY rules: - to: - operation: ports: - "9080"Untuk instance ASM versi 1.22 dan setelahnya
Layanan yang diinginkan ditentukan dalam file YAML berikut.
apiVersion: security.istio.io/v1beta1 kind: AuthorizationPolicy metadata: name: productpage-viewer namespace: default spec: targetRefs: - kind: Service group: "" name: productpage action: DENY rules: - to: - operation: ports: - "9080"Verifikasi apakah kebijakan otorisasi berlaku.
Jalankan perintah berikut untuk melakukan uji akses:
kubectl exec deploy/sleep -- curl -s http://productpage:9080/Keluaran yang diharapkan:
RBAC: access denied%Jalankan perintah berikut untuk melakukan uji akses:
kubectl exec deploy/notsleep -- curl -s http://productpage:9080/Keluaran yang diharapkan:
RBAC: access denied%Pesan kesalahan yang dikembalikan di sini adalah
RBAC: access denied%, yang berbeda dari yang ada di Contoh 2: Larang akses ke port 9080 layanan productpage dalam topik "Autentikasi dan Otorisasi Lapisan 4". Kesalahan ini sebenarnya dikembalikan oleh proxy waypoint layanan productpage. Ketika proxy waypoint menemukan bahwa akses ke port 9080 ditolak, ia mengembalikan kesalahan HTTP RBAC dengan kode status HTTP 403.
Jalankan perintah berikut untuk menghapus kebijakan otorisasi:
kubectl delete authorizationpolicy productpage-viewer
Contoh 2: Larang alamat IP pod sleep mengakses layanan productpage secara langsung
Saat ini, kebijakan otorisasi yang dikonfigurasi pada proxy waypoint tidak mendukung bidang ipBlocks, dan hanya mendukung bidang remoteIpBlocks. Anda hanya dapat mengonfigurasi bidang remoteIpBlocks untuk mencocokkan permintaan yang melewati gateway.
Buat file productpage-viewer.yaml dengan konten berikut untuk melarang pod sleep mengakses layanan productpage:
Untuk instance ASM versi 1.21 dan sebelumnya
apiVersion: security.istio.io/v1beta1 kind: AuthorizationPolicy metadata: name: productpage-viewer namespace: default spec: selector: matchLabels: istio.io/gateway-name: bookinfo-productpage action: DENY rules: - from: - source: remoteIpBlocks: - "${sleep Pod IP}"Untuk instance ASM versi 1.22 dan setelahnya
apiVersion: security.istio.io/v1beta1 kind: AuthorizationPolicy metadata: name: productpage-viewer namespace: default spec: targetRefs: - kind: Service group: "" name: productpage action: DENY rules: - from: - source: remoteIpBlocks: - "${sleep Pod IP}"Gunakan kubectl untuk terhubung ke instance ASM berdasarkan informasi dalam file kubeconfig, lalu jalankan perintah berikut untuk membuat kebijakan otorisasi:
kubectl apply -f productpage-viewer.yamlVerifikasi apakah kebijakan otorisasi berlaku.
Jalankan perintah berikut untuk melakukan uji akses:
kubectl exec deploy/sleep -- curl -s http://productpage:9080/ -IKeluaran yang diharapkan:
HTTP/1.1 403 Forbidden content-length: 19 content-type: text/plain date: Fri, 19 Jul 2024 08:17:08 GMT server: istio-envoyKeluaran yang diharapkan menunjukkan bahwa pod sleep tidak dapat mengakses layanan productpage secara langsung atau melalui gateway.
Jalankan perintah berikut untuk menghapus kebijakan otorisasi:
kubectl delete authorizationpolicy productpage-viewer
Contoh 3: Larang metode HEAD mengakses jalur /productpage
Gunakan konten berikut untuk membuat file productpage-viewer.yaml:
Untuk instance ASM versi 1.21 dan sebelumnya
apiVersion: security.istio.io/v1beta1 kind: AuthorizationPolicy metadata: name: productpage-viewer namespace: default spec: selector: matchLabels: istio.io/gateway-name: bookinfo-productpage action: DENY rules: - to: - operation: methods: ["HEAD"] paths: ["/productpage"]Untuk instance ASM versi 1.22 dan setelahnya
apiVersion: security.istio.io/v1beta1 kind: AuthorizationPolicy metadata: name: productpage-viewer namespace: default spec: targetRefs: - kind: Service group: "" name: productpage action: DENY rules: - to: - operation: methods: - "HEAD" paths: - "/productpage"Gunakan kubectl untuk terhubung ke instance ASM berdasarkan informasi dalam file kubeconfig, lalu jalankan perintah berikut untuk membuat kebijakan otorisasi:
kubectl apply -f productpage-viewer.yamlVerifikasi apakah kebijakan otorisasi berlaku.
Jalankan perintah berikut untuk mengakses jalur
/productpagemenggunakan metode HEAD:kubectl exec deploy/sleep -- curl -s productpage:9080/productpage -IKeluaran yang diharapkan:
HTTP/1.1 403 Forbidden content-length: 19 content-type: text/plain date: Thu, 15 Aug 2024 12:20:51 GMT server: istio-envoyJalankan perintah berikut untuk mengakses jalur
/productpagemenggunakan metode GET:kubectl exec deploy/sleep -- curl -s productpage:9080/productpage | grep -o "<title>.*</title>"Keluaran yang diharapkan:
<title>Simple Bookstore App</title>Mengakses jalur
/productpageberhasil.Jalankan perintah berikut untuk mengakses jalur
/menggunakan metode HEAD:kubectl exec deploy/sleep -- curl -s productpage:9080/ -IKeluaran yang diharapkan:
HTTP/1.1 200 OK server: istio-envoy date: Thu, 15 Aug 2024 12:23:17 GMT content-type: text/html; charset=utf-8 content-length: 1743 x-envoy-upstream-service-time: 2
Jalankan perintah berikut untuk menghapus kebijakan otorisasi:
kubectl delete authorizationpolicy productpage-viewer