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:
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.
Buat kebijakan otorisasi di ASM, konfigurasikan aplikasi yang memerlukan otorisasi kustom, lalu lakukan otentikasi menggunakan layanan otorisasi kustom yang Anda konfigurasikan di Langkah 2.

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.
Anda dapat membuat layanan otorisasi kustom berdasarkan kode sampel dalam topik ini. Untuk informasi lebih lanjut, lihat extauthz.
Buat file ext-authz.yaml dengan konten berikut:
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.yamlJalankan perintah berikut untuk memeriksa status pod:
kubectl get podOutput yang Diharapkan:
NAME READY STATUS RESTARTS AGE ext-authz-6d458d5f8f-bh2m9 2/2 Running 0 1mJalankan 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-authzOutput yang Diharapkan:
2023/12/12 10:01:31 Memulai server HTTP di [::]:8000 2023/12/12 10:01:31 Memulai server gRPC di [::]:9000Jika hasil di atas dikembalikan, layanan ext-authz bekerja dengan benar. Layanan otorisasi kustom berhasil diterapkan.
Dapatkan port gRPC dan HTTP dari layanan ext-authz.
Masuk ke Konsol ACK. Di panel navigasi kiri, klik Clusters.
Di halaman Clusters, temukan kluster yang diinginkan dan klik namanya. Di panel kiri, pilih .
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.
Masuk ke Konsol ASM. Di panel navigasi kiri, pilih .
Di halaman Mesh Management, klik nama instance ASM. Di panel navigasi kiri, pilih .
Di halaman Ingress Gateway, klik gateway ingress tempat Anda ingin mengonfigurasi layanan otorisasi kustom.
Di panel navigasi kiri, pilih .
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.



Metode 2: Impor layanan otorisasi kustom yang ada
Di tab Import existing Custom Authorization Service, pilih layanan otorisasi kustom yang ada.
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
Jalankan perintah berikut untuk mengakses sumber daya di jalur
/api/v1/productspada 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/productsOutput 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: 1Hasil di atas menunjukkan bahwa otorisasi kustom tidak dipicu. Alasannya adalah jalurnya adalah
/api/v1/products, bukan/productpageyang dikonfigurasikan pada langkah sebelumnya.Jalankan perintah berikut untuk menggunakan permintaan dengan header
x-ext-authz: denyuntuk mengakses sumber daya di jalur/productpage:curl -I -H "x-ext-authz: deny" http://{Alamat IP gateway ingress}/productpageOutput 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: chunkedHasil 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/productpageyang didefinisikan dalam kebijakan otorisasi.Jalankan perintah berikut untuk menggunakan permintaan dengan header
x-ext-authz: allowuntuk mengakses sumber daya di jalur/productpage:curl -I -H "x-ext-authz: allow" http://{Alamat IP gateway ingress}/productpageOutput 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: 47Hasil 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.