全部产品
Search
文档中心

Alibaba Cloud Service Mesh:Konfigurasi Autentikasi JWT untuk Gateway Masuk di ASM

更新时间:Jun 28, 2025

Di Service Mesh (ASM), Anda dapat mengonfigurasi autentikasi JSON Web Token (JWT) untuk mengautentikasi sumber permintaan. Metode ini juga dikenal sebagai autentikasi pengguna akhir. Setelah mengonfigurasi autentikasi JWT untuk gateway masuk pada instance ASM, ASM memeriksa apakah permintaan untuk mengakses layanan menggunakan gateway masuk berisi JWT yang valid di header permintaan. Hanya permintaan dengan JWT yang valid yang diizinkan. Topik ini menjelaskan cara mengonfigurasi autentikasi JWT untuk gateway masuk.

Prasyarat

Informasi latar belakang

Dalam contoh ini, layanan httpbin digunakan. Kebijakan autentikasi permintaan dikonfigurasikan untuk gateway masuk guna membatasi permintaan yang mencoba mengakses layanan httpbin. Permintaan yang berisi JWT yang valid diizinkan untuk mengakses layanan httpbin, sedangkan permintaan dengan JWT tidak valid akan ditolak. Namun, permintaan tanpa JWT tetap diizinkan untuk mengakses layanan httpbin. Berdasarkan kebijakan autentikasi permintaan ini, Anda dapat membuat kebijakan otorisasi untuk membatasi permintaan lebih lanjut dalam skenario berikut:

  • Buat kebijakan otorisasi untuk hanya mengizinkan permintaan yang berisi JWT yang valid untuk mengakses layanan menggunakan gateway masuk.

  • Buat kebijakan otorisasi untuk hanya mengizinkan permintaan yang berisi JWT yang dikeluarkan oleh penerbit tertentu untuk mengakses layanan menggunakan gateway masuk.

Langkah 1: Terapkan layanan httpbin

  1. Aktifkan injeksi proxy sidecar otomatis untuk namespace default.

    1. Masuk ke Konsol ASM.

    2. Di panel navigasi kiri, pilih Service Mesh > Mesh Management.

    3. Di halaman detail instance ASM, pilih ASM Instance > Global Namespace di panel navigasi kiri.

    4. Di halaman Global Namespace, temukan namespace default dan klik Enable Automatic Sidecar Proxy Injection di kolom Automatic Sidecar Injection.

    5. Di pesan Submit, klik OK.

  2. Terapkan layanan httpbin.

    1. Hubungkan ke kluster Container Service for Kubernetes (ACK) menggunakan kubectl. Untuk informasi lebih lanjut, lihat Dapatkan file kubeconfig kluster dan gunakan kubectl untuk terhubung ke kluster.

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

      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
    3. Jalankan perintah berikut untuk menerapkan layanan httpbin:

      kubectl apply -f httpbin.yaml -n default

Langkah 2: Buat gateway Istio dan layanan virtual

  1. Buat gateway Istio.

    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 > Gateway. Di halaman yang muncul, klik Create from YAML.

    3. Di halaman Create, pilih default dari daftar drop-down Namespace dan salin konten berikut ke editor kode. Lalu, klik Create.

      apiVersion: networking.istio.io/v1beta1
      kind: Gateway
      metadata:
        name: httpbin-gateway
        namespace: default
      spec:
        selector:
          istio: ingressgateway
        servers:
          - hosts:
              - '*'
            port:
              name: http
              number: 80
              protocol: HTTP
  2. Buat layanan virtual.

    1. Di halaman detail instance ASM, pilih Traffic Management Center > VirtualService di panel navigasi kiri. Di halaman yang muncul, klik Create from YAML.

    2. Di halaman Buat, pilih default dari daftar drop-down Namespace dan salin konten berikut ke editor kode. Lalu, klik Create.

      apiVersion: networking.istio.io/v1beta1
      kind: VirtualService
      metadata:
        name: httpbin
        namespace: default
      spec:
        gateways:
          - httpbin-gateway
        hosts:
          - '*'
        http:
          - route:
              - destination:
                  host: httpbin
                  port:
                    number: 8000

