Anda dapat menggunakan fitur RAM Roles for Service Accounts (RRSA) untuk menerapkan kontrol akses pada pod berbeda yang dideploy di kluster Container Service for Kubernetes (ACK), sehingga mencapai kontrol izin API detail halus pada pod dan mengurangi risiko keamanan. Topik ini menjelaskan cara menggunakan RRSA di kluster ACK.
Informasi latar belakang
Instans kontainer elastis berjalan pada instans Elastic Compute Service (ECS). Metadata instans ECS berisi informasi tentang instans ECS di Alibaba Cloud. Anda dapat mengakses metadata ini dari dalam instans yang sedang berjalan untuk mengonfigurasi atau mengelolanya. Aplikasi yang dideploy di kluster ACK dapat menggunakan metadata instans ECS untuk memperoleh token Security Token Service (STS) guna mengasumsikan peran Resource Access Management (RAM) yang berbeda, sehingga dapat memanggil API layanan cloud yang berbeda. Untuk informasi selengkapnya, lihat Instance metadata.
Untuk alasan keamanan, ketika Anda perlu membatasi izin RAM untuk aplikasi berbeda dalam satu kluster, Anda harus menonaktifkan kemampuan mereka untuk memperoleh token STS yang terkait dengan peran instans melalui metadata instans ECS atau instans kontainer elastis, atau menghindari pemberian kebijakan RAM apa pun pada peran yang terkait instans. Namun, aplikasi tersebut tetap memerlukan metode aman untuk memperoleh token STS guna mengakses sumber daya cloud. Untuk mengatasi masalah ini, ACK merilis fitur RRSA yang dikembangkan berdasarkan RAM.
Anda dapat menggunakan fitur RRSA untuk mengizinkan aplikasi berbeda dalam kluster ACK mengasumsikan peran RAM yang berbeda. Aplikasi dapat memperoleh token STS, menggunakan token tersebut untuk mengasumsikan peran RAM tertentu, lalu mengakses layanan cloud terkait. Hal ini menerapkan prinsip hak istimewa minimal dan memungkinkan aplikasi memanggil operasi API tanpa perlu menggunakan pasangan Kunci Akses, sehingga mencegah kebocoran pasangan Kunci Akses.
Langkah-langkah berikut menunjukkan cara aplikasi mengakses sumber daya cloud ketika RRSA digunakan untuk menerapkan kontrol akses:
Penyewa mendeploy pod yang telah diaktifkan fitur service account token volume projection.
Kluster ACK membuat file token OpenID Connect (OIDC) akun layanan dan memasang file token tersebut ke pod.
Aplikasi dalam pod menggunakan file token OIDC untuk memanggil operasi API AssumeRoleWithOIDC STS dan memperoleh token STS yang digunakan untuk mengasumsikan peran RAM.
CatatanUntuk mengizinkan aplikasi melakukan operasi ini, Anda harus terlebih dahulu membuat penyedia identitas OIDC dan mengizinkan akun layanan yang digunakan oleh pod untuk mengasumsikan peran RAM tertentu. Untuk informasi selengkapnya, lihat AssumeRoleWithOIDC.
Token OIDC dalam file token OIDC bersifat temporary. Kami menyarankan Anda mengonfigurasi aplikasi untuk membaca token terbaru dari file token OIDC tersebut. Kluster akan memperbarui token dalam file sebelum masa berlakunya habis.
Aplikasi dalam pod menggunakan token STS untuk mengasumsikan peran RAM tertentu lalu memanggil API layanan cloud terkait.
Langkah-langkah berikut menunjukkan cara aplikasi mengakses sumber daya cloud ketika RRSA digunakan untuk menerapkan kontrol akses:
Penyewa mendeploy pod yang telah diaktifkan fitur service account token volume projection.
Kluster ACK membuat file token OpenID Connect (OIDC) akun layanan dan memasang file token tersebut ke pod.
Aplikasi dalam pod menggunakan file token OIDC untuk memanggil operasi API AssumeRoleWithOIDC STS dan memperoleh token STS yang digunakan untuk mengasumsikan peran RAM.
CatatanUntuk mengizinkan aplikasi melakukan operasi ini, Anda harus terlebih dahulu membuat penyedia identitas OIDC dan mengizinkan akun layanan yang digunakan oleh pod untuk mengasumsikan peran RAM tertentu. Untuk informasi selengkapnya, lihat AssumeRoleWithOIDC.
Token OIDC dalam file token OIDC bersifat temporary. Kami menyarankan Anda mengonfigurasi aplikasi untuk membaca token terbaru dari file token OIDC tersebut. Kluster akan memperbarui token dalam file sebelum masa berlakunya habis.
Aplikasi dalam pod menggunakan token STS untuk mengasumsikan peran RAM tertentu lalu memanggil API layanan cloud terkait.
Batasan
Fitur RRSA hanya mendukung kluster ACK yang menjalankan Kubernetes 1.22 ke atas. Kluster ACK yang mendukung fitur RRSA meliputi kluster ACK Basic, kluster ACK Pro, kluster ACK Serverless Basic, kluster ACK Serverless Pro, dan kluster ACK Edge Pro.
Aktifkan RRSA
Jika Anda belum memiliki kluster yang ada, aktifkan RRSA saat membuat kluster ACK yang dikelola atau kluster ACK Edge. Jika tidak, aktifkan fitur tersebut di bagian Security and Auditing pada halaman detail kluster.
Untuk kluster ACK Serverless, fitur ini harus diaktifkan setelah pembuatan dari bagian Security and Auditing pada halaman detail kluster.
Setelah fitur RRSA diaktifkan, periode validitas maksimum untuk semua token ServiceAccount yang baru dibuat akan dibatasi hingga 12 jam.
Aktifkan saat pembuatan kluster
Saat membuat kluster ACK yang dikelola atau kluster ACK Edge, klik Enable di samping RRSA OIDC pada bagian Advanced Options (Optional) dalam langkah Cluster Configurations.

