All Products
Search
Document Center

Container Service for Kubernetes:Aktifkan autentikasi webhook server API dengan ack-ram-authenticator di kluster ACK yang dikelola

Last Updated:Jun 24, 2026

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-authenticator akan 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-authenticator juga 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.

123..png

  1. Saat Anda menggunakan tool seperti kubectl untuk mengotentikasi ke server API, klien kubectl menjalankan perintah exec dalam file kubeconfig dan memanggil ack-ram-tool untuk menghasilkan URL token STS yang ditandatangani.

  2. Klien kubectl mengirim webhook autentikasi ke server API, yang kemudian mengarahkannya ke ack-ram-authenticator.

  3. ack-ram-authenticator memanggil operasi GetCallerIdentity untuk memperoleh identitas pemanggil dari URL token, lalu mencocokkannya dengan pemetaan identitas yang ditentukan dalam konfigurasi RAMIdentityMapping.

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

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

  2. Di halaman Clusters, klik nama kluster Anda. Di panel navigasi kiri, klik Components and Add-ons.

  3. 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 opsi EnableNonBootstrapMapping, lalu klik OK.

Langkah 2: Instal klien ack-ram-tool

Di mesin lokal Anda, ack-ram-tool menghasilkan file KubeConfig dengan kredensial untuk kluster.

  1. Unduh ack-ram-tool sesuai OS dan arsitektur Anda.

  2. Berikan izin eksekusi kepada klien:

    chmod +x ./ack-ram-tool
  3. Salin ack-ram-tool ke direktori dalam PATH sistem Anda:

    mkdir -p $HOME/bin && cp ./ack-ram-tool $HOME/bin/ack-ram-tool && export PATH=$HOME/bin:$PATH
  4. (Opsional) Untuk Bash, simpan konfigurasi PATH secara permanen di ~/.bash_profile:

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

Catatan

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

  1. Hasilkan file KubeConfig. Detail perintah: get-kubeconfig.

    ack-ram-tool credential-plugin get-kubeconfig --cluster-id $cluster_id --mode ram-authenticator-token
  2. 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

Catatan

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.

  1. Buat file templat konfigurasi bernama auth.yaml dengan 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 username dan groups. 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 ID Alibaba Cloud Account.

      acs:ram::123456789012****:root

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

      Peran RAM

      acs:ram::<root_uid>:role/<role_name>

      <root_uid> adalah ID Alibaba Cloud Account dan <role_name> adalah nama peran RAM. Lihat View the information about a RAM role untuk melihat ARN peran RAM.

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

  2. Buat instans RAMIdentityMapping:

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

Referensi