Langkah 3: Buat kebijakan autentikasi permintaan

  1. Buat JSON Web Key (JWK).

    1. Jalankan perintah berikut di OpenSSL untuk menghasilkan kunci privat Rivest-Shamir-Adleman (RSA) 2048-bit:

      openssl genrsa -out rsa-private-key.pem 2048
    2. Jalankan perintah berikut untuk mengekstrak kunci publik dari file kunci privat:

      openssl rsa -in rsa-private-key.pem -pubout -out rsa-public-key.pem
    3. Di alat JWK to PEM Convertor online, pilih PEM-to-JWK (RSA Only), masukkan kunci publik di editor kode, lalu klik submit untuk mengonversi kunci publik menjadi JWK.

      {"kty":"RSA","e":"AQAB","kid":"59399e22-7a9a-45ed-8c76-7add7863915c","n":"2dnwOlDKEwII9Cyh9w7o59a5y3RS2gWUKYC3HSBJL1FhYIZa7sjTCKxwEuG-vCRQkR6augWxYWseSDfgtyivzi3CxxkF8WnQbECOCGm5xAYKmMcXeOpv0zsJTHN122Tt_tsd6K2OC3yGwKtmp7m-MOpHagqWRqFtvyEOm_1JW1-t0n1VsGSeWww8dvcmnJPKAKHbAU40jdV1hMn9AA3RfSpDY6nfrUkpXA5-aQ6rJRjMn36DatZ5ykVL4LKPOUxZdfK_yNIPkCnwIKesqiOpr4s-iCM8pMiZuejDZ1qoX-uBjggESf4G9_L-laDSeoDmXeOZ9kzN3Jw8ay69ihIFEQ"}
  2. Buat kebijakan autentikasi permintaan.

    1. Masuk ke Konsol ASM.

    2. Di panel navigasi kiri, pilih Service Mesh > Mesh Management.

    3. Di halaman Mesh Management, temukan instance ASM yang ingin Anda konfigurasikan. Klik nama instance ASM atau klik Manage di kolom Actions.

    4. Di halaman detail instance ASM, pilih Mesh Security Center > RequestAuthentication di panel navigasi kiri. Di halaman yang muncul, klik Create.

    5. Di halaman Create, atur parameter dan klik Create.

      Create page

      Parameter

      Deskripsi

      Namespace

      Namespace tempat Anda membuat kebijakan autentikasi permintaan. Dalam contoh ini, istio-system dipilih dari daftar drop-down.

      Name

      Nama kebijakan autentikasi permintaan.

      Matching Label

      Label yang digunakan untuk menentukan layanan yang berlaku untuk kebijakan autentikasi permintaan.

      Klik Add Matching Label. Atur parameter Name menjadi istio dan parameter Value menjadi ingressgateway.

      JWT Rule Set

      Aturan JWT. Klik Add di sebelah JWT Rule Set, lalu atur parameter berikut:

      • issuer: penerbit JWT. Dalam contoh ini, nilainya diatur menjadi testing@asm.test.io.

      • audiences: audiens JWT. Parameter ini menentukan layanan yang dapat menggunakan JWT untuk mengakses layanan yang diinginkan. Jika Anda tidak mengatur parameter ini, semua layanan dapat mengakses layanan yang diinginkan.

      • jwks: informasi tentang JWT, dalam format {"keys":[JWK created in Step 1]}. Sebagai contoh, jika JWK yang Anda buat di Langkah 1 adalah {"kty":"RSA","e":"AQAB","kid":"59399e22-7a9a-45ed-8c76-7add786****"}, atur parameter ini menjadi {"keys":[{"kty":"RSA","e":"AQAB","kid":"59399e22-7a9a-45ed-8c76-7add786****"}]}.

