All Products
Search
Document Center

Container Service for Kubernetes:Gunakan RRSA untuk kontrol akses tingkat pod

Last Updated:Jun 16, 2026

Tetapkan setiap pod peran RAM khusus dengan token STS berumur pendek alih-alih menggunakan kredensial node bersama.

RRSA menyediakan dua properti keamanan utama:

  • Hak istimewa minimal: Batasi izin RAM hanya untuk akun layanan tertentu sehingga hanya pod yang menggunakan akun tersebut yang dapat mengakses sumber daya terkait. Pendekatan ini menghilangkan kebutuhan akan pasangan Kunci Akses statis.

  • Isolasi kredensial: Pod tidak dapat mengakses kredensial yang digunakan oleh pod lain pada node yang sama. Tanpa RRSA, semua pod pada suatu node berbagi izin dari peran instans Elastic Compute Service (ECS) yang mendasarinya.

Cara kerja RRSA

Tanpa RRSA, semua pod pada suatu node berbagi izin peran instans ECS melalui metadata instans, yang menimbulkan risiko keamanan signifikan.

RRSA mengatasi hal ini dengan mengikat peran RAM ke akun layanan Kubernetes. Saat pod dimulai, pod tersebut menerima token OpenID Connect (OIDC) yang dibatasi cakupannya ke akun layanan pod tersebut, memanggil API AssumeRoleWithOIDC, dan menerima token STS berbasis peran untuk akses API cloud.

Alur autentikasi:

  1. Injeksi token: Saat pod dimulai, ACK menggunakan proyeksi volume token akun layanan untuk memasang file token OIDC yang dibatasi cakupannya ke akun layanan pod tersebut.

  2. Mengasumsikan peran: Aplikasi memanggil API AssumeRoleWithOIDC menggunakan token OIDC ini.

  3. Menerima kredensial STS: RAM Alibaba Cloud memverifikasi token OIDC terhadap penyedia identitas OIDC kluster dan mengembalikan kredensial STS berbasis peran.

  4. Akses sumber daya: Pod menggunakan kredensial STS berumur pendek untuk mengakses API Alibaba Cloud yang diizinkan.

Token OIDC berumur pendek. Baca token dari file pada setiap permintaan autentikasi — jangan cache. ACK memperbarui token secara otomatis sebelum kedaluwarsa.

Saat RRSA diaktifkan, ACK secara otomatis:

  • Membuat penerbit OIDC khusus untuk kluster.

  • Mengaktifkan proyeksi volume token akun layanan untuk kluster.

  • Membuat penyedia identitas (IdP) RAM di akun Anda, bernama ack-rrsa-<cluster_id>, dikonfigurasi untuk Single Sign-On (SSO) dengan penerbit OIDC kluster.

Sebelum memulai

Pastikan hal-hal berikut sebelum mengonfigurasi RRSA:

  • Versi kluster: Kluster ACK (Basic, Pro, Serverless, atau Edge) menjalankan Kubernetes 1.22 atau lebih baru.

  • Izin: Akses administratif ke Konsol ACK dan Konsol RAM.

  • Batas masa berlaku token: Setelah RRSA diaktifkan, token ServiceAccount yang baru dibuat memiliki masa berlaku maksimum 12 jam.

Langkah 1: Aktifkan RRSA untuk kluster Anda

Aktifkan RRSA saat pembuatan kluster atau setelah kluster berjalan. Untuk kluster ACK Serverless, aktifkan RRSA setelah pembuatan kluster dari halaman detail kluster.

Aktifkan saat pembuatan kluster

Saat membuat kluster ACK yang dikelola atau kluster ACK Edge, buka langkah Cluster Configurations, perluas Advanced Options (Optional), lalu klik Enable di samping RRSA OIDC.

image

Aktifkan untuk kluster yang sudah ada

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

  2. Klik nama kluster Anda. Di panel navigasi kiri, klik Cluster Information.

  3. Di tab Basic Information, gulir ke bagian Security and Auditing dan klik Enable di samping RRSA OIDC.

    image

  4. Pada kotak dialog Enable RRSA, klik Confirm. Tunggu hingga status kluster berubah dari Updating menjadi Running. RRSA kini telah diaktifkan.

