Komponen ack-ram-authenticator memungkinkan kluster ACK yang dikelola menggunakan Alibaba Cloud Resource Access Management (RAM) dan webhook untuk mengotentikasi permintaan ke API Server secara aman. Untuk single sign-on (SSO) berbasis peran, komponen ini juga membantu Anda melakukan audit terhadap permintaan ke API Server dari pengguna berbeda yang mengasumsikan peran yang sama secara aman. Topik ini menjelaskan cara menggunakan komponen ack-ram-authenticator untuk autentikasi webhook dengan API Server pada kluster ACK yang dikelola.
Prasyarat
Kluster ACK yang dikelola telah dibuat. Versi kluster harus 1.24.6-aliyun.1 atau lebih baru. Untuk informasi selengkapnya, lihat Buat kluster ACK yang dikelola.
Catatan
Menginstal atau menguninstal komponen ack-ram-authenticator akan me-restart API Server pada lapisan kontrol kluster. Hal ini menyebabkan koneksi persisten ke API Server terputus. Lakukan instalasi atau uninstalasi komponen ini selama jam sepi.
Setelah Anda mengaktifkan autentikasi webhook, file kubeconfig yang dikembalikan oleh operasi API DescribeClusterUserKubeconfig masih dapat digunakan untuk mengakses API Server kluster.
Kluster ACK serverless juga didukung.
Metode autentikasi
Komponen ack-ram-authenticator adalah plugin autentikasi untuk kluster ACK yang dikelola. Komponen ini menggunakan metode autentikasi asli Kubernetes Webhook Token Authentication untuk mengotentikasi permintaan ke API Server kluster menggunakan RAM. Komponen ini juga menyediakan pemetaan antara identitas RAM dan izin RBAC sebagai Custom Resource Definitions (CRDs). Hal ini memungkinkan Anda mengonfigurasi otorisasi RBAC secara lebih fleksibel.
Ketika peran Alibaba Cloud CloudSSO digunakan untuk mengakses kluster ACK yang dikelola, komponen ack-ram-authenticator dapat meneruskan nama sesi identitas pemohon ke API Server. Hal ini memungkinkan audit akses yang lebih aman terhadap permintaan ke API Server kluster dari pengguna berbeda yang mengasumsikan peran yang sama.
Alur autentikasi webhook untuk kluster adalah sebagai berikut:

