All Products
Search
Document Center

Alibaba Cloud Service Mesh:Gunakan otorisasi kustom pada gerbang masuk ASM

Last Updated:Jun 22, 2026

Untuk menyesuaikan kebijakan kontrol akses—misalnya, mengotorisasi permintaan berdasarkan hostname HTTP, path, atau metode—Anda dapat menggunakan layanan otorisasi kustom pada gerbang masuk ASM. Hal ini memastikan bahwa hanya pengguna yang berwenang yang dapat mengakses layanan kritis Anda.

Prasyarat

Ikhtisar

Saat klien mengirim permintaan, backend perlu memverifikasi validitasnya, misalnya dengan memeriksa apakah pengguna memiliki izin untuk mengakses resource yang diminta. Setelah otorisasi berhasil, Anda mungkin juga perlu menambahkan informasi ke respons yang tidak ada dalam permintaan asli, seperti nomor versi layanan atau ID pengguna di header. ASM menyediakan layanan otorisasi kustom. Anda dapat menambahkan alur otorisasi pada gerbang masuk ASM untuk memastikan bahwa layanan kritis hanya dapat diakses dengan otorisasi yang tepat.

Layanan otorisasi kustom adalah layanan yang Anda kembangkan sendiri. Topik ini menggunakan layanan otorisasi kustom sederhana yang telah dibuat sebelumnya sebagai contoh. Layanan ini mengarahkan permintaan tertentu yang tiba di gerbang masuk ke layanan otorisasi kustom, yang kemudian menentukan apakah permintaan tersebut diizinkan atau ditolak. Gerbang masuk menegakkan keputusan tersebut. Anda harus mengonfigurasi dua bagian berikut:

  • Rincian integrasi antara gerbang masuk dan layanan otorisasi kustom.

  • Aturan yang menentukan permintaan mana yang memerlukan otorisasi kustom.

Layanan otorisasi kustom merupakan fitur keamanan tingkat lanjut dari Service Mesh. Jika kebutuhan Anda sederhana, pertimbangkan untuk menggunakan daftar putih/blacklist gerbang atau kebijakan otorisasi standar. Untuk logika yang lebih kompleks, ikuti langkah-langkah dalam topik ini.

Alur implementasi

ASM membungkus fitur otorisasi kustom Istio. Jika Anda ingin memahami implementasi asli Istio, Anda dapat memeriksa resource Istio asli yang dihasilkan oleh ASM. Alur implementasi layanan otorisasi kustom ASM adalah sebagai berikut:

  1. Definisikan layanan otorisasi kustom di ASM dan kaitkan dengan layanan yang dideploy di Langkah 1. Hal ini memungkinkan ASM menggunakan layanan tersebut untuk otorisasi.

  2. Di ASM, buat kebijakan otorisasi untuk mengonfigurasi aplikasi yang memerlukan otorisasi kustom dan arahkan otorisasi ke layanan otorisasi kustom yang dikonfigurasi di Langkah 2.

基于ASM实现应用请求认证授权

Langkah 1: Deploy layanan otorisasi kustom

Deploy layanan otorisasi kustom di kluster ACK Anda. Layanan tersebut harus mematuhi spesifikasi API layanan otorisasi kustom Istio dan mendukung protokol HTTP maupun gRPC untuk mengimplementasikan logika kustom. Layanan contoh yang digunakan dalam topik ini mensyaratkan bahwa permintaan mencantumkan header x-ext-authz: allow agar lolos otorisasi.

Catatan