Dapatkan URL dan ARN penyedia OIDC

Setelah RRSA diaktifkan, arahkan kursor ke label Enabled di samping RRSA OIDC dalam bagian Security and Auditing. URL dan Nama Sumber Daya Alibaba Cloud (ARN) penyedia OIDC akan ditampilkan.

image

Catat kedua nilai tersebut untuk digunakan saat mengonfigurasi peran RAM dan templat aplikasi.

Langkah 2: Konfigurasi aplikasi untuk menggunakan RRSA

Pengaturan untuk aplikasi contoh terdiri dari dua bagian:

  • Pengaturan tingkat kluster (lakukan sekali per kluster): Aktifkan RRSA dan instal ack-pod-identity-webhook.

  • Pengaturan per aplikasi (ulangi untuk setiap aplikasi): Buat atau gunakan peran RAM yang sudah ada, berikan izin, lalu terapkan aplikasi.

Konfigurasi contoh

Item

Nilai

Namespace

rrsa-demo

Akun layanan

demo-sa

Peran RAM

demo-role-for-rrsa

Sample workflow

1. Instal ack-pod-identity-webhook

ack-pod-identity-webhook secara otomatis menyuntikkan path file token OIDC dan ARN peran RAM ke dalam pod sebagai variabel lingkungan. Lewati langkah ini jika ingin mengonfigurasi templat pod secara manual. Lihat Mengonfigurasi templat pod secara manual.

  1. Di Konsol ACK, klik nama kluster Anda. Di panel navigasi kiri, klik Add-ons.

  2. Di halaman Add-ons, klik tab Security.

  3. Temukan ack-pod-identity-webhook dan klik Install.

  4. Konfirmasi informasi dan klik OK.

2. Buat atau konfigurasi peran RAM untuk penyedia identitas OIDC

Buat peran RAM

Buat peran RAM bernama demo-role-for-rrsa yang mempercayai penyedia identitas OIDC (IdP) kluster. Lihat Buat peran RAM untuk IdP OIDC.

Gunakan nilai parameter berikut:

Parameter

Nilai

Identity Provider Type

Pilih OIDC.

Identity Provider

Pilih IdP bernama ack-rrsa-<cluster_id>, dengan <cluster_id> sebagai ID kluster Anda.

Condition

  • oidc:iss: Pertahankan nilai default.

  • oidc:aud: Pertahankan nilai default.

  • oidc:sub: Tambahkan kondisi ini secara manual.

    • Key: Pilih oidc:sub

    • Operator: Pilih StringEquals

    • Value: Masukkan system:serviceaccount:<namespace>:<serviceAccountName>, dengan <namespace> sebagai namespace aplikasi Anda dan <serviceAccountName> sebagai nama akun layanan. Untuk aplikasi uji dalam topik ini, masukkan system:serviceaccount:rrsa-demo:demo-sa.

Role Name

demo-role-for-rrsa

Kondisi oidc:sub membatasi kepercayaan hanya ke akun layanan tertentu dalam namespace tertentu. Ganti rrsa-demo dan demo-sa dengan namespace dan nama akun layanan aktual Anda.

Konfigurasi peran RAM yang sudah ada

Untuk menggunakan peran RAM yang sudah ada, perbarui kebijakan kepercayaannya agar mengizinkan akun layanan mengasumsikan peran tersebut. Lihat Edit kebijakan kepercayaan peran RAM.

Tambahkan entri Statement dengan struktur berikut:

{
  "Action": "sts:AssumeRole",
  "Condition": {
    "StringEquals": {
      "oidc:aud": "sts.aliyuncs.com",
      "oidc:iss": "<oidc_issuer_url>",
      "oidc:sub": "system:serviceaccount:<namespace>:<service_account>"
    }
  },
  "Effect": "Allow",
  "Principal": {
    "Federated": [
      "<oidc_provider_arn>"
    ]
  }
}