Saat Anda menggunakan alat seperti kubectl untuk mengirim permintaan autentikasi ke API Server, plugin perintah
execdalam file KubeConfig menjalankan klien ack-ram-tool. Klien tersebut menghasilkan URL permintaan Security Token Service (STS) yang ditandatangani.Permintaan autentikasi webhook dikirim ke API Server kluster ACK yang dikelola. Permintaan tersebut diarahkan ke komponen ack-ram-authenticator berdasarkan konfigurasi autentikasi webhook.
Komponen tersebut menggunakan URL token yang diterima untuk mengotentikasi permintaan melalui API Alibaba Cloud RAM GetCallerIdentity. Jika autentikasi berhasil, komponen ack-ram-authenticator mencari pemetaan antara identitas RAM yang dikembalikan oleh API dan identitas yang dikonfigurasi pengguna dalam resource kustom RAMIdentityMapping (CR) yang ditentukan.
API Server melakukan otorisasi RBAC asli terhadap identitas pengguna dan kelompok yang dipetakan, lalu mengembalikan hasil otorisasi tersebut.
Keunggulan metode autentikasi ini
Dibandingkan dengan metode autentikasi sertifikat X.509 bawaan kluster ACK, metode autentikasi webhook ack-ram-authenticator memiliki keunggulan berikut.
Mendukung skenario SSO cloud enterprise dan menyediakan otorisasi RBAC bidang data yang fleksibel dan terkendali.
Dalam skenario SSO berbasis peran, log audit API Server berisi informasi identitas dari Identity Provider (IDP) enterprise. Hal ini memungkinkan audit perilaku pengguna IDP berbeda yang mengasumsikan peran yang sama secara efektif.
Ketika seorang karyawan meninggalkan perusahaan dan pengguna RAM atau peran RAM-nya dihapus, izin RBAC-nya di kluster secara otomatis dicabut.
Langkah 1: Instal komponen ack-ram-authenticator
Untuk mengaktifkan autentikasi webhook RAM, instal plugin autentikasi sisi server ack-ram-authenticator. Plugin ini berinteraksi dengan API Server kluster untuk autentikasi. Ikuti langkah-langkah berikut untuk menginstal komponen ack-ram-authenticator.
Login ke Konsol ACK. Di panel navigasi kiri, klik Clusters.
Pada halaman Clusters, temukan kluster yang ingin Anda kelola dan klik namanya. Di panel navigasi kiri, klik Add-ons.
Pada halaman Component Management, klik tab Security dan temukan komponen ack-ram-authenticator. Klik Install di pojok kanan bawah kartu. Pada kotak dialog Parameter Settings yang muncul, pilih item konfigurasi
EnableNonBootstrapMapping, lalu klik Confirm.
Langkah 2: Instal klien ack-ram-tool
Klien ack-ram-tool secara otomatis menghasilkan kredensial akses kubeconfig untuk kluster tertentu di mesin lokal Anda.
Unduh klien ack-ram-tool yang sesuai dengan arsitektur lingkungan Anda.
Jalankan perintah berikut untuk memberikan izin eksekusi pada program klien.
chmod +x ./ack-ram-toolJalankan perintah berikut untuk menyalin file ack-ram-tool ke direktori yang ditentukan dalam PATH sistem.
mkdir -p $HOME/bin && cp ./ack-ram-tool $HOME/bin/ack-ram-tool && export PATH=$HOME/bin:$PATH(Opsional) Jalankan perintah berikut untuk membuat konfigurasi PATH untuk
$HOME/binbersifat persisten.echo 'export PATH=$HOME/bin:$PATH' >> ~/.bash_profileJalankan perintah berikut untuk memeriksa versi klien. Jika nomor versi dikembalikan, klien ack-ram-tool telah berhasil diinstal.
ack-ram-tool version
Langkah 3: Konfigurasikan kredensial Alibaba Cloud
Pengguna RAM Alibaba Cloud dan pengguna SSO dapat mengonfigurasi serta memperoleh kredensial akses untuk sumber daya cloud menggunakan metode berikut.
Jika lingkungan saat ini memiliki variabel lingkungan yang terkait dengan kredensial akses, ack-ram-tool akan memprioritaskan kredensial yang dikonfigurasi dalam variabel tersebut. Anda dapat menambahkan parameter --ignore-env-credentials saat menjalankan perintah ack-ram-tool untuk mengabaikannya. Untuk informasi selengkapnya tentang variabel lingkungan terkait kredensial yang didukung ack-ram-tool, lihat Credentials.
Pengguna RAM
Klien ack-ram-tool bergantung pada kredensial kunci Alibaba Cloud yang dikonfigurasi secara lokal untuk mengakses RAM guna melakukan otentikasi identitas.
Untuk informasi selengkapnya tentang cara mengonfigurasi kredensial akses, lihat Alibaba Cloud CLI.
Pengguna SSO
Untuk pengguna Alibaba CloudSSO, Anda dapat menggunakan alat command-line interface (CLI) acs-sso yang disediakan oleh layanan CloudSSO untuk login dan memperoleh kredensial akses ke sumber daya cloud. Untuk informasi selengkapnya tentang acs-sso, lihat Gunakan CLI untuk login ke CloudSSO dan mengakses sumber daya Alibaba Cloud. Alat Alibaba Cloud CLI mendukung mode external, yang memungkinkan Anda memperoleh kredensial sumber daya secara dinamis dengan menjalankan alat command-line eksternal. Jalankan perintah berikut untuk login ke CloudSSO dan mengonfigurasi kredensial secara otomatis di mesin lokal Anda.
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!!!
..............8888888888888888888888 ........=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
Jalankan perintah berikut untuk menghasilkan file kubeconfig. Untuk informasi selengkapnya tentang perintah ini, lihat get-kubeconfig.
ack-ram-tool credential-plugin get-kubeconfig --cluster-id $cluster_id --mode ram-authenticator-tokenKonfigurasikan file kubeconfig yang dikembalikan oleh perintah tersebut di lingkungan lokal atau lingkungan tertentu Anda. Untuk informasi selengkapnya, lihat dokumentasi resmi Kubernetes.
Langkah 5: Konfigurasikan pemetaan antara identitas RAM dan izin RBAC
Pastikan untuk Check item konfigurasi EnableNonBootstrapMapping saat menginstal komponen. Jika tidak, pemetaan yang dikonfigurasi tidak akan berlaku.
Setelah komponen ack-ram-authenticator diinstal, CRD bernama RAMIdentityMapping diinstal di kluster secara default. CRD ini digunakan untuk mengonfigurasi pemetaan antara identitas RAM dan model pengguna Kubernetes. Administrator kluster dapat menggunakan metode berikut untuk mengonfigurasi identitas pengguna dan mengikat pengguna RAM atau peran RAM tertentu ke izin RBAC Kubernetes.
Anda dapat membuat file templat konfigurasi bernama
auth.yamldengan konten YAML berikut.cat >auth.yaml <<EOF --- apiVersion: ramauthenticator.k8s.alibabacloud/v1alpha1 kind: RAMIdentityMapping metadata: name: tester spec: arn: '<ARN>' username: tester groups: - system:users EOFBidang
specdalam instans RAMIdentityMapping hanya mendukung pemetaan satu ARN RAM keusernamedangroups. Untuk memetakan identitas RAM berbeda, Anda harus membuat beberapa instans RAMIdentityMapping.Ganti
<ARN>dengan ARN pengguna RAM atau peran RAM yang ditentukan. Tabel berikut menjelaskan format ARN untuk tipe akun berbeda.Tipe akun
Format ARN
Contoh
Akun Alibaba Cloud
acs:ram::<root_uid>:rootdi 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 username pengguna RAM.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. Untuk informasi selengkapnya tentang cara melihat ARN peran RAM, lihat Lihat peran RAM.acs:ram::123456789012****:role/testrole
Jalankan perintah berikut untuk membuat instans RAMIdentityMapping.
kubectl apply -f auth.yamlKonfigurasikan izin RBAC untuk kluster tujuan. Buat peran dan binding RBAC kustom sesuai kebutuhan.
Berikut adalah contoh cara membuat 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: Gunakan file kubeconfig untuk mengirim permintaan
Gunakan file kubeconfig yang dihasilkan di Langkah 4 untuk mengirim permintaan ke APIServer. Verifikasi bahwa Anda dapat berhasil mengakses API Server dalam cakupan izin Anda.
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