全部产品
Search
文档中心

:Autentikasi dan otorisasi Lapisan 7

更新时间:Nov 09, 2025

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 action tidak dapat diatur ke CUSTOM, yang menunjukkan bahwa proxy waypoint tidak mendukung layanan otorisasi kustom.

    • ipBlocks tidak didukung dalam bidang source.

  • 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

  1. Jalankan perintah berikut untuk menerapkan proxy waypoint untuk layanan productpage:

    istioctl x waypoint apply --service-account bookinfo-productpage
  2. Jalankan perintah berikut untuk melihat pod dari proxy waypoint:

    kubectl get pod --show-labels | grep waypoint

    Keluaran 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

  1. 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: HBONE
  2. Jalankan 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.

  1. 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"
  2. 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.yaml
  3. Verifikasi apakah kebijakan otorisasi berlaku.

    1. 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 56
    2. Jalankan 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.

  4. Ubah file productpage-viewer.yaml menjadi konten berikut dan jalankan perintah kubectl apply -f productpage-viewer.yaml untuk menerapkan kebijakan otorisasi.

    Untuk instance ASM versi 1.21 dan sebelumnya

    Konfigurasi bidang selector diubah 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"

  5. Verifikasi apakah kebijakan otorisasi berlaku.

    1. Jalankan perintah berikut untuk melakukan uji akses:

      kubectl exec deploy/sleep -- curl -s http://productpage:9080/

      Keluaran yang diharapkan:

      RBAC: access denied%
    2. 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.

  6. 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.

  1. 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}"
  2. 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.yaml
  3. Verifikasi apakah kebijakan otorisasi berlaku.

  4. Jalankan perintah berikut untuk melakukan uji akses:

    kubectl exec deploy/sleep -- curl -s http://productpage:9080/ -I

    Keluaran 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-envoy

    Keluaran yang diharapkan menunjukkan bahwa pod sleep tidak dapat mengakses layanan productpage secara langsung atau melalui gateway.

  5. Jalankan perintah berikut untuk menghapus kebijakan otorisasi:

    kubectl delete authorizationpolicy productpage-viewer

Contoh 3: Larang metode HEAD mengakses jalur /productpage

  1. 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"
  2. 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.yaml
  3. Verifikasi apakah kebijakan otorisasi berlaku.

    1. Jalankan perintah berikut untuk mengakses jalur /productpage menggunakan metode HEAD:

      kubectl exec deploy/sleep -- curl -s productpage:9080/productpage -I

      Keluaran 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-envoy
    2. Jalankan perintah berikut untuk mengakses jalur /productpage menggunakan 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 /productpage berhasil.

    3. Jalankan perintah berikut untuk mengakses jalur / menggunakan metode HEAD:

      kubectl exec deploy/sleep -- curl -s productpage:9080/ -I

      Keluaran 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
  4. Jalankan perintah berikut untuk menghapus kebijakan otorisasi:

    kubectl delete authorizationpolicy productpage-viewer