全部产品
Search
文档中心

Container Service for Kubernetes:Gunakan ack-ram-authenticator untuk autentikasi webhook pada API Server kluster ACK yang dikelola

更新时间:Jan 31, 2026

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:

123..png

  1. Saat Anda menggunakan alat seperti kubectl untuk mengirim permintaan autentikasi ke API Server, plugin perintah exec dalam file KubeConfig menjalankan klien ack-ram-tool. Klien tersebut menghasilkan URL permintaan Security Token Service (STS) yang ditandatangani.

  2. Permintaan autentikasi webhook dikirim ke API Server kluster ACK yang dikelola. Permintaan tersebut diarahkan ke komponen ack-ram-authenticator berdasarkan konfigurasi autentikasi webhook.

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

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

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

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

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

  1. Unduh klien ack-ram-tool yang sesuai dengan arsitektur lingkungan Anda.

  2. Jalankan perintah berikut untuk memberikan izin eksekusi pada program klien.

    chmod +x ./ack-ram-tool
  3. Jalankan 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
  4. (Opsional) Jalankan perintah berikut untuk membuat konfigurasi PATH untuk $HOME/bin bersifat persisten.

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

Catatan

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

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

Penting

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.

  1. Anda dapat membuat file templat konfigurasi bernama auth.yaml dengan 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    
    EOF
    • Bidang spec dalam instans RAMIdentityMapping hanya mendukung pemetaan satu ARN RAM ke username dan groups. 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>: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 username pengguna RAM.

      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. Untuk informasi selengkapnya tentang cara melihat ARN peran RAM, lihat Lihat peran RAM.

      acs:ram::123456789012****:role/testrole

  2. Jalankan perintah berikut untuk membuat instans RAMIdentityMapping.

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