All Products
Search
Document Center

Alibaba Cloud Service Mesh:Terapkan otorisasi kustom dengan menggunakan gateway ingress

Last Updated:Jul 02, 2025

Ketika Anda perlu menyesuaikan kebijakan kontrol akses berdasarkan kebutuhan spesifik, seperti mengotentikasi permintaan berdasarkan nama domain, jalur, dan metode dalam permintaan HTTP, Anda dapat menerapkan otorisasi kustom menggunakan gateway ingress. Hal ini memastikan bahwa hanya pengguna terotentikasi yang dapat mengakses layanan penting.

Prasyarat

Deskripsi fitur

Ketika seorang pengguna memulai permintaan layanan, backend perlu memverifikasi validitas permintaan tersebut. Misalnya, backend memeriksa apakah pengguna memiliki izin untuk mengakses sumber daya yang diminta. Jika pengguna lolos otentikasi, pesan respons mencakup informasi tambahan, seperti nomor versi layanan dan ID pengguna di header respons. Service Mesh (ASM) memungkinkan Anda mendefinisikan layanan otorisasi kustom. Anda dapat menambahkan proses otentikasi ke gateway ingress untuk memastikan bahwa hanya pengguna berwenang yang dapat mengakses layanan penting.

Anda dapat menyesuaikan layanan otorisasi sesuai kebutuhan bisnis. Dalam contoh ini, layanan otorisasi kustom diterapkan pada gateway ingress untuk mengotentikasi permintaan yang dirutekan melalui gateway tersebut. Permintaan akan diizinkan atau ditolak berdasarkan hasil otentikasi. Berikut adalah konfigurasi yang perlu ditentukan:

  • Informasi yang diperlukan agar gateway ingress dapat terhubung dengan layanan otorisasi kustom.

  • Permintaan yang perlu diautentikasi menggunakan layanan otorisasi kustom.

Otorisasi kustom merupakan fitur keamanan tingkat lanjut dari Service Mesh. Anda dapat menggunakan fitur ini jika memiliki persyaratan keamanan khusus. Untuk persyaratan umum, Anda dapat mengonfigurasi kebijakan otorisasi dengan merujuk pada Konfigurasikan Daftar Hitam atau Putih untuk Gateway Ingress atau bagian Kebijakan Otorisasi dalam topik Gambaran Umum Keamanan Percaya Nol.

Cara menerapkan otorisasi kustom

ASM mengenkapsulasi fitur otorisasi kustom Istio. Untuk informasi lebih lanjut tentang implementasi fitur ini di Istio, lihat sumber daya Istio asli yang dihasilkan setelah Anda mengonfigurasi layanan otorisasi kustom. Contoh berikut menunjukkan cara menerapkan otorisasi kustom di ASM:

  1. Definisikan layanan otorisasi kustom dan asosiasikan layanan ini dengan gateway ingress yang diinginkan di ASM. Dengan cara ini, ASM dapat menggunakan layanan otorisasi kustom untuk melakukan otentikasi. Untuk detail lebih lanjut, lihat Langkah 1.

  2. Buat kebijakan otorisasi di ASM, konfigurasikan aplikasi yang memerlukan otorisasi kustom, lalu lakukan otentikasi menggunakan layanan otorisasi kustom yang Anda konfigurasikan di Langkah 2.

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

Langkah 1: Terapkan layanan otorisasi kustom

Terapkan layanan otorisasi kustom di kluster Container Service for Kubernetes (ACK). Layanan ini harus sesuai dengan spesifikasi API Istio untuk layanan otentikasi kustom dan mendukung protokol HTTP serta gRPC. Layanan otorisasi sampel dalam topik ini menentukan bahwa hanya permintaan dengan header x-ext-authz: allow yang dapat lolos otentikasi.

Catatan

Anda dapat membuat layanan otorisasi kustom berdasarkan kode sampel dalam topik ini. Untuk informasi lebih lanjut, lihat extauthz.

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

    Tampilkan File ext-authz.yaml

    # Hak Cipta Istio Authors
    #
    #   Berlisensi di bawah Lisensi Apache, Versi 2.0 (the "License");
    #   Anda tidak dapat menggunakan file ini kecuali sesuai dengan License.
    #   Anda dapat memperoleh salinan License di
    #
    #       http://www.apache.org/licenses/LICENSE-2.0
    #
    #   Kecuali diwajibkan oleh hukum yang berlaku atau disepakati secara tertulis, perangkat lunak
    #   yang didistribusikan di bawah License disediakan pada dasar "SEBAGAIMANA ADANYA",
    #   TANPA JAMINAN ATAU KONDISI APAPUN, baik tersurat maupun tersirat.
    #   Lihat License untuk bahasa spesifik yang mengatur izin dan
    #   batasan di bawah License.
    
    # Konfigurasi contoh untuk menerapkan server ext-authz secara terpisah di dalam 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 menerapkan layanan otorisasi di kluster ACK yang diinginkan:

    Untuk informasi lebih lanjut tentang cara menggunakan kubectl untuk mengelola kluster dan aplikasi, lihat Dapatkan File kubeconfig Kluster dan Gunakan kubectl untuk Terhubung ke Kluster.

    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 memeriksa apakah layanan ext-authz bekerja sesuai harapan:

    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 Memulai server HTTP di [::]:8000
    2023/12/12 10:01:31 Memulai server gRPC di [::]:9000

    Jika hasil di atas dikembalikan, layanan ext-authz bekerja dengan benar. Layanan otorisasi kustom berhasil diterapkan.

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

    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 Network > Services.

    3. Di halaman Services, klik ext-authz.

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

