All Products
Search
Document Center

Alibaba Cloud Service Mesh:Konfigurasikan kebijakan otorisasi untuk kontrol akses pada workload

Last Updated:Jun 23, 2026

Secara default, workload dalam instans Service Mesh (ASM) dapat saling berkomunikasi. Anda dapat membuat kebijakan otorisasi untuk mengontrol akses dan mengelola izin pada workload dalam kluster. Dalam hal ini, hanya permintaan yang memenuhi persyaratan tertentu yang dapat mengakses workload tersebut. Misalnya, Anda dapat mengontrol akses ke workload dengan menentukan path permintaan, metode permintaan, dan alamat IP klien. Hal ini meningkatkan keamanan serta melindungi sumber daya instans ASM.

Prasyarat

Kluster telah ditambahkan ke instans ASM.

Pengenalan fitur

Anda dapat menentukan aksi CUSTOM, DENY, atau ALLOW dalam kebijakan otorisasi. Kebijakan otorisasi memiliki tingkat prioritas berbeda saat Anda menerapkan beberapa kebijakan otorisasi pada satu workload. Secara spesifik, sistem memverifikasi permintaan berdasarkan kebijakan otorisasi CUSTOM, DENY, dan ALLOW secara berurutan. Jika Anda membuat beberapa kebijakan otorisasi untuk satu workload, aturan berikut berlaku:

  • Jika permintaan sesuai dengan kondisi dalam kebijakan otorisasi CUSTOM yang menolak permintaan tersebut, maka permintaan tersebut ditolak.

  • Jika permintaan sesuai dengan kondisi dalam kebijakan otorisasi DENY yang menolak permintaan tersebut, maka permintaan tersebut ditolak.

  • Secara default, jika tidak ada kebijakan otorisasi ALLOW yang dikonfigurasi untuk suatu workload, permintaan dapat mengakses workload tersebut.

  • Jika kebijakan otorisasi ALLOW dikonfigurasi untuk suatu workload dan permintaan sesuai dengan kondisi dalam kebijakan otorisasi ALLOW tersebut, maka permintaan tersebut dapat mengakses workload tersebut.

  • Jika permintaan tidak memenuhi semua persyaratan di atas, permintaan tersebut ditolak.

Topik ini menyediakan empat contoh berikut untuk membantu Anda memahami dan mengonfigurasi kebijakan otorisasi dengan cepat:

Skenario 1: Kontrol akses ke path tertentu dari suatu workload

Dalam contoh ini, kebijakan otorisasi dibuat untuk menentukan bahwa aplikasi dalam namespace foo dapat mengakses path /headers dari aplikasi HTTPBin. Aplikasi HTTPBin berada dalam namespace foo. Permintaan ke path lain gagal. Aplikasi dalam namespace selain foo tidak dapat mengakses aplikasi HTTPBin.

Langkah 1: Aktifkan injeksi proxy sidecar otomatis untuk namespace default dan foo

  1. Buat namespace default dan foo. Untuk informasi lebih lanjut, lihat Buat namespace.

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

  1. Deploy aplikasi sleep di namespace default dan foo.

    1. Buat file sleep.yaml yang berisi konten berikut:

      Tampilkan file sleep.yaml

      apiVersion: v1
      kind: ServiceAccount
      metadata:
        name: sleep
      ---
      apiVersion: v1
      kind: Service
      metadata:
        name: sleep
        labels:
          app: sleep
          service: sleep
      spec:
        ports:
        - port: 80
          name: http
        selector:
          app: sleep
      ---
      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: sleep
      spec:
        replicas: 1
        selector:
          matchLabels:
            app: sleep
        template:
          metadata:
            labels:
              app: sleep
          spec:
            terminationGracePeriodSeconds: 0
            serviceAccountName: sleep
            containers:
            - name: sleep
              image: curlimages/curl
              command: ["/bin/sleep", "3650d"]
              imagePullPolicy: IfNotPresent
              volumeMounts:
              - mountPath: /etc/sleep/tls
                name: secret-volume
            volumes:
            - name: secret-volume
              secret:
                secretName: sleep-secret
                optional: true
      ---
    2. Jalankan perintah berikut untuk mendeploy aplikasi sleep di namespace default:

      kubectl apply -f sleep.yaml -n default
    3. Jalankan perintah berikut untuk mendeploy aplikasi sleep di namespace foo:

      kubectl apply -f sleep.yaml -n foo
  2. Deploy aplikasi HTTPBin di namespace foo.

    1. Buat file httpbin.yaml yang berisi konten berikut:

      Tampilkan file httpbin.yaml

      apiVersion: v1
      kind: ServiceAccount
      metadata:
        name: httpbin
      ---
      apiVersion: v1
      kind: Service
      metadata:
        name: httpbin
        labels:
          app: httpbin
          service: httpbin
      spec:
        ports:
        - name: http
          port: 8000
          targetPort: 80
        selector:
          app: httpbin
      ---
      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: httpbin
      spec:
        replicas: 1
        selector:
          matchLabels:
            app: httpbin
            version: v1
        template:
          metadata:
            labels:
              app: httpbin
              version: v1
          spec:
            serviceAccountName: httpbin
            containers:
            - image: docker.io/kennethreitz/httpbin
              imagePullPolicy: IfNotPresent
              name: httpbin
              ports:
              - containerPort: 80
    2. Jalankan perintah berikut untuk mendeploy aplikasi HTTPBin di namespace foo:

      kubectl apply -f httpbin.yaml -n foo

