Topik ini menjelaskan cara menggunakan instans Keycloak yang dikelola sendiri sebagai penyedia identitas (IdP) untuk menyediakan layanan identitas dan mengaktifkan single sign-on (SSO) bagi aplikasi dalam service mesh. Aplikasi dalam service mesh tidak perlu mengimplementasikan logika autentikasi atau otorisasi sendiri. Anda dapat mengonfigurasi layanan otorisasi kustom ASM untuk menggunakan Keycloak dan protokol OpenID Connect (OIDC) guna menerapkan SSO. Setelah autentikasi, permintaan diteruskan ke aplikasi bersama informasi pengguna dari Keycloak.
Prasyarat
Instans ASM telah dibuat. Untuk informasi selengkapnya, lihat Buat instans ASM.
Kluster ACK yang dikelola telah dibuat. Untuk informasi selengkapnya, lihat Buat kluster ACK yang dikelola.
Injeksi sidecar otomatis diaktifkan untuk namespace default. Untuk informasi selengkapnya, lihat Aktifkan injeksi otomatis.
Konsep
Konsep | Deskripsi |
IdP | IdP adalah sistem yang menyimpan dan memverifikasi identitas digital. Misalnya, Anda dapat menggunakan akun dan password untuk memverifikasi identitas Anda. Jika Anda menggunakan akun dan password Alipay untuk login ke Youku, maka Alipay berperan sebagai IdP. |
OIDC | OIDC adalah protokol standar autentikasi identitas berbasis protokol OAuth 2.0. Untuk informasi selengkapnya, lihat situs resmi OpenID. |
Scope | Scope adalah konsep dalam OIDC. Setiap IdP menyimpan berbagai jenis informasi pengguna, seperti alamat email. Setiap jenis tersebut berkorespondensi dengan satu scope. Saat Anda menggunakan IdP untuk memverifikasi identitas guna mengakses suatu aplikasi, aplikasi tersebut hanya diizinkan memperoleh jenis informasi yang telah ditentukan. |
Prosedur
Langkah 1: Deploy aplikasi demo dan Keycloak
Gunakan file YAML berikut dan jalankan perintah kubectl apply -n default -f <your_yaml_file>.yaml untuk mendeploy aplikasi httpbin ke namespace `default` kluster ACK Anda.
Gunakan file YAML berikut dan jalankan perintah kubectl apply -n default -f <your_yaml_file>.yaml untuk mendeploy aplikasi Keycloak ke namespace `default` kluster ACK Anda.
Langkah 2: Ekspos aplikasi demo dan Keycloak ke internet melalui gerbang ASM
Contoh ini menggunakan HTTPS pada port 443 untuk mengakses aplikasi demo dan HTTP pada port 80 untuk mengakses konsol Keycloak.
Buat sertifikat bernama myexample-credential untuk layanan HTTPS. Untuk informasi selengkapnya, lihat Aktifkan layanan HTTPS aman menggunakan gerbang ASM.
Gunakan file YAML berikut untuk membuat aturan gateway dan layanan virtual di instans ASM guna mengekspos Keycloak ke internet.
Di Konsol ASM, gunakan file YAML berikut untuk mengonfigurasi aturan gateway pada instans ASM. Untuk informasi selengkapnya, lihat Kelola aturan gateway.
Gunakan file YAML berikut untuk membuat layanan virtual untuk instans ASM. Untuk informasi selengkapnya, lihat Kelola layanan virtual.
Di browser Anda, buka http://${ingress_gateway_address} untuk mengakses aplikasi Keycloak.

Klik Administration Console. Login dengan username dan password administrator yang Anda tentukan saat mendeploy Keycloak.
Langkah 3: Konfigurasi Keycloak
Di panel navigasi kiri konsol Keycloak, klik Create Realm dari daftar drop-down Master.

Pada halaman konfigurasi realm baru, buat client seperti yang ditunjukkan pada gambar berikut.


Setelah client dibuat, buat pengguna di halaman Realm. Seperti yang ditunjukkan pada gambar berikut, klik Save.

Di halaman User details, klik tab Credentials.
Di kotak dialog, tetapkan kata sandi logon dan klik Save.

Buat realm role seperti yang ditunjukkan pada gambar berikut dan klik Save.

Di halaman User details, klik tab Role mapping.
Di halaman Role mapping, klik Assign role. Tetapkan role yang dibuat pada langkah 6 kepada pengguna saat ini.

Anda dapat membuat client scope seperti yang ditunjukkan pada gambar berikut. Klik Save.

Di halaman Client Scope, klik tab Mappers, tambahkan mapper seperti yang ditunjukkan pada gambar berikut, lalu klik Save.