Langkah 2: Konfigurasikan layanan otorisasi kustom yang menggunakan protokol HTTP untuk gateway ingress yang diinginkan

Gateway ingress mengintegrasikan kemampuan otorisasi kustom. Anda dapat mengonfigurasi layanan otorisasi kustom di konsol ASM.

  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 gateway ingress tempat Anda ingin mengonfigurasi layanan otorisasi kustom.

  4. Di panel navigasi kiri, pilih Gateway Security > Custom Authorization Service.

  5. Di langkah Custom Authorization Service Configuration dari panduan konfigurasi, aktifkan Enable Gateway Custom Authorization Service, gunakan salah satu metode berikut untuk mengonfigurasi layanan otorisasi kustom, lalu klik Next.

    Metode 1: Buat layanan otorisasi kustom

    Di tab Custom authorization service (HTTP or gRPC protocol) implemented based on envoy.ext_authz, konfigurasikan parameter. Untuk informasi lebih lanjut tentang parameter, lihat Terapkan Otorisasi Kustom Menggunakan Protokol HTTP.基于envoy.ext_authz实现的自定义授权服务(HTTP或gRPC协议)headerheader配置

    Metode 2: Impor layanan otorisasi kustom yang ada

    Di tab Import existing Custom Authorization Service, pilih layanan otorisasi kustom yang ada.

  6. Di langkah Match Rules dari panduan konfigurasi, konfigurasikan parameter dan klik Submit.

    Permintaan yang cocok dengan aturan ini akan diautentikasi menggunakan layanan otorisasi.匹配规则

    Setelah konfigurasi selesai, muncul pesan Gateway Custom Authorization Service Created successfully.

Langkah 3: Verifikasi bahwa otorisasi kustom dapat diimplementasikan menggunakan gateway ingress

  1. Jalankan perintah berikut untuk mengakses sumber daya di jalur /api/v1/products pada gateway ingress:

    Untuk informasi lebih lanjut tentang cara mendapatkan alamat IP gateway ingress, lihat Sublangkah 1 di Langkah 3 dalam Gunakan Sumber Daya Istio untuk Merutekan Lalu Lintas ke Versi Layanan yang Berbeda.

    curl -I http://{Alamat IP gateway ingress}/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 di atas menunjukkan bahwa otorisasi kustom tidak dipicu. Alasannya adalah jalurnya adalah /api/v1/products, bukan /productpage yang dikonfigurasikan pada langkah sebelumnya.

  2. Jalankan perintah berikut untuk menggunakan permintaan dengan header x-ext-authz: deny untuk mengakses sumber daya di jalur /productpage:

    curl -I -H "x-ext-authz: deny" http://{Alamat IP gateway ingress}/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 di atas menunjukkan bahwa otorisasi kustom dipicu tetapi otentikasi gagal. Hasil yang dikembalikan berisi header respons baru x-ext-authz-check-result: denied. Alasan mengapa otorisasi kustom dipicu adalah karena jalurnya adalah /productpage yang didefinisikan dalam kebijakan otorisasi.

  3. Jalankan perintah berikut untuk menggunakan permintaan dengan header x-ext-authz: allow untuk mengakses sumber daya di jalur /productpage:

    curl -I -H "x-ext-authz: allow" http://{Alamat IP gateway ingress}/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 di atas menunjukkan bahwa otorisasi kustom dipicu dan otentikasi berhasil. Hasil yang dikembalikan berisi header respons baru x-ext-authz-check-result: allowed. Setelah otentikasi berhasil, permintaan yang diteruskan oleh gateway ingress ke aplikasi membawa header x-ext-authz-check-result: allowed, yang sesuai dengan harapan.

Referensi

  • ASM memungkinkan Anda mengonfigurasi daftar hitam atau putih untuk gateway ingress untuk menolak atau mengizinkan permintaan berdasarkan alamat IP tertentu, nama domain dalam permintaan HTTP, port, atau alamat IP jarak jauh. Ini memastikan keamanan aplikasi di mesh Anda. Untuk informasi lebih lanjut, lihat Konfigurasikan Daftar Hitam atau Putih untuk Gateway Ingress.

  • Anda dapat menggunakan informasi identitas yang disediakan oleh Alibaba Cloud IDentity as a Service (IDaaS) atau penyedia identitas lainnya (IdP) yang mematuhi protokol OpenID Connect (OIDC) untuk masuk dengan satu ID ke beberapa sistem terkait tanpa perlu memodifikasi aplikasi Anda. Untuk informasi lebih lanjut, lihat Konfigurasikan SSO Berbasis OIDC pada Gateway Ingress.