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:
-
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.
-
Mengasumsikan peran: Aplikasi memanggil API
AssumeRoleWithOIDCmenggunakan token OIDC ini. -
Menerima kredensial STS: RAM Alibaba Cloud memverifikasi token OIDC terhadap penyedia identitas OIDC kluster dan mengembalikan kredensial STS berbasis peran.
-
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.

Aktifkan untuk kluster yang sudah ada
-
Masuk ke Konsol ACK. Di panel navigasi sebelah kiri, klik Clusters.
-
Klik nama kluster Anda. Di panel navigasi kiri, klik Cluster Information.
-
Di tab Basic Information, gulir ke bagian Security and Auditing dan klik Enable di samping RRSA OIDC.

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

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 |
|
|
Akun layanan |
|
|
Peran RAM |
|

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.
-
Di Konsol ACK, klik nama kluster Anda. Di panel navigasi kiri, klik Add-ons.
-
Di halaman Add-ons, klik tab Security.
-
Temukan ack-pod-identity-webhook dan klik Install.
-
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 |
|
Condition |
|
|
Role Name |
|
Kondisioidc:submembatasi kepercayaan hanya ke akun layanan tertentu dalam namespace tertentu. Gantirrsa-demodandemo-sadengan 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 |
|
|
URL penyedia OIDC kluster — lihat Dapatkan URL dan ARN penyedia OIDC |
|
|
ARN penyedia OIDC kluster — lihat Dapatkan URL dan ARN penyedia OIDC |
|
|
Namespace aplikasi |
|
|
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 |
|
ARN peran RAM yang akan diasumsikan |
|
|
ARN penyedia identitas OIDC |
|
|
|
Path ke file token OIDC |
|
|
|
Titik akhir VPC STS untuk wilayah saat ini |
|
|
|
Identifikasi wilayah untuk titik akhir STS |
|
|
|
Apakah akses STS dilakukan melalui titik akhir internal VPC |
|
|
VolumeMount |
|
Memasang token OIDC ke dalam kontainer |
|
Volume |
|
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 |
|
|
ARN peran RAM |
Halaman Roles di Konsol RAM |
|
|
ARN penyedia OIDC |
Bagian Security and Auditing di halaman detail kluster. Lihat Dapatkan URL dan ARN penyedia OIDC. |
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 |
||
|
Java |
||
|
Python 3 |
||
|
Node.js / TypeScript |
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 |
|
|
OSS |
OSS Java SDK — Konfigurasi kredensial akses |
|
|
OSS |
OSS Python SDK — Gunakan peran dari IdP OIDC |
|
|
Simple Log Service (SLS) |
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 mendukungassume_role_with_oidc. Tetapkanregionke 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 |
|
|
Aplikasi menyimpan cache token OIDC dan menggunakan salinan yang kedaluwarsa. |
Baca token dari file ( |
|
|
Aplikasi terlalu sering memanggil |
Gunakan kembali token STS hingga kedaluwarsa. Gunakan Alibaba Cloud SDK untuk manajemen token otomatis. Lihat Dukungan SDK. |
|
|
Parameter |
Tetapkan |
|
|
RRSA belum diaktifkan untuk kluster. |
Lihat Langkah 1: Aktifkan RRSA untuk kluster Anda. Setelah diaktifkan, buat ulang pod yang menggunakan RRSA. |
|
|
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. |
|
|
Kebijakan kepercayaan peran RAM tidak mengizinkan akun layanan mengasumsikan peran tersebut. |
Perbarui kebijakan kepercayaan. Lihat Konfigurasi peran RAM yang sudah ada. |