Aktifkan setelah pembuatan kluster
Masuk ke Konsol ACK. Di panel navigasi kiri, klik Clusters.
Pada halaman Clusters, temukan kluster target lalu klik namanya. Di panel navigasi kiri, klik Cluster Information.
Di bagian Security and Auditing pada tab Basic Information, klik Enable di samping RRSA OIDC.

Pada kotak dialog Enable RRSA, klik Confirm.
Di bagian Basic Information, jika status kluster berubah dari Updating menjadi Running, berarti fitur RRSA telah diaktifkan untuk kluster tersebut.
Dapatkan informasi URL dan ARN
Setelah fitur RRSA diaktifkan untuk kluster, navigasikan ke bagian Security and Auditing di bawah tab Basic Information. Jika Anda mengarahkan kursor mouse ke label Enabled di samping RRSA OIDC, URL dan Nama Sumber Daya Alibaba Cloud (ARN) penyedia OIDC akan ditampilkan.
Setelah RRSA diaktifkan, ACK melakukan operasi berikut di latar belakang:
Otomatis membuat issuer OIDC yang didedikasikan untuk kluster tersebut. Issuer OIDC ini dikelola oleh ACK. Untuk informasi selengkapnya, lihat OIDC Issuer.
Mengaktifkan service account token volume projection untuk kluster dan menggabungkan konfigurasi issuer OIDC dengan nilai parameter service-account-issuer yang sudah ada pada kluster. Untuk informasi selengkapnya, lihat Use ServiceAccount token volume projection.
Membuat penyedia identitas peran RAM dalam akun Anda. Penyedia identitas ini menggunakan issuer OIDC untuk Single Sign-On (SSO). Nama penyedia identitas tersebut adalah ack-rrsa-<cluster_id>. <cluster_id> menunjukkan ID kluster Anda. Untuk informasi selengkapnya, lihat Manage an OIDC IdP.
Bekerja dengan RRSA
Setelah Anda mengaktifkan RRSA untuk kluster, lakukan langkah-langkah berikut agar aplikasi dalam kluster dapat memperoleh token STS melalui RRSA. Token STS tersebut digunakan untuk memanggil API layanan cloud tertentu.
Contoh
Pada contoh ini, sebuah aplikasi dibuat dan RRSA diaktifkan untuk kluster agar aplikasi dapat melakukan operasi berikut: mengasumsikan peran RAM tertentu lalu memanggil operasi API untuk mengkueri kluster yang termasuk dalam Akun Alibaba Cloud saat ini.
Sample configurations
Namespace: rrsa-demo
Akun layanan: demo-sa
Peran RAM: demo-role-for-rrsa
Procedure

