全部产品
Search
文档中心

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

更新时间:Jul 02, 2025

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

Kluster telah ditambahkan ke instance ASM.

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

  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 dengan 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 dengan 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. Di halaman Mesh Management, klik nama instance ASM. Di panel navigasi kiri, pilih Mesh Security Center > AuthorizationPolicy. Di halaman yang muncul, klik Create.

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

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

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

  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. Di halaman Clusters, temukan kluster yang diinginkan dan klik namanya. Di panel kiri, pilih Workloads > Pods.

    3. Di bagian atas halaman Pods, pilih default dari daftar drop-down Namespace. Temukan kontainer sleep dalam daftar, klik Terminal > sleep di kolom Actions.

    4. Jalankan perintah berikut di Terminal kontainer sleep untuk mengakses jalur /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 Terminal kontainer sleep untuk mengakses jalur /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 detail, pilih Workloads > Pods.

    2. Di bagian atas halaman Pods, pilih foo dari daftar drop-down Namespace. Temukan kontainer sleep dalam daftar, klik Terminal > sleep di kolom Actions.

    3. Jalankan perintah berikut di Terminal kontainer sleep untuk mengakses jalur /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 Terminal kontainer sleep untuk mengakses jalur /ip dari aplikasi HTTPBin:

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

      Kode 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

  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 dengan 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 dengan 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. Di halaman Mesh Management, klik nama instance ASM. Di panel navigasi kiri, pilih Mesh Security Center > AuthorizationPolicy. Di halaman yang muncul, klik Create.

  3. Di halaman Create, konfigurasikan parameter yang dijelaskan dalam tabel berikut dan klik Create.

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

    1. Aktifkan saklar di sebelah Methods dan atur nilainya ke GET.

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

Langkah 4: Periksa apakah kebijakan otorisasi yang mengontrol metode permintaan dan akses ke jalur tertentu dari beban kerja berlaku

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

  2. Di halaman Clusters, temukan kluster yang Anda inginkan dan klik namanya. Di panel kiri, pilih Workloads > Pods.

  3. Di bagian atas halaman Pods, pilih default dari daftar drop-down Namespace. Temukan kontainer sleep dalam daftar, klik Terminal > sleep di kolom Aksi.

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

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

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

    Hasilnya 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

  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 gateway masuk

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

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

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

  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 gateway masuk. Untuk informasi lebih lanjut, lihat Buat Gateway Masuk.

  2. 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.客户端IP

  3. Buat kebijakan otorisasi.

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

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

    3. 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.验证客户端IP

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

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

    1. Buat file sleep.yaml dengan 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 dengan 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 diinjeksi ke dalam pod tempat layanan sleep dan httpbin berada.

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

    2. Di halaman Clusters, temukan kluster yang Anda inginkan dan klik namanya. Di panel kiri, pilih Workloads > Pods.

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

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

  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. Di halaman Mesh Management, klik nama instance ASM. Di panel navigasi kiri, pilih Mesh Security Center > AuthorizationPolicy. Di halaman yang muncul, klik Create.

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

  2. Akses layanan httpbin.

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

    2. Di halaman Clusters, temukan kluster yang Anda inginkan dan klik namanya. Di panel kiri, pilih Workloads > Pods.

    3. Di bagian atas halaman Pods, pilih demo-frontend dari daftar drop-down Namespace. Temukan nama pod layanan 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 sebelumnya menunjukkan bahwa layanan dalam namespace demo-frontend gagal mengakses layanan dalam namespace demo-server.

  3. Ubah nilai parameter tindakan 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. Di halaman Mesh Management, klik nama instance ASM. Di panel navigasi kiri, pilih Mesh Security Center > AuthorizationPolicy.

    3. Di halaman AuthorizationPolicy, temukan kebijakan otorisasi yang ingin Anda kelola dan klik YAML di kolom Actions.

    4. Di kotak dialog Edit, ubah nilai parameter tindakan menjadi ALLOW, lalu 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 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.