Ganti placeholder:

Placeholder

Nilai

<oidc_issuer_url>

URL penyedia OIDC kluster — lihat Dapatkan URL dan ARN penyedia OIDC

<oidc_provider_arn>

ARN penyedia OIDC kluster — lihat Dapatkan URL dan ARN penyedia OIDC

<namespace>

Namespace aplikasi

<service_account>

Akun layanan yang digunakan oleh aplikasi

Untuk mengotomatiskan pembaruan kebijakan kepercayaan, gunakan ack-ram-tool:

ack-ram-tool rrsa associate-role --cluster-id <cluster_id> \
    --namespace <namespace> --service-account <service_account> \
    --role-name <role_name> --create-role-if-not-exist

3. Berikan izin kepada peran RAM

Lampirkan kebijakan AliyunCSReadOnlyAccess ke demo-role-for-rrsa. Lihat Berikan izin kepada peran RAM.

Hal ini memberikan akses read-only kepada aplikasi terhadap informasi kluster ACK.

4. Terapkan aplikasi Anda

Buat file bernama demo.yaml dengan konten berikut. Label namespace pod-identity.alibabacloud.com/injection: 'on' dan anotasi akun layanan pod-identity.alibabacloud.com/role-name: demo-role-for-rrsa mengaktifkan injeksi otomatis oleh ack-pod-identity-webhook. Lihat ack-pod-identity-webhook.

---
apiVersion: v1
kind: Namespace
metadata:
  name: rrsa-demo
  labels:
    pod-identity.alibabacloud.com/injection: 'on'

---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: demo-sa
  namespace: rrsa-demo
  annotations:
    pod-identity.alibabacloud.com/role-name: demo-role-for-rrsa

---
apiVersion: v1
kind: Pod
metadata:
  name: demo
  namespace: rrsa-demo
spec:
  serviceAccountName: demo-sa
  containers:
    - image: registry.cn-hangzhou.aliyuncs.com/acs/ack-ram-tool:1.3.0
      args:
        - rrsa
        - demo
      name: demo
  restartPolicy: OnFailure

Terapkan aplikasi:

kubectl apply -f demo.yaml

5. Verifikasi konfigurasi yang diinjeksikan

Konfirmasi bahwa ack-pod-identity-webhook telah menginjeksikan variabel lingkungan dan mount volume yang diperlukan:

kubectl -n rrsa-demo get pod demo -o yaml

Output yang diharapkan mencakup item yang diinjeksikan berikut:

Kategori

Item

Deskripsi

Variabel lingkungan

ALIBABA_CLOUD_ROLE_ARN

ARN peran RAM yang akan diasumsikan

ALIBABA_CLOUD_OIDC_PROVIDER_ARN

ARN penyedia identitas OIDC

ALIBABA_CLOUD_OIDC_TOKEN_FILE

Path ke file token OIDC

ALIBABA_CLOUD_STS_ENDPOINT

Titik akhir VPC STS untuk wilayah saat ini

ALIBABA_CLOUD_STS_REGION

Identifikasi wilayah untuk titik akhir STS

ALIBABA_CLOUD_VPC_ENDPOINT_ENABLED

Apakah akses STS dilakukan melalui titik akhir internal VPC

VolumeMount

rrsa-oidc-token

Memasang token OIDC ke dalam kontainer

Volume

rrsa-oidc-token

Sumber volume proyeksi untuk token OIDC

Spesifikasi pod yang diinjeksikan dengan benar tampak seperti berikut:

apiVersion: v1
kind: Pod
metadata:
  name: demo
  namespace: rrsa-demo
