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:
-
Definisikan layanan otorisasi kustom di ASM dan kaitkan dengan layanan yang dideploy di Langkah 1. Hal ini memungkinkan ASM menggunakan layanan tersebut untuk otorisasi.
-
Di ASM, buat kebijakan otorisasi untuk mengonfigurasi aplikasi yang memerlukan otorisasi kustom dan arahkan otorisasi ke layanan otorisasi kustom yang dikonfigurasi di Langkah 2.

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.
Topik ini menyediakan contoh layanan otorisasi kustom. Anda dapat menggunakan kodenya sebagai referensi untuk membuat layanan Anda sendiri. Untuk informasi selengkapnya, lihat Custom authorization.
-
Buat file bernama ext-authz.yaml dengan konten berikut.
-
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 -
Jalankan perintah berikut untuk memeriksa status pod.
kubectl get podOutput yang diharapkan:
NAME READY STATUS RESTARTS AGE ext-authz-6d458d5f8f-bh2m9 2/2 Running 0 1m -
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-authzOutput yang diharapkan:
2023/12/12 10:01:31 Starting HTTP server at [::]:8000 2023/12/12 10:01:31 Starting gRPC server at [::]:9000Output ini mengonfirmasi bahwa layanan berjalan dengan benar.
-
Dapatkan port gRPC dan HTTP dari layanan otorisasi ext-authz.
Masuk ke ACK console. Di panel navigasi kiri, klik Clusters.
Pada halaman Clusters, klik nama kluster Anda. Di panel navigasi kiri, klik .
-
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.
-
Masuk ke ASM console. Di panel navigasi kiri, pilih .
-
Pada halaman Mesh Management, klik nama instans ASM. Di panel navigasi kiri, pilih .
-
Pada halaman Ingress Gateway, klik nama gerbang target.
-
Pada halaman ikhtisar gerbang, klik di panel navigasi.
-
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 keext-authz.default.svc.cluster.local, Service Port ke8000(rentang valid: 1–65535), dan Timeout ke10detik. Aktifkan Include headers in the authorization request (includeRequestHeadersInCheck) dan tambahkan header permintaan asli yang akan diteruskan, termasukcookie,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, danx-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, danx-ext-authz-check-result. Aktifkan Override headers on deny (headersToDownstreamOnDeny) dan tambahkan header berikut:content-type,set-cookie, danx-ext-authz-check-result. Headerx-ext-authz-check-resultmerupakan 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.
-
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
-
Jalankan perintah berikut untuk mengakses resource di path
/api/v1/productspada 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/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 ini menunjukkan bahwa otorisasi tidak dipicu. Path akses adalah
/api/v1/products, bukan/productpageyang dikonfigurasi, sehingga permintaan tidak sesuai dengan kebijakan otorisasi. -
Jalankan perintah berikut untuk mengakses path
/productpagedengan headerx-ext-authz: deny.curl -I -H "x-ext-authz: deny" http://{YOUR_ASM_GATEWAY_ADDRESS}/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 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. -
Jalankan perintah berikut untuk mengakses path
/productpagedengan headerx-ext-authz: allow.curl -I -H "x-ext-authz: allow" http://{YOUR_ASM_GATEWAY_ADDRESS}/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 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
-
Gerbang masuk ASM mendukung konfigurasi daftar putih/blacklist berdasarkan IP sumber, hostname HTTP, dan port untuk mengamankan aplikasi di mesh. Untuk informasi selengkapnya, lihat Configure a blacklist/whitelist for an ingress gateway.
-
Anda dapat mengimplementasikan Single Sign-On (SSO) dengan Alibaba Cloud IDaaS atau penyedia identitas lain yang kompatibel dengan OIDC tanpa mengubah aplikasi Anda. Untuk informasi selengkapnya, lihat Configure OIDC-based SSO on an ingress gateway.