Gunakan ack-ram-authenticator untuk autentikasi webhook RAM yang aman pada permintaan ke server API kluster ACK yang dikelola. Petakan identitas RAM ke otorisasi RBAC dan bedakan pengguna SSO yang mengasumsikan peran yang sama dalam log audit. Topik ini menjelaskan metode autentikasi webhook dan alur kerjanya.
Prasyarat
Sebuah ACK managed cluster (versi 1.24.6-aliyun.1 atau lebih baru) telah dibuat. Lihat Create an ACK managed cluster.
Catatan penggunaan
-
Menginstal atau menguninstall
ack-ram-authenticatorakan me-restart server API dan memutus koneksi berdurasi panjang. Lakukan penjadwalan selama jam sepi. -
Autentikasi webhook tidak memblokir akses ke API server menggunakan KubeConfig dari
DescribeClusterUserKubeconfig. -
ack-ram-authenticatorjuga didukung pada Kluster Layanan Kontainer Serverless (ACK Serverless Cluster).
Cara kerja ack-ram-authenticator
ack-ram-authenticator adalah add-on autentikasi untuk kluster ACK yang dikelola. Add-on ini menggunakan Webhook Token Authentication Kubernetes untuk mengotentikasi permintaan ke server API dengan Alibaba Cloud RAM dan memetakan identitas RAM ke izin RBAC sebagai CRD.
Ketika pengguna mengasumsikan peran Alibaba Cloud SSO untuk mengakses server API kluster ACK yang dikelola, ack-ram-authenticator meneruskan nama sesi identitas tersebut ke server API. Hal ini memungkinkan server API mengotentikasi permintaan dari pengguna berbeda yang mengasumsikan peran yang sama.
Gambar berikut menunjukkan cara kerja autentikasi webhook di kluster ACK yang dikelola dengan ack-ram-authenticator terinstal.