Topik ini menyediakan contoh layanan otorisasi kustom. Anda dapat menggunakan kodenya sebagai referensi untuk membuat layanan Anda sendiri. Untuk informasi selengkapnya, lihat Custom authorization.

  1. Buat file bernama ext-authz.yaml dengan konten berikut.

    View ext-authz.yaml

    # Copyright Istio Authors
    #
    #   Licensed under the Apache License, Version 2.0 (the "License");
    #   you may not use this file except in compliance with the License.
    #   You may obtain a copy of the License at
    #
    #       http://www.apache.org/licenses/LICENSE-2.0
    #
    #   Unless required by applicable law or agreed to in writing, software
    #   distributed under the License is distributed on an "AS IS" BASIS,
    #   WITHOUT WARRANTIES OR CONDITIONS OF ANY, either express or implied.
    #   See the License for the specific language governing permissions and
    #   limitations under the License.
    # Contoh konfigurasi untuk deploy server ext-authz secara terpisah di mesh.
    apiVersion: v1
    kind: Service
    metadata:
      name: ext-authz
      labels:
        app: ext-authz
    spec:
      ports:
      - name: http
        port: 8000
        targetPort: 8000
      - name: grpc
        port: 9000
        targetPort: 9000
      selector:
        app: ext-authz
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: ext-authz
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: ext-authz
      template:
        metadata:
          labels:
            app: ext-authz
        spec:
          containers:
          - image: istio/ext-authz:0.6
            imagePullPolicy: IfNotPresent
            name: ext-authz
            ports:
            - containerPort: 8000
            - containerPort: 9000
    ---
  2. Jalankan perintah berikut untuk mendeploy layanan otorisasi kustom di kluster Anda.

    Untuk mempelajari cara mengelola kluster dan aplikasi dengan kubectl, lihat Connect to a cluster by using kubectl.

    kubectl apply -f ext-authz.yaml
  3. Jalankan perintah berikut untuk memeriksa status pod.

    kubectl get pod

    Output yang diharapkan:

    NAME                              READY   STATUS    RESTARTS       AGE
    ext-authz-6d458d5f8f-bh2m9        2/2     Running   0              1m
  4. Jalankan perintah berikut untuk memverifikasi bahwa aplikasi berjalan dengan benar.

    kubectl logs "$(kubectl get pod -l app=ext-authz -n default -o jsonpath={.items..metadata.name})" -n default -c ext-authz

    Output yang diharapkan:

    2023/12/12 10:01:31 Starting HTTP server at [::]:8000
    2023/12/12 10:01:31 Starting gRPC server at [::]:9000

    Output ini mengonfirmasi bahwa layanan berjalan dengan benar.

  5. Dapatkan port gRPC dan HTTP dari layanan otorisasi ext-authz.

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

    2. Pada halaman Clusters, klik nama kluster Anda. Di panel navigasi kiri, klik Network > Services.

    3. Pada halaman Services, klik ext-authz.

      Di bagian Endpoint, Anda dapat melihat bahwa port gRPC adalah 9000 dan port HTTP adalah 8000. Oleh karena itu, alamat layanan gRPC adalah ext-authz.default.svc.cluster.local:9000, dan alamat layanan HTTP adalah ext-authz.default.svc.cluster.local:8000.

Langkah 2: Konfigurasi layanan otorisasi kustom HTTP