Langkah 3: Buat kebijakan otorisasi

  1. Masuk ke Konsol ASM. Di panel navigasi kiri, pilih Service Mesh > Mesh Management.

  2. Pada halaman Mesh Management, klik nama instans ASM. Di panel navigasi kiri, pilih Mesh Security Center > AuthorizationPolicy. Pada halaman yang muncul, klik Create.

  3. Pada halaman Create, konfigurasikan parameter dan klik Create.

    Parameter

    Deskripsi

    Name

    Nama kebijakan otorisasi.

    Policy Type

    Atur nilainya ke ALLOW.

    Namespaces

    Pada tab Workload Scope, atur Namespaces ke foo.

    Effective Scope

    Pilih Service.

    Workload

    Pilih httpbin.

    Request Matching Rules

    1. Di bagian Add Request Source, aktifkan sakelar Namespaces dan atur nilainya ke foo. Hal ini memungkinkan semua aplikasi dalam namespace foo mengakses aplikasi httpbin.

    2. Di bagian Add Request Target, aktifkan sakelar Paths dan atur nilainya ke /headers. Hal ini memungkinkan aplikasi mengakses hanya path /headers dari aplikasi httpbin dalam namespace foo.

Langkah 4: Periksa apakah kebijakan otorisasi yang mengontrol akses ke path tertentu berlaku

  1. Kirim permintaan menggunakan aplikasi sleep di namespace default untuk mengakses aplikasi HTTPBin di namespace foo.

    1. Masuk ke Konsol ACK. Di panel navigasi kiri, klik Clusters.

    2. Pada halaman Clusters, klik nama kluster Anda. Di panel navigasi kiri, klik Workloads > Pods.

    3. Di bagian atas halaman Pods, atur Namespaces ke default. Temukan pod sleep dan klik Terminal > sleep di kolom Actions.

    4. Jalankan perintah berikut di bagian Terminal kontainer sleep untuk mengakses path /headers dari aplikasi HTTPBin:

      curl httpbin.foo.svc.cluster.local:8000/headers

      Kode 403 dikembalikan, yang menunjukkan bahwa permintaan ditolak.

    5. Jalankan perintah berikut di bagian Terminal kontainer sleep untuk mengakses path /ip dari aplikasi HTTPBin:

      curl httpbin.foo.svc.cluster.local:8000/ip

      Kode 403 dikembalikan, yang menunjukkan bahwa permintaan ditolak.

  2. Kirim permintaan menggunakan aplikasi sleep di namespace foo untuk mengakses aplikasi HTTPBin di namespace foo.

    1. Di panel navigasi kiri halaman manajemen kluster, pilih Workload > Pods.

    2. Di bagian atas halaman Pods, atur Namespaces ke foo. Temukan pod sleep dan klik Terminal > sleep di kolom Actions.

    3. Jalankan perintah berikut di bagian Terminal kontainer sleep untuk mengakses path /headers dari aplikasi HTTPBin:

      curl httpbin.foo.svc.cluster.local:8000/headers

      Output 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"
        }
      }
    4. Jalankan perintah berikut di bagian Terminal kontainer sleep untuk mengakses path /ip dari aplikasi HTTPBin:

      curl httpbin.foo.svc.cluster.local:8000/ip

      Kode 403 dikembalikan, yang menunjukkan bahwa permintaan ditolak.

    Hasil output menunjukkan bahwa aplikasi dalam namespace default tidak dapat mengakses path aplikasi HTTPBin di namespace foo. Aplikasi dalam namespace foo dapat mengakses path /headers dari aplikasi HTTPBin.

