ack-ram-authenticator adalah komponen yang membantu mengotentikasi permintaan ke server API dari Container Service for Kubernetes (ACK) managed cluster menggunakan webhook dan Resource Access Management (RAM). Dalam skenario Single Sign-On (SSO), ack-ram-authenticator memungkinkan server API mengotentikasi permintaan dari pengguna yang mengasumsikan peran yang sama. Topik ini menjelaskan cara kerja ack-ram-authenticator dalam menyelesaikan autentikasi webhook serta langkah-langkah konfigurasi autentikasi tersebut.
Prasyarat
Cluster ACK managed telah dibuat dengan versi 1.24.6-aliyun.1 atau lebih baru. Untuk informasi lebih lanjut, lihat Buat Cluster ACK Managed.
Catatan Penggunaan
Menginstal atau menghapus komponen ack-ram-authenticator akan memicu restart server API di cluster dan menutup semua koneksi persisten ke server API. Disarankan untuk melakukan instalasi atau penghapusan selama jam-jam sepi.
Setelah mengaktifkan autentikasi webhook, Anda dapat terus menggunakan file kubeconfig yang diperoleh dari operasi API DescribeClusterUserKubeconfig untuk mengakses server API seperti biasa.
Komponen ack-ram-authenticator didukung di cluster ACK Serverless.
Cara kerja ack-ram-authenticator
ack-ram-authenticator adalah komponen otentikasi untuk cluster ACK managed. Komponen ini membantu mengotentikasi permintaan ke server API menggunakan otentikasi token webhook asli Kubernetes dan RAM. Komponen ini memungkinkan Anda mendefinisikan pemetaan antara Identitas RAM dan izin kontrol akses berbasis peran (RBAC) melalui definisi sumber daya kustom (CRD), memberikan fleksibilitas lebih dalam memverifikasi izin RBAC dari berbagai identitas RAM.
Ketika pengguna mengasumsikan peran Alibaba Cloud Single Sign-On (SSO) untuk mengakses server API dari cluster ACK managed, ack-ram-authenticator meneruskan nama sesi yang sesuai dengan identitas pengguna ke server API. Ini membantu server API mengotentikasi permintaan dari pengguna yang mengasumsikan peran yang sama.
Gambar berikut mengilustrasikan cara kerja autentikasi webhook dalam cluster ACK managed yang telah menginstal ack-ram-authenticator.