Jika Anda ingin mengaktifkan RRSA tanpa menginstal komponen ack-pod-identity-webhook, Anda dapat secara manual menentukan file token OIDC yang diperlukan sebagai variabel lingkungan dalam templat aplikasi. Untuk informasi selengkapnya, lihat Manually modify the application template to enable RRSA.
Jika Anda ingin menggunakan peran RAM yang sudah ada, Anda harus memberikan izin yang diperlukan kepada peran RAM tersebut. Untuk informasi selengkapnya, lihat Use an existing RAM role and grant the required permissions to the RAM role.
Instal komponen ack-pod-identity-webhook.
Pada halaman Clusters, klik nama kluster Anda. Di panel navigasi sebelah kiri, pilih Operations > Add-ons.
Pada halaman Add-ons, klik tab Security, temukan ack-pod-identity-webhook, lalu klik Install di bagian kanan bawah kartu.
Pada pesan yang muncul, konfirmasi informasi lalu klik OK.
Buat peran RAM bernama demo-role-for-rrsa. Tabel berikut menjelaskan parameter-parameternya. Untuk petunjuk lengkap, lihat Create a RAM role for an OIDC IdP.
Parameter
Deskripsi
Identity Provider Type
Pilih OIDC.
Identity Provider
Pilih IdP. IdP dinamai dalam format ack-rrsa-<cluster_id>. <cluster_id> menunjukkan ID kluster Anda.
Conditions
oidc:iss: Gunakan nilai default.
oidc:aud: Gunakan nilai default.
oidc:sub: Tambahkan kondisi ini secara manual.
Key: Pilih oidc:sub.
Operator: Pilih StringEquals.
Value: Masukkan system:serviceaccount:<namespace>:<serviceAccountName>.
<namespace>: Tentukan namespace aplikasi.<serviceAccountName>: Tentukan nama akun layanan. Pada contoh ini, masukkan system:serviceaccount:rrsa-demo:demo-sa.
RAM Role Name
Tetapkan nilainya menjadi demo-role-for-rrsa.
Lampirkan kebijakan AliyunCSReadOnlyAccess ke peran RAM yang dibuat pada Langkah 2 untuk memberikan izin yang diperlukan kepada aplikasi. Untuk informasi selengkapnya, lihat Grant permissions to a RAM role.
Deploy aplikasi. Untuk informasi tentang demo SDK, lihat Demos of Alibaba Cloud SDKs that support OIDC token authentication of RRSA.
Buat file bernama demo.yaml berdasarkan persyaratan berikut:
Pada templat YAML contoh berikut, label
pod-identity.alibabacloud.com/injection: 'on'ditambahkan ke namespace, anotasipod-identity.alibabacloud.com/role-name: demo-role-for-rrsaditambahkan ke akun layanan, dan fitur auto injection ack-pod-identity-webhook diaktifkan. Untuk informasi lebih lanjut tentang cara mengonfigurasi ack-pod-identity-webhook, lihat ack-pod-identity-webhook.Jalankan perintah berikut untuk mendeploy aplikasi:
kubectl apply -f demo.yaml
Jalankan perintah berikut untuk memeriksa apakah ack-pod-identity-webhook telah menyuntikkan konfigurasi yang diperlukan ke pod yang dibuat untuk aplikasi:
kubectl -n rrsa-demo get pod demo -o yamlOutput tersebut menunjukkan bahwa ack-pod-identity-webhook telah menyuntikkan konfigurasi berikut ke pod.
Kategori
Item konfigurasi
Deskripsi
Variabel lingkungan.
ALIBABA_CLOUD_ROLE_ARN
ARN peran RAM yang akan diasumsikan.
ALIBABA_CLOUD_OIDC_PROVIDER_ARN
ARN penyedia identitas OIDC.
ALIBABA_CLOUD_STS_ENDPOINT
Titik akhir VPC untuk STS di wilayah saat ini.
ALIBABA_CLOUD_STS_REGION
ID wilayah untuk STS.
ALIBABA_CLOUD_VPC_ENDPOINT_ENABLED
Flag yang mengaktifkan atau menonaktifkan akses ke STS melalui titik akhir VPC privat. Tetapkan ke
trueuntuk menggunakan titik akhir VPC.ALIBABA_CLOUD_OIDC_TOKEN_FILE
Jalur file token OIDC.
VolumeMount
rrsa-oidc-token
Konfigurasi untuk memasang token OIDC.
Volume
rrsa-oidc-token
Konfigurasi untuk memasang token OIDC.
Jalankan perintah berikut untuk mencetak log aplikasi:
kubectl -n rrsa-demo logs demoDaftar kluster ditampilkan dalam output:
cluster id: cf***, cluster name: foo* cluster id: c8***, cluster name: bar* cluster id: c4***, cluster name: foob*Opsional: Lepaskan kebijakan sistem AliyunCSReadOnlyAccess dari peran RAM. Untuk informasi selengkapnya, lihat Remove permissions from a RAM role.
Tunggu 30 detik lalu jalankan perintah berikut untuk mencetak log aplikasi lagi:
kubectl -n rrsa-demo logs demoPesan error berikut menunjukkan bahwa aplikasi tidak memiliki izin yang diperlukan:
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}
Ubah templat aplikasi secara manual untuk mengaktifkan RRSA
Anda dapat secara manual menentukan file token OIDC yang diperlukan sebagai variabel lingkungan dalam templat aplikasi. Dengan cara ini, Anda dapat mengaktifkan RRSA tanpa menginstal ack-pod-identity-webhook.
Templat berikut memberikan contohnya.
Ubah bidang-bidang berikut dalam templat di atas:
Ganti
<oid_provider_arn>dengan ARN penyedia OIDC yang digunakan oleh kluster. Untuk informasi selengkapnya tentang cara memperoleh ARN, lihat Obtain the URL and ARN information.Ganti
<role_arn>dengan ARN peran RAM yang digunakan oleh aplikasi. Anda dapat memperoleh ARN tersebut di halaman Roles di Konsol RAM.Tetapkan parameter
audiencekests.aliyuncs.com. Nilai ini adalah ID klien yang dikonfigurasi dalam penyedia identitas OIDC yang dibuat otomatis saat fitur RRSA diaktifkan. Nilai ini bukan nama domain yang digunakan oleh SDK untuk memanggil operasi AssumeRoleWithOIDC STS. Anda dapat menentukan nama domain STS yang sesuai saat menggunakan SDK.Tetapkan
expirationSecondske nilai antara 600 hingga 43200. Satuan: detik. Jika Anda menentukan nilai lebih besar dari43200, periode validitas token OIDC tetap 43.200 detik (12 jam).
Setelah Anda mendeploy ulang aplikasi berdasarkan templat yang dimodifikasi, aplikasi dapat menggunakan file token OIDC, ARN peran RAM, dan ARN penyedia OIDC yang Anda tentukan dalam templat untuk memanggil operasi AssumeRoleWithOIDC STS dan memperoleh token STS yang digunakan untuk mengasumsikan peran RAM tertentu. Dengan cara ini, aplikasi dapat memanggil operasi API layanan cloud yang berbeda. File token OIDC ditentukan dalam variabel lingkungan ALIBABA_CLOUD_OIDC_TOKEN_FILE, ARN peran RAM ditentukan dalam ALIBABA_CLOUD_ROLE_ARN, dan ARN penyedia OIDC ditentukan dalam ALIBABA_CLOUD_OIDC_PROVIDER_ARN. Aplikasi membaca token OIDC terbaru dari file token OIDC saat menggunakannya. Untuk informasi selengkapnya tentang demo SDK, lihat Demos of Alibaba Cloud SDKs that support OIDC token authentication of RRSA. Untuk informasi selengkapnya, lihat AssumeRoleWithOIDC.
Gunakan peran RAM yang sudah ada dan berikan izin yang diperlukan kepada peran RAM tersebut
Jika Anda ingin aplikasi menggunakan peran RAM yang sudah ada, Anda harus mengubah kebijakan kepercayaan peran RAM tersebut berdasarkan templat berikut. Dengan cara ini, aplikasi dapat menggunakan akun layanan untuk mengasumsikan peran RAM dan memperoleh token STS. Untuk informasi selengkapnya, lihat Edit the trust policy of a RAM role.
Contoh konfigurasi Statement:
{
"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>"
]
}
}Ubah bidang-bidang berikut dalam konfigurasi Statement:
Ganti
<oidc_issuer_url>dengan URL penyedia OIDC yang digunakan oleh kluster. Untuk informasi selengkapnya tentang cara memperoleh URL, lihat Obtain the URL and ARN information.Ganti
<oidc_provider_arn>dengan ARN penyedia OIDC yang digunakan oleh kluster. Untuk informasi selengkapnya tentang cara memperoleh ARN, lihat Obtain the URL and ARN information.Ganti
<namespace>dengan namespace aplikasi.Ganti
<service_account>dengan akun layanan yang digunakan oleh aplikasi.
Anda juga dapat menggunakan tool ack-ram-tool untuk mengotomatiskan modifikasi kebijakan kepercayaan. Contoh perintah:
ack-ram-tool rrsa associate-role --cluster-id <cluster_id> \
--namespace <namespace> --service-account <service_account> \
--role-name <role_name> --create-role-if-not-existDemo SDK Alibaba Cloud yang mendukung autentikasi token OIDC RRSA
Demo SDK
Alibaba Cloud SDK V2.0 mendukung autentikasi token OIDC RRSA. Secara default, semua SDK layanan cloud yang mendukung autentikasi token STS dan dikembangkan berdasarkan Alibaba Cloud SDK V2.0 mendukung autentikasi token OIDC RRSA. Tabel berikut menjelaskan versi SDK yang didukung dan demonya.
Bahasa pemrograman | Versi SDK yang didukung | Demo |
Go | Alibaba Cloud Credentials for Go 1.2.6 dan yang lebih baru. Untuk informasi selengkapnya, lihat Method 6: Use OIDCRoleArn. | |
Java | Alibaba Cloud Credentials for Java 0.2.10 dan yang lebih baru. Untuk informasi selengkapnya, lihat Method 6: OIDCRoleArn. | |
Python 3 | Alibaba Cloud Credentials for Python 0.3.1 dan yang lebih baru. Untuk informasi selengkapnya, lihat Method 6: OIDCRoleArn. | |
Node.js dan TypeScript | Alibaba Cloud Credentials for TypeScript/Node.js 2.2.6 dan yang lebih baru. Untuk informasi selengkapnya, lihat Method 6: Use the RAM role of an OIDC IdP. |
Untuk beberapa SDK layanan cloud, Anda dapat merujuk pada metode di atas untuk menggunakan token OIDC RRSA dalam autentikasi saat memanggil operasi API. Tabel berikut menjelaskan demo SDK tersebut.
Produk cloud | SDK | Demo |
Object Storage Service (OSS) | Untuk informasi selengkapnya, lihat Method 5: Use an OIDCRoleARN. | |
Untuk informasi selengkapnya, lihat Configure access credentials. | ||
Untuk informasi selengkapnya, lihat Use the role of an OIDC IdP. | ||
Simple Log Service | Simple Log Service SDK for Java Untuk informasi selengkapnya, lihat Get started with Simple Log Service SDK for Java. |
Solusi untuk error SDK
Tabel berikut menjelaskan solusi untuk berbagai error.
Pesan error | Kemungkinan penyebab | Solusi |
| Token OIDC yang digunakan aplikasi Anda telah kedaluwarsa. | File token OIDC ditentukan dalam variabel lingkungan |
| Aplikasi Anda sering memperoleh token OIDC. Akibatnya, operasi tersebut dibatasi lajunya. | Jangan sering memanggil operasi API untuk memperoleh token OIDC. Anda tidak perlu memperoleh token OIDC baru sebelum token OIDC saat ini kedaluwarsa. Kami menyarankan Anda menggunakan SDK Alibaba Cloud untuk memperoleh token OIDC daripada mengonfigurasi aplikasi secara manual untuk memperoleh token. Untuk informasi selengkapnya, lihat Demos of Alibaba Cloud SDKs that support OIDC token authentication of RRSA. |
| Parameter | Anda perlu mengubah templat aplikasi untuk memastikan parameter |
| Fitur RRSA dinonaktifkan untuk kluster Anda. | Anda perlu mengaktifkan fitur RRSA untuk kluster tempat aplikasi berada. Untuk informasi selengkapnya, lihat Enable the RRSA feature. Setelah Anda mengaktifkan fitur RRSA, Anda harus membuat ulang pod yang menggunakan fitur RRSA. |
| Peran RAM yang diasumsikan aplikasi Anda tidak ada. | Anda harus membuat peran RAM yang diperlukan. Untuk informasi selengkapnya, lihat Create a RAM role for an OIDC IdP dan Example. |
| Kebijakan kepercayaan yang diperlukan tidak dikonfigurasi untuk peran RAM yang diasumsikan aplikasi Anda. | Anda perlu mengubah kebijakan kepercayaan peran RAM untuk mengizinkan aplikasi Anda mengasumsikan peran RAM tersebut. Untuk informasi selengkapnya, lihat Use an existing RAM role and grant the required permissions to the RAM role. |
Aktifkan CLI umum untuk mendukung autentikasi token OIDC RRSA
Anda dapat menggunakan ack-ram-tool untuk mengaktifkan CLI umum (seperti Alibaba Cloud CLI, ossutil 2.0, dan Terraform) agar mendukung autentikasi token OIDC RRSA di dalam pod. Tabel berikut menjelaskan konfigurasi dan contohnya.
Referensi
\