Skenario 2: Kontrol metode permintaan dan akses ke path tertentu dari suatu workload

Dalam contoh ini, kebijakan otorisasi dibuat untuk menentukan bahwa aplikasi dalam namespace selain foo hanya dapat mengakses path /status dari aplikasi HTTPBin menggunakan permintaan GET. Aplikasi HTTPBin berada dalam namespace foo. Permintaan ke path lain dari aplikasi HTTPBin dan permintaan yang menggunakan metode selain GET gagal.

Langkah 1: Aktifkan injeksi proxy sidecar otomatis untuk namespace default dan foo

  1. Buat namespace default dan foo. Untuk informasi lebih lanjut, lihat Buat namespace.

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

  1. Deploy aplikasi sleep di namespace default dan foo.

    1. Buat file sleep.yaml yang berisi konten berikut:

      Tampilkan file sleep.yaml

      apiVersion: v1
      kind: ServiceAccount
      metadata:
        name: sleep
      ---
      apiVersion: v1
      kind: Service
      metadata:
        name: sleep
        labels:
          app: sleep
          service: sleep
      spec:
        ports:
        - port: 80
          name: http
        selector:
          app: sleep
      ---
      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: sleep
      spec:
        replicas: 1
        selector:
          matchLabels:
            app: sleep
        template:
          metadata:
            labels:
              app: sleep
          spec:
            terminationGracePeriodSeconds: 0
            serviceAccountName: sleep
            containers:
            - name: sleep
              image: curlimages/curl
              command: ["/bin/sleep", "3650d"]
              imagePullPolicy: IfNotPresent
              volumeMounts:
              - mountPath: /etc/sleep/tls
                name: secret-volume
            volumes:
            - name: secret-volume
              secret:
                secretName: sleep-secret
                optional: true
      ---
    2. Jalankan perintah berikut untuk mendeploy aplikasi sleep di namespace default:

      kubectl apply -f sleep.yaml -n default
    3. Jalankan perintah berikut untuk mendeploy aplikasi sleep di namespace foo:

      kubectl apply -f sleep.yaml -n foo
  2. Deploy aplikasi HTTPBin di namespace foo.

    1. Buat file httpbin.yaml yang berisi konten berikut:

      Tampilkan file httpbin.yaml

      apiVersion: v1
      kind: ServiceAccount
      metadata:
        name: httpbin
      ---
      apiVersion: v1
      kind: Service
      metadata:
        name: httpbin
        labels:
          app: httpbin
          service: httpbin
      spec:
        ports:
        - name: http
          port: 8000
          targetPort: 80
        selector:
          app: httpbin
      ---
      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: httpbin
      spec:
        replicas: 1
        selector:
          matchLabels:
            app: httpbin
            version: v1
        template:
          metadata:
            labels:
              app: httpbin
              version: v1
          spec:
            serviceAccountName: httpbin
            containers:
            - image: docker.io/kennethreitz/httpbin
              imagePullPolicy: IfNotPresent
              name: httpbin
              ports:
              - containerPort: 80
    2. Jalankan perintah berikut untuk mendeploy aplikasi HTTPBin di namespace foo:

      kubectl apply -f httpbin.yaml -n foo