Jika Anda menggunakan alat seperti kubectl untuk mengotentikasi ke server API dari cluster ACK managed, klien kubectl menjalankan perintah
execdalam file kubeconfig dan memanggil ack-ram-tool untuk menghasilkan URL token Security Token Service (STS) yang ditandatangani.Setelah klien kubectl mengirimkan webhook autentikasi ke server API, server API merutekan webhook ke ack-ram-authenticator.
ack-ram-authenticator kemudian memanggil operasi GetCallerIdentity dari RAM untuk mendapatkan informasi identitas pemanggil berdasarkan URL token yang diterima. Setelah operasi GetCallerIdentity mengembalikan informasi identitas, ack-ram-authenticator mencocokkan identitas RAM pemanggil dengan pemetaan identitas yang didefinisikan dalam konfigurasi RAMIdentityMapping.
Server API memverifikasi izin RBAC dari pengguna RAM atau grup pengguna dalam pemetaan yang cocok dan mengembalikan hasil autentikasi ke klien kubectl.
Manfaat ack-ram-authenticator
Dibandingkan dengan mode autentikasi sertifikat x509 default yang disediakan oleh cluster ACK, menggunakan ack-ram-authenticator untuk autentikasi webhook memiliki keuntungan berikut:
Cocok untuk perusahaan yang menggunakan CloudSSO dan menyediakan metode fleksibel serta terkendali untuk mengimplementasikan otorisasi Role-Based Access Control (RBAC).
Dalam skenario di mana pengguna mengakses server API dengan peran SSO, log audit server API berisi informasi identitas yang disediakan oleh penyedia identitas perusahaan (IDP), memungkinkan server API mengotentikasi permintaan dari pengguna yang mengasumsikan peran yang sama.
Saat Anda menghapus pengguna RAM atau peran RAM yang terkait dengan karyawan yang dipartisi, ack-ram-authenticator secara otomatis mencabut izin RBAC cluster terkait.
Langkah 1: Instal komponen ack-ram-authenticator
Untuk mengaktifkan autentikasi webhook, Anda perlu menginstal komponen ack-ram-authenticator untuk berinteraksi dengan server API. Ikuti langkah-langkah berikut:
Masuk ke Konsol ACK. Di panel navigasi kiri, klik Clusters.
Di halaman Clusters, temukan cluster yang ingin Anda kelola dan klik namanya. Di panel navigasi kiri, klik Add-ons.
Di halaman Add-ons, klik tab Security, temukan komponen ack-ram-authenticator, dan klik Install di bagian kanan bawah kartu.
Di kotak dialog Install ack-ram-authenticator, pilih
EnableNonBootstrapMapping, dan klik OK.
Langkah 2: Instal klien ack-ram-tool
Anda dapat menggunakan klien ack-ram-tool untuk menghasilkan file kubeconfig secara otomatis di lingkungan lokal. File kubeconfig berisi kredensial yang digunakan untuk mengakses cluster.
Unduh versi klien ack-ram-tool sesuai dengan sistem operasi yang Anda gunakan.
Jalankan perintah berikut untuk membuat program klien dapat dieksekusi:
chmod +x ./ack-ram-toolJalankan perintah berikut untuk menyalin file ack-ram-tool ke direktori yang ditentukan dalam parameter PATH:
mkdir -p $HOME/bin && cp ./ack-ram-tool $HOME/bin/ack-ram-tool && export PATH=$HOME/bin:$PATHJalankan perintah berikut untuk mempertahankan pengaturan PATH di
$HOME/bin:echo 'export PATH=$HOME/bin:$PATH' >> ~/.bash_profileJalankan perintah berikut untuk memeriksa apakah versi klien yang diinstal dikembalikan. Jika ya, klien ack-ram-tool berhasil diinstal.
ack-ram-tool version
Langkah 3: Konfigurasikan kredensial Alibaba Cloud
Pengguna RAM dan Pengguna CloudSSO dapat menggunakan metode berikut untuk mendapatkan kredensial yang digunakan untuk mengakses sumber daya cloud.
Jika variabel lingkungan terkait kredensial ada, ack-ram-tool secara preferensial menggunakan kredensial yang dikonfigurasi dalam variabel tersebut. Anda dapat mengabaikan variabel ini dengan menambahkan opsi --ignore-env-credentials saat menjalankan perintah ack-ram-tool. Untuk informasi lebih lanjut tentang variabel lingkungan terkait kredensial yang didukung oleh ack-ram-tool, lihat Kredensial.
Pengguna RAM
Klien ack-ram-tool menggunakan kredensial lokal untuk mengakses RAM dan menyelesaikan otentikasi.
Untuk informasi lebih lanjut tentang cara mengonfigurasi kredensial yang digunakan untuk mengakses sumber daya cloud, lihat CLI Alibaba Cloud.
Pengguna CloudSSO
Pengguna CloudSSO dapat menggunakan CLI acs-sso yang disediakan oleh CloudSSO untuk mengakses CloudSSO dan mendapatkan kredensial yang digunakan untuk mengakses sumber daya cloud. Untuk informasi lebih lanjut tentang acs-sso, lihat Gunakan CLI Alibaba Cloud untuk Mengakses CloudSSO dan Sumber Daya Alibaba Cloud. CLI Alibaba Cloud mendukung mode eksternal. Anda dapat menggunakan mode ini untuk mendapatkan kredensial secara dinamis melalui program eksternal. Jalankan perintah berikut untuk mengakses CloudSSO dari lingkungan lokal dan mengotomatiskan 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: ...........................=Z88D888888888D..........
.........+88888888 ..........................................88888888D..........
.........+88888888 .......Selamat datang di Alibaba Cloud.......O8888888D..........
.........+88888888 ............. ************* ..............O8888888D..........
.........+88888888 .... Command Line Interface(Reloaded) ....O8888888D..........
.........+88888888...........................................88888888D..........
..........D888888888888DO+. ..........................?ND888888888888D..........
...........O8888888888888888888888...........D8888888888888888888888=...........
............ .:D8888888888888888888.........78888888888888888888O ..............Langkah 4: Hasilkan file kubeconfig
Jalankan perintah berikut untuk menghasilkan file kubeconfig: Untuk informasi lebih lanjut, lihat get-kubeconfig.
ack-ram-tool credential-plugin get-kubeconfig --cluster-id $cluster_id --mode ram-authenticator-tokenUbah file kubeconfig yang dikembalikan di lingkungan lokal atau di lingkungan tertentu. Untuk informasi lebih lanjut, lihat Dokumentasi Kubernetes.
Langkah 5: Pemetaan Identitas RAM ke Izin RBAC
Pastikan parameter EnableNonBootstrapMapping dipilih selama instalasi komponen. Jika tidak, pemetaan yang dikonfigurasi tidak akan berlaku.
Setelah komponen ack-ram-authenticator diinstal, definisi sumber daya kustom (CRD) bernama RAMIdentityMapping dibuat secara default di cluster. CRD digunakan untuk memetakan identitas RAM ke izin RBAC Kubernetes. Administrator izin cluster dapat melakukan langkah-langkah berikut untuk memetakan pengguna RAM atau peran RAM ke izin RBAC Kubernetes.
Buat file bernama auth.yaml dan tambahkan konten berikut ke file:
cat >auth.yaml <<EOF --- apiVersion: ramauthenticator.k8s.alibabacloud/v1alpha1 kind: RAMIdentityMapping metadata: name: tester spec: arn: '<ARN>' username: tester groups: - system:users EOFDi bagian
specdari CRD RAMIdentityMapping, Anda dapat memetakan ARN RAM Alibaba Cloud ke hanya satu pasanganusernamedangroups. Untuk memetakan ARN ke beberapa identitas, Anda perlu membuat jumlah CRD RAMIdentityMapping yang sama.Tipe akun
Format ARN
Contoh
Akun Alibaba Cloud
acs:ram::<root_uid>:root, di mana<root_uid>adalah ID akun Alibaba Cloud.acs:ram::123456789012****:rootPengguna RAM
acs:ram::<root_uid>:user/<user_name>, di mana<root_uid>adalah ID akun Alibaba Cloud dan<user_name>adalah nama pengguna RAM yang ingin Anda gunakan.acs:ram::123456789012****:user/testuserPeran RAM
acs:ram::<root_uid>:role/<role_name>, di mana<root_uid>adalah ID akun Alibaba Cloud dan<role_name>adalah nama peran RAM yang ingin Anda gunakan. Untuk informasi lebih lanjut tentang cara melihat ARN peran RAM, lihat Lihat informasi tentang peran RAM.acs:ram::123456789012****:role/testrole
Jalankan perintah berikut untuk membuat CRD RAMIdentityMapping:
kubectl apply -f auth.yamlBuat peran RBAC kustom dan berikan izin cluster yang diperlukan ke peran tersebut.
Blok kode berikut menunjukkan contohnya:
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: Gunakan file kubeconfig untuk mengirim permintaan
Gunakan file kubeconfig yang dihasilkan di Langkah 4 untuk mengirim permintaan ke server API. Kemudian, periksa apakah permintaan diproses tanpa masalah izin.
kubectl get nsOutput 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