spec:
  containers:
  - args:
    - rrsa
    - demo
    env:
    - name: ALIBABA_CLOUD_ROLE_ARN
      value: acs:ram::1***:role/demo-role-for-rrsa
    - name: ALIBABA_CLOUD_OIDC_PROVIDER_ARN
      value: acs:ram::1***:oidc-provider/ack-rrsa-c***
    - name: ALIBABA_CLOUD_OIDC_TOKEN_FILE
      value: /var/run/secrets/ack.alibabacloud.com/rrsa-tokens/token
    - name: ALIBABA_CLOUD_STS_ENDPOINT
      value: sts-vpc.cn-hangzhou.aliyuncs.com
    - name: ALIBABA_CLOUD_STS_REGION
      value: cn-hangzhou
    - name: ALIBABA_CLOUD_VPC_ENDPOINT_ENABLED
      value: "true"
    image: registry.cn-hangzhou.aliyuncs.com/acs/ack-ram-tool:1.3.0
    imagePullPolicy: Always
    name: demo
    volumeMounts:
    - mountPath: /var/run/secrets/kubernetes.io/serviceaccount
      name: kube-api-access-4bwdg
      readOnly: true
    - mountPath: /var/run/secrets/ack.alibabacloud.com/rrsa-tokens
      name: rrsa-oidc-token
      readOnly: true
  restartPolicy: OnFailure
  serviceAccount: demo-sa
  serviceAccountName: demo-sa
  volumes:
  - name: kube-api-access-4bwdg
    projected:
      defaultMode: 420
      sources:
      - serviceAccountToken:
          expirationSeconds: 3607
          path: token
      - configMap:
          items:
          - key: ca.crt
            path: ca.crt
          name: kube-root-ca.crt
      - downwardAPI:
          items:
          - fieldRef:
              apiVersion: v1
              fieldPath: metadata.namespace
            path: namespace
  - name: rrsa-oidc-token
    projected:
      defaultMode: 420
      sources:
      - serviceAccountToken:
          audience: sts.aliyuncs.com
          expirationSeconds: 3600
          path: token

6. Periksa log aplikasi

Cetak log aplikasi:

kubectl -n rrsa-demo logs demo

Jika berhasil, akan menampilkan daftar kluster dalam akun Alibaba Cloud Anda:

cluster id: cf***, cluster name: foo*
cluster id: c8***, cluster name: bar*
cluster id: c4***, cluster name: foob*

Opsi tambahan: Untuk memverifikasi penerapan hak istimewa minimal, lepaskan kebijakan AliyunCSReadOnlyAccess dari peran RAM (lihat Hapus izin dari peran RAM). Tunggu 30 detik, lalu jalankan kembali perintah log. Aplikasi akan mengembalikan error 403 seperti berikut:

   StatusCode: 403
   Code: StatusForbidden
   Message: code: 403, STSToken policy Forbidden for action cs:DescribeClustersForRegion request id: E78A2E2D-***
   Data: {"accessDeniedDetail":{"AuthAction":"cs:DescribeClustersForRegion","AuthPrincipalDisplayName":"demo-role-for-rrsa:ack-ram-tool","AuthPrincipalOwnerId":"11***","AuthPrincipalType":"AssumedRoleUser","NoPermissionType":"ImplicitDeny","PolicyType":"ResourceGroupLevelIdentityBasedPolicy"},"code":"StatusForbidden","message":"STSToken policy Forbidden for action cs:DescribeClustersForRegion","requestId":"E78A2E2D-***","status":403,"statusCode":403}

Hal ini mengonfirmasi bahwa RRSA menerapkan izin pada tingkat pod.

Tingkat lanjut: Mengonfigurasi templat pod secara manual

Untuk melewati ack-pod-identity-webhook, tambahkan secara manual variabel lingkungan dan volume proyeksi yang diperlukan ke spesifikasi pod:

apiVersion: v1
kind: Pod
metadata:
  name: demo
  namespace: rrsa-demo
