全部产品
Search
文档中心

Container Service for Kubernetes:Gunakan ack-ram-authenticator untuk autentikasi webhook server API dalam cluster ACK managed

更新时间:Jul 06, 2025

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.

123..png

  1. Jika Anda menggunakan alat seperti kubectl untuk mengotentikasi ke server API dari cluster ACK managed, klien kubectl menjalankan perintah exec dalam file kubeconfig dan memanggil ack-ram-tool untuk menghasilkan URL token Security Token Service (STS) yang ditandatangani.

  2. Setelah klien kubectl mengirimkan webhook autentikasi ke server API, server API merutekan webhook ke ack-ram-authenticator.

  3. 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.

  4. 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:

  1. Masuk ke Konsol ACK. Di panel navigasi kiri, klik Clusters.

  2. Di halaman Clusters, temukan cluster yang ingin Anda kelola dan klik namanya. Di panel navigasi kiri, klik Add-ons.

  3. Di halaman Add-ons, klik tab Security, temukan komponen ack-ram-authenticator, dan klik Install di bagian kanan bawah kartu.

  4. 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.

  1. Unduh versi klien ack-ram-tool sesuai dengan sistem operasi yang Anda gunakan.

  2. Jalankan perintah berikut untuk membuat program klien dapat dieksekusi:

    chmod +x ./ack-ram-tool
  3. Jalankan 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:$PATH
  4. Jalankan perintah berikut untuk mempertahankan pengaturan PATH di $HOME/bin:

    echo 'export PATH=$HOME/bin:$PATH' >> ~/.bash_profile
    
  5. Jalankan 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.

Catatan

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

  1. 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-token
  2. Ubah 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

Penting

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.

  1. 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    
    EOF
    • Di bagian spec dari CRD RAMIdentityMapping, Anda dapat memetakan ARN RAM Alibaba Cloud ke hanya satu pasangan username dan groups. 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****:root

      Pengguna 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/testuser

      Peran 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

  2. Jalankan perintah berikut untuk membuat CRD RAMIdentityMapping:

    kubectl apply -f auth.yaml
  3. Buat 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 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

Referensi

ack-ram-authenticator