Langkah 4: Periksa apakah kebijakan autentikasi permintaan berlaku

  1. Gunakan alat JWT untuk mengkodekan informasi permintaan JWT menjadi string JWT.

    Di bagian Decoded, masukkan informasi permintaan JWT berikut. Kemudian, informasi permintaan JWT secara otomatis dikonversi menjadi JWT di bagian Encoded.

    • HEADER: Atur parameter alg menjadi RS256, parameter kid menjadi ID kunci JWK yang Anda buat, dan parameter typ menjadi JWT.

    • PAYLOAD: Atur parameter iss menjadi testing@asm.test.io. Anda dapat menambahkan informasi tambahan sesuai kebutuhan bisnis Anda.

    • VERIFY SIGNATURE: Masukkan kunci publik dan kunci privat yang dibuat di sublangkah pertama Langkah 3: Buat kebijakan autentikasi permintaan.

    JWT

  2. Akses layanan httpbin menggunakan gateway masuk.

    1. Jalankan perintah berikut untuk mengirim permintaan untuk mengakses layanan httpbin. Permintaan tersebut berisi JWT yang dibuat di Sublangkah 1.

      curl -I -H "Authorization: Bearer $TOKEN" http://{Alamat IP gateway masuk}/

      Output yang diharapkan:

      HTTP/1.1 200 OK
      server: istio-envoy
      date: Fri, 18 Mar 2022 07:27:54 GMT
    2. Jalankan perintah berikut untuk mengirim permintaan yang berisi JWT tidak valid untuk mengakses layanan httpbin:

      curl -I  -H "Authorization: Bearer invalidToken" http://{Alamat IP gateway masuk}/

      Output yang diharapkan:

      HTTP/1.1 401 Unauthorized
      www-authenticate: Bearer realm="http://47.98.25*.***/", error="invalid_token"
      content-length: 79
      content-type: text/plain
      date: Fri, 18 Mar 2022 07:59:00 GMT
      server: istio-envoy
    3. Jalankan perintah berikut untuk mengirim permintaan yang tidak berisi JWT untuk mengakses layanan httpbin:

      curl -I http://{Alamat IP gateway masuk}/

      Output yang diharapkan:

      HTTP/1.1 200 OK
      server: istio-envoy
      date: Fri, 18 Mar 2022 07:27:54 GMT

    Hasil di atas menunjukkan bahwa permintaan untuk mengakses layanan httpbin diizinkan jika permintaan berisi JWT yang valid atau tidak berisi JWT, dan permintaan yang berisi JWT tidak valid tidak diizinkan. Ini menunjukkan bahwa kebijakan autentikasi permintaan berlaku.

Langkah 5: Buat kebijakan otorisasi

Scenario 1: Create an authorization policy to allow only requests that contain a valid JWT to access the service by using the ingress gateway

  1. Masuk ke Konsol ASM.

  2. Di panel navigasi kiri, pilih Service Mesh > Mesh Management.

  3. Di halaman Mesh Management, temukan instance ASM yang ingin Anda konfigurasikan. Klik nama instance ASM atau klik Manage di kolom Actions.

  4. Di halaman detail instance ASM, pilih Mesh Security Center > AuthorizationPolicy di panel navigasi kiri. Di halaman yang muncul, klik Create.

  5. Di halaman Create, atur parameter dan klik Create.

    Create page

    Parameter

    Deskripsi

    Name

    Nama kebijakan otorisasi.

    Policy Type

    Tindakan otorisasi. Dalam contoh ini, nilainya diatur menjadi ALLOW.

    Gateway Scope

    Gateway tempat kebijakan otorisasi berlaku. Dalam contoh ini, parameter ASM Gateway pada tab Gateway Scope diatur menjadi ingressgateway. Di bagian Add Request Source, aktifkan RequestPrincipals dan masukkan * di bidang tersebut.

  6. Periksa apakah kebijakan otorisasi berlaku.

    1. Jalankan perintah berikut untuk mengirim permintaan yang tidak berisi JWT untuk mengakses layanan httpbin:

      curl -I http://{Alamat IP gateway masuk}/

      Output yang diharapkan:

      HTTP/1.1 401 Unauthorized
      www-authenticate: Bearer realm="http://47.98.25*.***/", error="invalid_token"
      content-length: 79
      content-type: text/plain
      date: Fri, 18 Mar 2022 07:59:00 GMT
      server: istio-envoy
    2. Jalankan perintah berikut untuk mengirim permintaan yang berisi JWT yang valid untuk mengakses layanan httpbin:

      curl -I -H "Authorization: Bearer $TOKEN" http://{Alamat IP gateway masuk}/

      Output yang diharapkan:

      HTTP/1.1 200 OK
      server: istio-envoy
      date: Fri, 18 Mar 2022 07:27:54 GMT

    Hasil di atas menunjukkan bahwa permintaan untuk mengakses layanan httpbin diizinkan jika permintaan berisi JWT yang valid, dan permintaan yang tidak berisi JWT tidak diizinkan. Ini menunjukkan bahwa kebijakan otorisasi berlaku.