Klik tab scope. Pilih kotak centang untuk role yang Anda buat pada Langkah 6, lalu klik Assign.

Di halaman pengaturan client, klik tab client scope dan tambahkan default scope.

Seperti yang ditunjukkan pada gambar berikut, di kotak Valid redirect URLs, tambahkan URL pengalihan untuk oauth2-proxy kluster. Klik Save.

Pada contoh ini, hanya layanan Keycloak yang menggunakan HTTP. Semua layanan lain menggunakan HTTPS. Oleh karena itu, format redirect URI adalah https://${your_ASM_gateway_address}/oauth2/callback.
Konfigurasi Keycloak telah selesai. Catat informasi berikut:
ID realm baru: Test-oidc.
ID client yang dibuat di realm: oauth2proxy.
client secret dari tab Credentials di halaman pengaturan client.
Langkah 4: Aktifkan otorisasi kustom ASM dan konfigurasikan single sign-on OIDC
Login ke Konsol ASM. Di panel navigasi kiri, pilih .
Di halaman Mesh Management, klik nama instans ASM. Di panel navigasi kiri, pilih .
Di halaman Custom Authorization Service, klik Associate Custom Authorization Service, pilih OIDC Identity Authentication And Authorization Service, atur parameter layanan, lalu klik Create.

Konfigurasikan parameter berdasarkan informasi aplikasi OpenID Connect (OIDC) yang telah Anda buat. Anda dapat menggunakan gerbang ASM sebagai alamat pengalihan login. Untuk informasi lebih lanjut tentang cookie secret, lihat Generating a Cookie Secret.
IdP OIDC Issuer URL: http://${ASM_gateway_address}/realms/${realm_created_in_Keycloak}.
ClientID dan Client Secret: Masukkan parameter yang dicatat pada langkah sebelumnya.
Scopes: Scope OpenID wajib disertakan. Anda dapat menambahkan scope lain sesuai kebutuhan.
Buat layanan virtual menggunakan file YAML berikut.
apiVersion: networking.istio.io/v1beta1 kind: VirtualService metadata: name: oauth2-vs namespace: istio-system spec: gateways: - ingressgateway hosts: - '*' http: - match: - uri: prefix: /oauth2 name: oauth2 route: - destination: host: asm-oauth2proxy-httpextauth-oidc.istio-system.svc.cluster.local port: number: 4180CatatanDi bidang route, ganti host dengan nama layanan Oauth2Proxy di namespace istio-system kluster ACK Anda.
Untuk mencegah konflik layanan virtual, pastikan tidak ada layanan virtual lain yang mencocokkan path dengan awalan /oauth2.
Langkah 5: Buat kebijakan otorisasi
Di halaman Mesh Management, klik nama instans ASM. Di panel navigasi kiri, pilih .
Di halaman detail kebijakan otorisasi, klik Create With YAML.
Di halaman Create, pilih Namespace dan Scenario Template, konfigurasikan file YAML berikut, lalu klik Create.
apiVersion: security.istio.io/v1beta1 kind: AuthorizationPolicy metadata: name: oidc namespace: istio-system spec: action: CUSTOM provider: name: httpextauth-oidc rules: - to: - operation: notPorts: - '80' selector: matchLabels: istio: ingressgatewayCatatanAuthorizationPolicy menentukan bahwa akses ke semua port kecuali port 80 memerlukan otorisasi.
Untuk nama penyedia, masukkan nama layanan otorisasi kustom yang telah Anda asosiasikan. Anda dapat menemukan nama tersebut di daftar layanan otorisasi kustom.
Langkah 6: Verifikasi
Di browser, buka ${External_IP_of_ASM_gateway:80}.
Hasil yang diharapkan:
Halaman seperti pada gambar di atas muncul. Hal ini menunjukkan bahwa single sign-on (SSO) telah diaktifkan.Klik Sign in with OpenID Connect. Di halaman login Keycloak, masukkan akun uji coba dan kata sandi yang Anda buat pada Langkah 3, lalu klik Log On.
Hasil yang diharapkan:

Klik Request inspection, lalu pilih .
Hasil yang diharapkan:

Di debugger JWT, uraikan Token Web JSON (JWT) dari permintaan pada langkah sebelumnya. Token tersebut adalah nilai setelah Bearer. Untuk informasi selengkapnya, lihat JWT Debugger.
Hasil yang diharapkan:
Setelah token diurai, informasi pengguna dari Keycloak muncul. Hal ini menunjukkan bahwa ASM telah memverifikasi JWT tersebut.