-
Saat Anda menggunakan tool seperti kubectl untuk mengotentikasi ke server API, klien kubectl menjalankan perintah
execdalam file kubeconfig dan memanggil ack-ram-tool untuk menghasilkan URL token STS yang ditandatangani. -
Klien kubectl mengirim webhook autentikasi ke server API, yang kemudian mengarahkannya ke ack-ram-authenticator.
-
ack-ram-authenticator memanggil operasi GetCallerIdentity untuk memperoleh identitas pemanggil dari URL token, lalu mencocokkannya dengan pemetaan identitas yang ditentukan dalam konfigurasi RAMIdentityMapping.
-
Server API memverifikasi izin RBAC dari pengguna RAM atau grup pengguna RAM yang cocok dan mengembalikan hasil autentikasi ke klien kubectl.
Manfaat
Dibandingkan dengan autentikasi sertifikat X.509 bawaan di ACK, autentikasi webhook dengan ack-ram-authenticator menawarkan:
-
Integrasi SSO perusahaan dengan otorisasi RBAC bidang data yang fleksibel dan mudah dikelola.
-
Dalam skenario SSO, log audit API server mencakup informasi identitas Identity Provider (IdP) perusahaan untuk mengaudit tindakan dari pengguna IdP berbeda yang mengasumsikan peran yang sama.
-
Ketika pengguna RAM atau peran RAM karyawan yang keluar dihapus, izin RBAC klusternya secara otomatis dicabut.
Langkah 1: Instal ack-ram-authenticator
Instal add-on sisi server ack-ram-authenticator untuk mengaktifkan autentikasi webhook RAM dengan API server kluster.
Login ke ACK console. Di panel navigasi kiri, klik Clusters.
Di halaman Clusters, klik nama kluster Anda. Di panel navigasi kiri, klik Components and Add-ons.
-
Di halaman Add-ons, klik tab Security, temukan add-on
ack-ram-authenticator, lalu klik Install di pojok kanan bawah kartu. Di kotak dialog Parameters yang muncul, pilih opsiEnableNonBootstrapMapping, lalu klik OK.
Langkah 2: Instal klien ack-ram-tool
Di mesin lokal Anda, ack-ram-tool menghasilkan file KubeConfig dengan kredensial untuk kluster.
-
Unduh ack-ram-tool sesuai OS dan arsitektur Anda.
-
Berikan izin eksekusi kepada klien:
chmod +x ./ack-ram-tool -
Salin ack-ram-tool ke direktori dalam
PATHsistem Anda:mkdir -p $HOME/bin && cp ./ack-ram-tool $HOME/bin/ack-ram-tool && export PATH=$HOME/bin:$PATH -
(Opsional) Untuk Bash, simpan konfigurasi
PATHsecara permanen di~/.bash_profile:echo 'export PATH=$HOME/bin:$PATH' >> ~/.bash_profile -
Verifikasi instalasi. Perintah ini akan mengembalikan versi klien.
ack-ram-tool version
Langkah 3: Konfigurasi kredensial Alibaba Cloud
Pengguna RAM dan pengguna SSO dapat mengonfigurasi kredensial Alibaba Cloud menggunakan salah satu metode berikut.
Jika variabel lingkungan terkait kredensial telah diatur, ack-ram-tool akan menggunakannya secara default. Tambahkan --ignore-env-credentials ke perintah ack-ram-tool Anda untuk mengabaikannya. Variabel lingkungan yang didukung oleh ack-ram-tool: Credentials.
Pengguna RAM
ack-ram-tool menggunakan kredensial Alibaba Cloud yang dikonfigurasi secara lokal untuk mengotentikasi dengan RAM.
Lihat Alibaba Cloud CLI untuk mengonfigurasi kredensial akses.
Pengguna SSO
Pengguna SSO menggunakan acs-sso, tool CLI CloudSSO, untuk login dan memperoleh kredensial. Lihat Use the CLI to log on to CloudSSO and access Alibaba Cloud resources untuk acs-sso. Mode external Alibaba Cloud CLI memperoleh kredensial dengan menjalankan perintah eksternal. Konfigurasikan login CloudSSO otomatis dan pengambilan kredensial:
aliyun configure --mode External --profile sso
Configuring profile 'sso' in 'External' authenticate mode...
Process Command [acs-sso login --profile sso]:
Default Region Id [cn-shanghai]:
Default Output Format [json]: json (Only support json)
Default Language [zh|en] en:
Saving profile[sso] ...Done.
Configure Done!!!
..............888888888888888888888 ........=8888888888888888888D=..............
...........88888888888888888888888 ..........D8888888888888888888888I...........
.........,8888888888888ZI: ...........................=Z88D8888888888D..........
.........+88888888 ..........................................88888888D..........
.........+88888888 .......Welcome to use Alibaba Cloud.......O8888888D..........
.........+88888888 ............. ************* ..............O8888888D..........
.........+88888888 .... Command Line Interface(Reloaded) ....O8888888D..........
.........+88888888...........................................88888888D..........
..........D888888888888DO+. ..........................?ND888888888888D..........
...........O8888888888888888888888...........D8888888888888888888888=...........
............ .:D8888888888888888888.........78888888888888888888O ..............
Langkah 4: Hasilkan file KubeConfig
-
Hasilkan file KubeConfig. Detail perintah: get-kubeconfig.
ack-ram-tool credential-plugin get-kubeconfig --cluster-id $cluster_id --mode ram-authenticator-token -
Gabungkan atau ganti KubeConfig Anda yang sudah ada dengan file yang dihasilkan. Lihat Organizing Cluster Access Using kubeconfig Files.
Langkah 5: Petakan identitas RAM ke izin RBAC
Pilih opsi EnableNonBootstrapMapping saat instalasi. Jika tidak, pemetaan berikut tidak akan berlaku.
Setelah Anda menginstal ack-ram-authenticator, kluster membuat CRD RAMIdentityMapping yang memetakan identitas RAM ke model pengguna Kubernetes. Sebagai administrator kluster, petakan pengguna RAM atau peran RAM ke pengguna Kubernetes dengan izin RBAC.
-
Buat file templat konfigurasi bernama
auth.yamldengan konten berikut:cat >auth.yaml <<EOF --- apiVersion: ramauthenticator.k8s.alibabacloud/v1alpha1 kind: RAMIdentityMapping metadata: name: tester spec: arn: '<ARN>' username: tester groups: - system:users EOF-
Setiap instans RAMIdentityMapping memetakan satu ARN RAM ke
usernamedangroups. Buat satu instans untuk setiap pemetaan. -
Ganti
<ARN>dengan ARN pengguna RAM atau peran RAM target. Tabel berikut mencantumkan format ARN berdasarkan jenis akun.Jenis akun
Format ARN
Contoh
Akun Alibaba Cloud
acs:ram::<root_uid>:root<root_uid>adalah IDAlibaba Cloud Account.acs:ram::123456789012****:rootPengguna RAM
acs:ram::<root_uid>:user/<user_name><root_uid>adalah ID Akun Alibaba Cloud dan<user_name>adalah nama pengguna RAM.acs:ram::123456789012****:user/testuserPeran RAM
acs:ram::<root_uid>:role/<role_name><root_uid>adalah IDAlibaba Cloud Accountdan<role_name>adalah nama peran RAM. Lihat View the information about a RAM role untuk melihat ARN peran RAM.acs:ram::123456789012****:role/testrole
-
-
Buat instans
RAMIdentityMapping:kubectl apply -f auth.yaml -
Konfigurasikan izin RBAC untuk kluster. Buat role dan binding RBAC kustom sesuai kebutuhan.
Contoh binding RBAC:
cat >binding.yaml <<EOF --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: tester-clusterrolebinding roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: cs:ops subjects: - apiGroup: rbac.authorization.k8s.io kind: User name: tester EOF kubectl apply -f binding.yaml
Langkah 6: Kirim permintaan dengan KubeConfig
Gunakan file KubeConfig dari Langkah 4 untuk mengirim permintaan ke API server dan verifikasi keberhasilannya sesuai izin yang dikonfigurasi.
kubectl get ns
Output yang diharapkan:
NAME STATUS AGE
arms-prom Active 4h48m
default Active 4h50m
kube-node-lease Active 4h50m
kube-public Active 4h50m
kube-system Active 4h50m