spec:
  containers:
  - args:
    - rrsa
    - demo
    env:
    - name: ALIBABA_CLOUD_ROLE_ARN
      value: <role_arn>
    - name: ALIBABA_CLOUD_OIDC_PROVIDER_ARN
      value: <oidc_provider_arn>
    - name: ALIBABA_CLOUD_OIDC_TOKEN_FILE
      value: /var/run/secrets/ack.alibabacloud.com/rrsa-tokens/token
    image: registry.cn-hangzhou.aliyuncs.com/acs/ack-ram-tool:1.3.0
    imagePullPolicy: Always
    name: demo
    volumeMounts:
    - mountPath: /var/run/secrets/ack.alibabacloud.com/rrsa-tokens
      name: rrsa-oidc-token
      readOnly: true
  restartPolicy: OnFailure
  serviceAccount: demo-sa
  serviceAccountName: demo-sa
  volumes:
  - name: rrsa-oidc-token
    projected:
      defaultMode: 420
      sources:
      - serviceAccountToken:
          audience: sts.aliyuncs.com
          expirationSeconds: 3600
          path: token

Ganti nilai placeholder:

Placeholder

Nilai

Di mana menemukannya

<role_arn>

ARN peran RAM

Halaman Roles di Konsol RAM

<oidc_provider_arn>

ARN penyedia OIDC

Bagian Security and Auditing di halaman detail kluster. Lihat Dapatkan URL dan ARN penyedia OIDC.

Penting

Tetapkan audience ke sts.aliyuncs.com. Ini adalah ID klien penyedia OIDC, bukan domain titik akhir STS yang digunakan oleh SDK.

Tetapkan expirationSeconds ke nilai antara 600 dan 43200 (detik). Nilai di atas 43200 dibatasi maksimal 12 jam.

Setelah redeployment, aplikasi membaca token OIDC dari ALIBABA_CLOUD_OIDC_TOKEN_FILE, menukarnya dengan token STS melalui AssumeRoleWithOIDC, lalu memanggil API cloud dengan token STS tersebut. Lihat AssumeRoleWithOIDC.

Dukungan SDK

Alibaba Cloud SDK V2.0 mendukung autentikasi token OIDC RRSA. SDK layanan cloud apa pun yang dibangun di atas V2.0 dan mendukung token STS juga mendukung RRSA.

Versi SDK yang didukung dan demo

Bahasa

Versi minimum

Demo

Go

Alibaba Cloud Credentials for Go 1.2.6

Demo SDK Go

Java

Alibaba Cloud Credentials for Java 0.2.10

Demo SDK Java

Python 3

Alibaba Cloud Credentials for Python 0.3.1

Demo SDK Python

Node.js / TypeScript

Alibaba Cloud Credentials for TypeScript/Node.js 2.2.6

Demo SDK Node.js

Lihat dokumentasi kredensial untuk setiap bahasa — Metode 6: Gunakan peran RAM dari IdP OIDC.

Demo SDK khusus layanan cloud

Beberapa SDK layanan cloud menyediakan dukungan token OIDC native:

Layanan cloud

SDK

Demo

Object Storage Service (OSS)

OSS Go SDK — Metode 5: Gunakan OIDCRoleARN

Demo Go

OSS

OSS Java SDK — Konfigurasi kredensial akses

Demo Java

OSS

OSS Python SDK — Gunakan peran dari IdP OIDC

Demo Python

Simple Log Service (SLS)

Simple Log Service SDK for Java

Demo Java

Aktifkan autentikasi RRSA untuk CLI

Gunakan ack-ram-tool untuk mengonfigurasi CLI agar mendukung autentikasi token OIDC RRSA dari dalam pod.

Alibaba Cloud CLI

Alibaba Cloud CLI v3.0.206 dan versi lebih baru mendukung RRSA. Tetapkan region_id ke wilayah target Anda.

Opsi A: File konfigurasi. Tetapkan mode ke OIDC dalam ~/.aliyun/config.json:

{
  "current": "rrsa",
  "profiles": [
    {
      "name": "rrsa",
      "mode": "OIDC",
      "region_id": "cn-hangzhou",
      "ram_session_name": "test-rrsa"
    }
  ],
  "meta_path": ""
}

Opsi B: Perintah langsung (tanpa file konfigurasi):

aliyun sts GetCallerIdentity --region cn-hangzhou --role-session-name=test-rrsa

Output yang diharapkan:

{
  "AccountId": "11380***",
  "Arn": "acs:ram::1138***:assumed-role/test-rrsa-***/test-rrsa",
  "IdentityType": "AssumedRoleUser",
  "PrincipalId": "33300***:test-rrsa",
  "RequestId": "20F78881-F47E-5771-90D6-***",
  "RoleId": "33300***"
}

Lihat Jenis kredensial.

ossutil 2.0

ossutil V2.1.0 dan versi lebih baru mendukung RRSA. Ganti region dengan wilayah aktual Anda.

Tetapkan mode ke oidcRoleArn dalam ~/.ossutilconfig:

cat <<EOF > ~/.ossutilconfig
[default]
mode = oidcRoleArn
OIDCProviderArn = "${ALIBABA_CLOUD_OIDC_PROVIDER_ARN}"
OIDCTokenFilePath = "${ALIBABA_CLOUD_OIDC_TOKEN_FILE}"
roleArn = "${ALIBABA_CLOUD_ROLE_ARN}"
roleSessionName = test-rrsa
region = cn-hangzhou
EOF

Lihat Contoh dalam dokumentasi ossutil 2.0.

Simple Log Service CLI

Simple Log Service CLI tidak mendukung file konfigurasi OIDC. Gunakan ack-ram-tool untuk menyuntikkan kredensial saat runtime:

ack-ram-tool export-credentials -f environment-variables -- aliyunlog log list_project --region-endpoint=cn-hangzhou.log.aliyuncs.com

Terraform

Alibaba Cloud Provider V1.222.0 dan versi lebih baru mendukung assume_role_with_oidc. Tetapkan region ke wilayah target Anda.

Tambahkan assume_role_with_oidc ke konfigurasi provider Anda:

provider "alicloud" {
  assume_role_with_oidc {
    role_session_name = "terraform-with-rrsa-auth-example"
  }
  region = "cn-hangzhou"
}

Lihat Demo Terraform RRSA.

Pemecahan Masalah

Error SDK

Error

Penyebab

Perbaikan

AuthenticationFail.OIDCToken.Expired — "This JsonWebToken is expired."

Aplikasi menyimpan cache token OIDC dan menggunakan salinan yang kedaluwarsa.

Baca token dari file (ALIBABA_CLOUD_OIDC_TOKEN_FILE) setiap kali melakukan autentikasi. Gunakan Alibaba Cloud SDK untuk menangani hal ini secara otomatis. Lihat Dukungan SDK.

Throttling.User — "Request was denied due to user flow control."

Aplikasi terlalu sering memanggil AssumeRoleWithOIDC.

Gunakan kembali token STS hingga kedaluwarsa. Gunakan Alibaba Cloud SDK untuk manajemen token otomatis. Lihat Dukungan SDK.

AuthenticationFail.OIDCToken.AudienceNotMatch — "Invalid audience."

Parameter audience dalam spesifikasi pod tidak diatur ke sts.aliyuncs.com.

Tetapkan audience: sts.aliyuncs.com dalam sumber volume proyeksi spesifikasi pod.

AuthenticationFail.OIDCToken.IssuerConfigurationBroken / IssuerNotMatch / AuthenticationFail.NoPermission — "No such OIDC Provider registered."

RRSA belum diaktifkan untuk kluster.

Lihat Langkah 1: Aktifkan RRSA untuk kluster Anda. Setelah diaktifkan, buat ulang pod yang menggunakan RRSA.

EntityNotExist.Role — "The role not exists: acs:ram::..."

Peran RAM yang diasumsikan oleh aplikasi tidak ada.

Buat peran RAM tersebut. Lihat Buat peran RAM untuk IdP OIDC dan Langkah 2: Buat peran RAM untuk penyedia identitas OIDC.

AuthenticationFail.NoPermission — "There is no permission"

Kebijakan kepercayaan peran RAM tidak mengizinkan akun layanan mengasumsikan peran tersebut.

Perbarui kebijakan kepercayaan. Lihat Konfigurasi peran RAM yang sudah ada.

Referensi