Scenario 2: Create an authorization policy to allow only requests that contain a JWT issued by the specified issuer to access the service by using the ingress gateway

Dalam contoh ini, penerbitnya adalah testing@asm.test.io.

  1. Masuk ke Konsol ASM.

  2. Di panel navigasi kiri, pilih Service Mesh > Mesh Management.

  3. Di halaman Mesh Management, temukan instance ASM yang ingin Anda konfigurasikan. Klik nama instance ASM atau klik Manage di kolom Actions.

  4. Di halaman detail instance ASM, pilih Mesh Security Center > AuthorizationPolicy di panel navigasi kiri. Di halaman yang muncul, klik Create.

  5. Di halaman Create, atur parameter dan klik Create.

    Create page

    Parameter

    Deskripsi

    Name

    Nama kebijakan otorisasi.

    Policy Type

    Tindakan otorisasi. Dalam contoh ini, nilainya diatur menjadi ALLOW.

    Gateway Scope

    Gateway tempat kebijakan otorisasi berlaku. Dalam contoh ini, parameter ASM Gateway pada tab Gateway Scope diatur menjadi ingressgateway. Di bagian Add Request Source, RequestPrincipals diaktifkan dan nilainya diatur menjadi testing@asm.test.io/demo@asm.test.io.

  6. Periksa apakah kebijakan otorisasi berlaku.

    1. Jalankan perintah berikut untuk mengirim permintaan yang berisi JWT yang dikeluarkan oleh testing@asm.test.io untuk mengakses layanan httpbin:

      curl -I -H "Authorization: Bearer $TOKEN" http://{Alamat IP gateway masuk}/

      Output yang diharapkan:

      HTTP/1.1 401 Unauthorized
      www-authenticate: Bearer realm="http://47.98.25*.***/", error="invalid_token"
      content-length: 79
      content-type: text/plain
      date: Fri, 18 Mar 2022 07:59:00 GMT
      server: istio-envoy

      Kebijakan otorisasi menentukan testing@asm.test.io/demo@asm.test.io sebagai penerbit JWT yang diizinkan. Oleh karena itu, permintaan yang berisi JWT yang dikeluarkan oleh testing@asm.test.io tidak diizinkan untuk mengakses layanan httpbin.

    2. Ubah penerbit JWT menjadi testing@asm.test.io/demo@asm.test.io.

      Di alat JWT, masukkan pasangan nilai-kunci berikut di bagian PAYLOAD: iss: testing@asm.test.io dan sub: demo@asm.test.io. Pertahankan konfigurasi lainnya sama seperti pada Sublangkah 1. jwt2

    3. Jalankan perintah berikut untuk mengirim permintaan yang berisi JWT yang dihasilkan di sublangkah sebelumnya untuk mengakses layanan httpbin:

      curl -I -H "Authorization: Bearer $TOKEN" http://{Alamat IP gateway masuk}/

      Output yang diharapkan:

      HTTP/1.1 200 OK
      server: istio-envoy
      date: Fri, 18 Mar 2022 07:27:54 GMT

      Permintaan yang berisi JWT yang dikeluarkan oleh testing@asm.test.io/demo@asm.test.io diizinkan untuk mengakses layanan httpbin. Ini menunjukkan bahwa kebijakan otorisasi berlaku.