Langkah 3: Buat kebijakan otorisasi

  1. Masuk ke Konsol ASM. Di panel navigasi kiri, pilih Service Mesh > Mesh Management.

  2. Pada halaman Mesh Management, klik nama instans ASM. Di panel navigasi kiri, pilih Mesh Security Center > AuthorizationPolicy. Pada halaman yang muncul, klik Create.

  3. Pada halaman Create, konfigurasikan parameter dan klik Create.

  4. Parameter

    Deskripsi

    Name

    Nama kebijakan otorisasi.

    Policy Type

    Pilih ALLOW.

    Namespaces

    Pada tab Workload Scope, atur Namespaces ke foo.

    Effective Scope

    Pilih Service.

    Workload

    Pilih httpbin.

    Request Matching Rules

    Di bagian Add Request Target, konfigurasikan parameter berikut:

    1. Aktifkan sakelar Methods dan atur nilainya ke GET.

    2. Aktifkan sakelar Paths dan atur nilainya ke /status/*. Hal ini memungkinkan aplikasi di semua namespace hanya menggunakan metode GET untuk mengakses path /status dari aplikasi httpbin di namespace foo.

Langkah 4: Periksa apakah kebijakan otorisasi yang mengontrol metode permintaan dan akses ke path tertentu dari workload berlaku

  1. Masuk ke Konsol ACK. Di panel navigasi kiri, klik Clusters.

  2. Pada halaman Clusters, klik nama kluster Anda. Di panel navigasi kiri, klik Workloads > Pods.

  3. Di bagian atas halaman Pods, atur Namespaces ke default. Temukan pod sleep dan klik Terminal > sleep di kolom Actions.

  4. Jalankan perintah berikut di bagian Terminal kontainer sleep untuk mengakses path /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.

  5. Jalankan perintah berikut untuk mengakses path /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.

  6. Jalankan perintah berikut untuk mengakses path /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: 5

    Hasil ini menunjukkan bahwa aplikasi dalam namespace default hanya dapat mengakses path /status dari aplikasi HTTPBin menggunakan permintaan GET. Artinya, kebijakan otorisasi berlaku.

Contoh 3: Kontrol akses ke workload berdasarkan alamat IP klien

Anda dapat membuat kebijakan otorisasi yang hanya mengizinkan permintaan dari alamat IP klien yang sah untuk mengakses aplikasi HTTPBin di namespace foo.

Langkah 1: Aktifkan injeksi proxy sidecar otomatis untuk namespace foo

  1. Buat namespace foo. Untuk informasi lebih lanjut, lihat Kelola namespace global.

  2. Aktifkan injeksi proxy sidecar otomatis untuk namespace foo. Untuk informasi lebih lanjut, lihat Aktifkan injeksi proxy sidecar otomatis.

Langkah 2: Deploy gerbang masuk

  1. Masuk ke Konsol ASM. Di panel navigasi kiri, pilih Service Mesh > Mesh Management.

  2. Pada halaman Mesh Management, klik nama instans ASM. Di panel navigasi kiri, pilih ASM Gateways > Ingress Gateway.

  3. Pada halaman Ingress Gateway, klik Create, konfigurasikan parameter, lalu klik Create.

    Parameter

    Deskripsi

    Name

    Nama gerbang masuk.

    Cluster

    Kluster tempat Anda ingin mendeploy gerbang masuk.

    SLB

    Pilih Classic Load Balancer dan Public Access. Contoh ini menggunakan Classic Load Balancer, tetapi Anda juga dapat menggunakan Network Load Balancer.

    Create SLB Instance

    Instans load balancer yang ingin Anda gunakan. Anda dapat memilih instans load balancer dengan salah satu metode berikut:

    • Use Existing CLB Instance: Pilih load balancer yang sudah ada dari daftar.

    • Create SLB Instance: Klik Create SLB Instance dan pilih spesifikasi yang diinginkan dari daftar drop-down.

    Port Mapping

    Pilih Protocol dan masukkan Service Port sesuai kebutuhan.

    External Traffic Policy

    Klik Advanced Options dan atur External Traffic Policy ke Local.

Langkah 3: Buat layanan virtual dan gateway Istio

  1. 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: 8000
  2. Gunakan 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

  1. Dapatkan alamat IP gerbang masuk. Untuk informasi lebih lanjut, lihat Buat gerbang masuk.

  2. Dapatkan alamat IP klien.

    Masukkan http://{ASM Gateway IP}/headers di bilah alamat browser Anda untuk mendapatkan alamat IP untuk X-Envoy-External-Address. Di respons yang dikembalikan, field X-Envoy-External-Address adalah alamat IP eksternal asli klien.

    {
      "headers": {
        "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,imag...",
        "Accept-Encoding": "gzip, deflate",
        "Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8",
        "Cache-Control": "max-age=0",
        "Host": "<IP address>",
        "Upgrade-Insecure-Requests": "1",
        "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.3...",
        "X-Envoy-Attempt-Count": "1",
        "X-Envoy-External-Address": "<Client external IP>",
        "X-Forwarded-Client-Cert": "By=spiffe://cluster.local/ns/foo/sa/httpbin;Hash=e49...service-account"
      }
    }
  3. Buat kebijakan otorisasi.

    1. Masuk ke Konsol ASM. Di panel navigasi kiri, pilih Service Mesh > Mesh Management.

    2. Pada halaman Mesh Management, klik nama instans ASM. Di panel navigasi kiri, pilih Mesh Security Center > AuthorizationPolicy. Pada halaman yang muncul, klik Create.

    3. Pada halaman Create, konfigurasikan parameter dan klik Create.

      Parameter

      Deskripsi

      Name

      Nama kebijakan otorisasi.

      Policy Type

      Pilih DENY.

      Namespaces

      Pada tab Workload Scope, atur Namespaces ke foo.

      Effective Scope

      Pilih Service.

      Workload

      Pilih httpbin.

      Request Matching Rules

      Di bagian Add Request Source, aktifkan sakelar RemoteIPBlocks dan atur nilainya ke alamat IP klien yang Anda peroleh di langkah sebelumnya. Hal ini mencegah alamat IP klien mengakses aplikasi httpbin.

Langkah 5: Periksa apakah kebijakan otorisasi yang menolak permintaan dari alamat IP klien tertentu berlaku

Di browser Anda, buka http://{ASM gateway IP}/headers. Pesan RBAC: access denied dikembalikan, yang menunjukkan bahwa akses ke aplikasi httpbin gagal. Hal ini memverifikasi bahwa pembatasan berdasarkan alamat IP klien berlaku.

RBAC: access denied

Contoh 4: Kontrol akses layanan lintas namespace

Langkah 1: Aktifkan injeksi proxy sidecar otomatis untuk namespace demo-frontend dan demo-server

  1. Buat namespace demo-frontend dan demo-server. Untuk informasi lebih lanjut, lihat Buat namespace.

  2. Aktifkan injeksi proxy sidecar otomatis untuk namespace demo-frontend dan demo-server. Untuk informasi lebih lanjut, lihat bagian "Aktifkan injeksi proxy sidecar otomatis" dalam 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.

  1. Buat layanan bernama sleep di namespace demo-frontend.

    1. Buat file sleep.yaml yang berisi konten berikut:

      Tampilkan file sleep.yaml

      apiVersion: v1
      kind: ServiceAccount
      metadata:
        name: sleep
      ---
      apiVersion: v1
      kind: Service
      metadata:
        name: sleep
        labels:
          app: sleep
          service: sleep
      spec:
        ports:
        - port: 80
          name: http
        selector:
          app: sleep
      ---
      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: sleep
      spec:
        replicas: 1
        selector:
          matchLabels:
            app: sleep
        template:
          metadata:
            labels:
              app: sleep
          spec:
            terminationGracePeriodSeconds: 0
            serviceAccountName: sleep
            containers:
            - name: sleep
              image: curlimages/curl
              command: ["/bin/sleep", "3650d"]
              imagePullPolicy: IfNotPresent
              volumeMounts:
              - mountPath: /etc/sleep/tls
                name: secret-volume
            volumes:
            - name: secret-volume
              secret:
                secretName: sleep-secret
                optional: true
      ---
    2. 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
  2. Buat layanan bernama httpbin di namespace demo-server.

    1. Buat file httpbin.yaml yang berisi konten berikut:

      Tampilkan file httpbin.yaml

      apiVersion: v1
      kind: ServiceAccount
      metadata:
        name: httpbin
      ---
      apiVersion: v1
      kind: Service
      metadata:
        name: httpbin
        labels:
          app: httpbin
          service: httpbin
      spec:
        ports:
        - name: http
          port: 8000
          targetPort: 80
        selector:
          app: httpbin
      ---
      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: httpbin
      spec:
        replicas: 1
        selector:
          matchLabels:
            app: httpbin
            version: v1
        template:
          metadata:
            labels:
              app: httpbin
              version: v1
          spec:
            serviceAccountName: httpbin
            containers:
            - image: docker.io/kennethreitz/httpbin
              imagePullPolicy: IfNotPresent
              name: httpbin
              ports:
              - containerPort: 80
    2. 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
  3. Verifikasi bahwa proxy sidecar telah diinjeksikan ke pod tempat layanan sleep dan httpbin berada.

    1. Masuk ke Konsol ACK. Di panel navigasi kiri, klik Clusters.

    2. Pada halaman Clusters, klik nama kluster Anda. Di panel navigasi kiri, klik Workloads > Pods.

    3. Di bagian atas halaman Pods, pilih demo-frontend dari daftar drop-down Namespaces dan klik nama pod layanan sleep.

      Di tab Containers, Anda dapat melihat kontainer istio-proxy. Hal ini menunjukkan bahwa injeksi sidecar untuk layanan sleep telah selesai.

    4. Di bagian atas halaman Pods, pilih demo-server dari daftar drop-down Namespaces dan klik nama pod layanan httpbin.

      Di tab Containers, Anda dapat melihat kontainer istio-proxy. Hal ini menunjukkan bahwa injeksi sidecar untuk layanan httpbin telah selesai.

Langkah 3: Buat kebijakan otorisasi untuk mengontrol akses layanan lintas namespace

Anda dapat membuat kebijakan otorisasi dan mengubah parameter action dalam kebijakan otorisasi 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.

  1. Buat kebijakan otorisasi untuk menolak permintaan akses dari namespace demo-frontend ke namespace demo-server.

    1. Masuk ke Konsol ASM. Di panel navigasi kiri, pilih Service Mesh > Mesh Management.

    2. Pada halaman Mesh Management, klik nama instans ASM. Di panel navigasi kiri, pilih Mesh Security Center > AuthorizationPolicy. Pada halaman yang muncul, klik Create.

    3. Konfigurasikan parameter kebijakan otorisasi dan klik Create.

      Parameter

      Deskripsi

      Name

      Nama kebijakan otorisasi.

      Policy Type

      Pilih DENY.

      Namespaces

      Pada tab Workload Scope, atur Namespaces ke demo-server.

      Effective Scope

      Pilih Namespace Scope.

      Request Matching Rules

      Di bagian Add Request Source, aktifkan sakelar Namespaces dan atur nilainya ke demo-frontend.

  2. Akses layanan httpbin.

    1. Masuk ke Konsol ACK. Di panel navigasi kiri, klik Clusters.

    2. Pada halaman Clusters, klik nama kluster Anda. Di panel navigasi kiri, klik Workloads > Pods.

    3. Di bagian atas halaman Pods, pilih demo-frontend dari daftar drop-down Namespaces. Lalu, temukan pod sleep dan klik Terminal > sleep di kolom Actions.

    4. Jalankan perintah berikut di terminal kontainer sleep untuk mengakses layanan httpbin:

      curl -I httpbin.demo-server.svc.cluster.local:8000

      Output 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: 4

      Output di atas menunjukkan bahwa layanan di namespace demo-frontend gagal mengakses layanan di namespace demo-server.

  3. Ubah nilai parameter action dalam kebijakan otorisasi menjadi ALLOW untuk mengizinkan permintaan akses dari namespace demo-frontend ke namespace demo-server.

    1. Masuk ke Konsol ASM. Di panel navigasi kiri, pilih Service Mesh > Mesh Management.

    2. Pada halaman Mesh Management, klik nama instans ASM. Di panel navigasi kiri, pilih Mesh Security Center > AuthorizationPolicy.

    3. Pada halaman AuthorizationPolicy, temukan kebijakan target dan klik View YAML di kolom Actions.

    4. Di kotak dialog Edit, ubah nilai parameter action menjadi ALLOW dan klik OK.

  4. Jalankan perintah berikut di terminal kontainer sleep untuk mengakses layanan httpbin:

    curl -I httpbin.demo-server.svc.cluster.local:8000

    Output 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: 13

    Output di atas menunjukkan bahwa layanan di namespace demo-frontend berhasil mengakses layanan di namespace demo-server.

    Seperti yang terlihat, setelah kebijakan otorisasi dengan Action diatur ke Deny dibuat, layanan di namespace demo-frontend gagal mengakses layanan di namespace demo-server. Setelah Action kebijakan otorisasi diubah menjadi ALLOW, layanan di namespace demo-frontend dapat berhasil mengakses layanan di namespace demo-server. Hal ini menunjukkan bahwa kebijakan otorisasi berhasil mengontrol akses layanan lintas namespace.