Anda dapat mengonfigurasi kemampuan otorisasi kustom gerbang masuk ASM di Konsol ASM.

  1. Masuk ke ASM console. 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 nama gerbang target.

  4. Pada halaman ikhtisar gerbang, klik Gateway Security > Custom Authorization Service di panel navigasi.

  5. Di wizard Custom Authorization Service Configuration, aktifkan sakelar Enable Gateway Custom Authorization Service, konfigurasi layanan dengan salah satu metode berikut, lalu klik Next.

    Metode 1: Buat layanan otorisasi kustom baru

    Pada tab Custom authorization service (HTTP or gRPC protocol) implemented based on envoy.ext_authz, konfigurasikan parameter. Untuk deskripsi parameter, lihat Connect to a custom authorization service that uses the HTTP protocol. Konfigurasikan parameter wajib berikut dalam formulir: atur Protocol ke HTTP, Service Address ke ext-authz.default.svc.cluster.local, Service Port ke 8000 (rentang valid: 1–65535), dan Timeout ke 10 detik. Aktifkan Include headers in the authorization request (includeRequestHeadersInCheck) dan tambahkan header permintaan asli yang akan diteruskan, termasuk cookie, x-forwarded-access-token, x-forwarded-user, x-forwarded-email, authorization, x-forwarded-proto, proxy-authorization, user-agent, x-forwarded-host, from, x-forwarded-for, accept, dan x-ext-authz (header ekstensi kustom). Aktifkan Override headers on allow (headersToUpstreamOnAllow) dan tambahkan header berikut: authorization, cookie, path, x-auth-request-access-token, x-forwarded-access-token, dan x-ext-authz-check-result. Aktifkan Override headers on deny (headersToDownstreamOnDeny) dan tambahkan header berikut: content-type, set-cookie, dan x-ext-authz-check-result. Header x-ext-authz-check-result merupakan header kunci yang harus dikonfigurasi di kedua daftar tersebut. Klik Next.

    Metode 2: Impor layanan otorisasi kustom yang sudah ada

    Pada tab Import existing Custom Authorization Service, pilih Existing Custom Authorization Service.

  6. Di wizard Matching Rules, konfigurasikan pengaturan berikut lalu klik Submit.

    Permintaan yang sesuai dengan aturan ini akan memicu otorisasi kustom. Atur Match Mode ke Selected requests must be authorized dan Match Rule ke Custom match rules. Aktifkan sakelar HTTP Path dan masukkan /productpage. Biarkan opsi aturan lainnya (HTTP Hostname, HTTP Method, dan Port) dalam keadaan nonaktif.

    Saat konfigurasi selesai, muncul pesan konfirmasi bahwa Gateway Custom Authorization Service Created successfully.

Langkah 3: Verifikasi layanan otorisasi kustom

  1. Jalankan perintah berikut untuk mengakses resource di path /api/v1/products pada gerbang.

    Untuk mempelajari cara mendapatkan alamat gerbang, lihat Obtain the IP address of an ingress gateway.

    curl -I http://{YOUR_ASM_GATEWAY_ADDRESS}/api/v1/products

    Output yang diharapkan:

    HTTP/1.1 200 OK
    server: istio-envoy
    date: Wed, 13 Dec 2023 02:41:20 GMT
    content-type: application/json
    content-length: 395
    x-envoy-upstream-service-time: 1

    Hasil ini menunjukkan bahwa otorisasi tidak dipicu. Path akses adalah /api/v1/products, bukan /productpage yang dikonfigurasi, sehingga permintaan tidak sesuai dengan kebijakan otorisasi.

  2. Jalankan perintah berikut untuk mengakses path /productpage dengan header x-ext-authz: deny.

    curl -I -H "x-ext-authz: deny" http://{YOUR_ASM_GATEWAY_ADDRESS}/productpage

    Output yang diharapkan:

    HTTP/1.1 403 Forbidden
    x-ext-authz-check-result: denied
    date: Wed, 13 Dec 2023 02:42:59 GMT
    server: istio-envoy
    transfer-encoding: chunked

    Hasil ini menunjukkan bahwa otorisasi dipicu tetapi gagal. Respons mencakup header baru yang didefinisikan x-ext-authz-check-result: denied. Karena path akses adalah /productpage, permintaan tersebut sesuai dengan kebijakan otorisasi.

  3. Jalankan perintah berikut untuk mengakses path /productpage dengan header x-ext-authz: allow.

    curl -I -H "x-ext-authz: allow" http://{YOUR_ASM_GATEWAY_ADDRESS}/productpage

    Output yang diharapkan:

    HTTP/1.1 200 OK
    server: istio-envoy
    date: Wed, 13 Dec 2023 02:50:38 GMT
    content-type: text/html; charset=utf-8
    content-length: 5290
    x-envoy-upstream-service-time: 47

    Hasil ini mengonfirmasi bahwa permintaan berhasil diotorisasi. Layanan otorisasi kustom contoh menambahkan header ini ke responsnya, dan gerbang dikonfigurasi untuk meneruskannya ke aplikasi upstream saat otorisasi berhasil.

Dokumentasi terkait