RAM Roles for Service Accounts (RRSA) memungkinkan Anda menerapkan isolasi izin OpenAPI tingkat pod di dalam kluster. Fitur ini memberikan kontrol detail halus terhadap akses ke sumber daya cloud dan mengurangi risiko keamanan. Topik ini menjelaskan cara menggunakan fitur RRSA.
Latar Belakang
OIDC (OpenID Connect) adalah protokol otentikasi yang dibangun di atas OAuth 2.0. RAM Alibaba Cloud mendukung SSO berbasis peran berbasis OIDC. Aplikasi dalam kluster Kubernetes menggunakan kredensial temporary dari Security Token Service (STS) untuk mengakses API sumber daya cloud. Alibaba Cloud Container Service (ACS) mendukung RRSA. Dalam skenario multi-tenant, RRSA menyediakan isolasi izin detail halus untuk akses sumber daya cloud antar pod aplikasi dalam satu kluster. Di ACS, RRSA juga memungkinkan Anda mengontrol periode validitas kredensial temporary.
Cara kerja RRSA sebagai berikut:
-
Anda men-deploy pod aplikasi yang menggunakan fitur service account token volume projection.
CatatanFitur service account token volume projection diaktifkan secara default di kluster ACS.
-
Kluster membuat dan memasang file token OIDC service account yang sesuai untuk pod aplikasi tersebut.
-
Aplikasi dalam pod menggunakan file token OIDC yang dipasang untuk memanggil API STS
AssumeRoleWithOIDCguna memperoleh kredensial temporary untuk peran RAM tertentu.CatatanAnda harus memodifikasi kebijakan kepercayaan peran RAM terlebih dahulu agar service account pod dapat mengasumsikan peran tersebut. Untuk informasi selengkapnya, lihat AssumeRoleWithOIDC.
-
Aplikasi dalam pod menggunakan kredensial temporary yang diperoleh untuk mengakses API sumber daya cloud.
Aktifkan RRSA
-
Login ke Konsol ACS. Di panel navigasi kiri, klik Clusters.
-
Di halaman Clusters, klik nama kluster target. Di panel navigasi kiri, pilih Cluster Information.
-
Di halaman detail kluster, klik tab Basic Information. Di bagian Security and Auditing, klik Enable di sebelah RRSA OIDC.
-
Di kotak dialog Enable RRSA, klik OK.
Catatan-
Mengaktifkan fitur RRSA memerlukan waktu sekitar 2 hingga 3 menit. Jika Cluster Status tetap dalam status Updating, klik tombol
di pojok kanan atas halaman untuk refresh. -
Saat status kluster berubah dari Updating menjadi Running, fitur RRSA telah diaktifkan untuk kluster tersebut. Anda dapat mengarahkan kursor ke Enabled di sebelah RRSA OIDC untuk melihat URL dan ARN penyedia OIDC.
-
Setelah mengaktifkan fitur RRSA untuk suatu kluster, Konsol ACS melakukan operasi berikut di latar belakang:
-
Otomatis membuat layanan OIDC Issuer khusus untuk kluster tersebut. Layanan ini dikelola oleh ACS dan tidak memerlukan maintenance manual.
-
Membuat penyedia identitas OIDC di akun Anda yang menggunakan OIDC Issuer tersebut. Penyedia identitas OIDC diberi nama
ack-rrsa-<cluster_id>, dengan<cluster_id>sebagai ID kluster Anda.
Gunakan RRSA
Setelah mengaktifkan fitur RRSA, Anda dapat mengikuti langkah-langkah berikut agar aplikasi dalam kluster Anda dapat memperoleh kredensial temporary untuk mengakses API sumber daya cloud menggunakan RRSA.
Buat dan otorisasi peran RAM baru
Untuk menggunakan peran RAM yang sudah ada alih-alih membuat yang baru, Anda dapat menambahkan izin yang diperlukan ke peran RAM yang sudah ada.
Aplikasi yang dideploy dalam contoh ini menggunakan fitur RRSA untuk mengasumsikan peran tertentu dan mengambil daftar kluster di akun saat ini. Sumber daya utama yang digunakan adalah sebagai berikut:
-
Namespace:
rrsa-demo. -
Service account:
demo-sa. -
RAM role:
demo-role-for-rrsa.
-
Buat peran RAM bernama
demo-role-for-rrsa.-
Login ke Konsol RAM menggunakan Akun Alibaba Cloud Anda.
-
Di panel navigasi kiri, pilih . Di halaman Roles, klik Create Role.
-
Di panel Create Role, klik Switch to Policy Editor untuk membuat peran.
-
Di tab Visual Editor, konfigurasikan informasi peran seperti pada tabel berikut, lalu klik OK.
Parameter
Deskripsi
Effect
Nilai default adalah Allow.
Principal
Pilih Identity Provider dan klik Edit.
Atur Identity Provider Type ke OIDC dan pilih penyedia identitas OIDC kluster, misalnya
ack-rrsa-<cluster_id>.<cluster_id>adalah ID kluster Anda.Action
Secara default, sts:AssumeRole dipilih.
Condition
-
oidc:iss: Kondisi ini ditambahkan secara otomatis setelah Anda memilih Identity Provider. Gunakan pengaturan default.
-
oidc:aud: Kondisi ini ditambahkan secara otomatis setelah Anda memilih Identity Provider. Gunakan pengaturan default.
-
oidc:sub: Anda perlu secara manual Add Condition.
-
Key:
oidc:sub -
Operator:
StringEquals -
Value: Formatnya adalah
system:serviceaccount:<namespace>:<serviceAccountName>.-
<namespace>: namespace tempat aplikasi berada. -
<serviceAccountName>: nama service account.
Berdasarkan informasi aplikasi uji coba, masukkan
system:serviceaccount:rrsa-demo:demo-sa. -
-
-
-
Di kotak dialog yang muncul, masukkan nama peran
demo-role-for-rrsadan klik OK.
-
-
Berikan kebijakan sistem AliyunCSReadOnlyAccess kepada peran yang telah dibuat, yang diperlukan oleh aplikasi uji coba. Untuk informasi lebih lanjut, lihat Manage permissions for a RAM role.
-
Deploy aplikasi uji coba.
-
Buat file bernama
demo.yamldengan konten berikut.CatatanGanti placeholder berikut dalam templat aplikasi contoh.
-
<role_arn>: Ganti dengan ARN peran RAM yang digunakan aplikasi. Anda dapat memperoleh ARN dari bidang ARN di halaman Basic Information peran di Konsol RAM. -
<oidc_provider_arn>: Ganti dengan ARN penyedia OIDC kluster. Anda dapat memperoleh ARN ini dengan mengarahkan kursor ke Enabled di sebelah RRSA OIDC di tab Basic Information halaman Cluster Information.
-
-
Jalankan perintah berikut untuk deploy aplikasi uji coba.
kubectl apply -f demo.yamlSetelah aplikasi dideploy, aplikasi dapat menggunakan token OIDC yang dipasang, ARN peran RAM, dan ARN penyedia identitas OIDC untuk memanggil API
AssumeRoleWithOIDCSTS guna memperoleh kredensial temporary untuk peran RAM tertentu. Aplikasi kemudian menggunakan kredensial temporary ini untuk mengakses API sumber daya cloud. Untuk informasi lebih lanjut, lihat AssumeRoleWithOIDC.
-
-
Jalankan perintah berikut untuk melihat log aplikasi uji coba.
kubectl -n rrsa-demo logs demoOutput yang diharapkan adalah daftar kluster ACK:
20**/**/** 08:35:23 ======= [begin] list ACK clusters with RRSA ======= clusters: cluster id: cf***, cluster name: foo* cluster id: c8***, cluster name: bar* cluster id: c4***, cluster name: foob* 20**/**/** 08:35:24 ======= [end] list ACK clusters with RRSA ======= -
Opsional: Lepaskan kebijakan sistem AliyunCSReadOnlyAccess dari peran tersebut. Untuk informasi lebih lanjut, lihat Remove permissions from a RAM role.
Tunggu sekitar 30 detik, lalu jalankan perintah berikut untuk melihat log aplikasi lagi:
kubectl -n rrsa-demo logs demoDiharapkan muncul error penolakan izin:
20**/**/** 10:09:33 ======= [begin] list ACK clusters with RRSA ======= 20**/**/** 10:09:33 SDKError: StatusCode: 403 Code: StatusForbidden Message: code: 403, STSToken policy Forbidden for action cs:DescribeClusters request id: XXXX Data: {"accessDeniedDetail":{"AuthAction":"cs:DescribeClusters","AuthPrincipalDisplayName":"demo-role-for-rrsa:ack-ram-tool","AuthPrincipalOwnerId":"XXXX","AuthPrincipalType":"AssumedRoleUser","EncodedDiagnosticMessage":"XXXX","NoPermissionType":"ImplicitDeny","PolicyType":"ResourceGroupLevelIdentityBasedPolicy"},"code":"StatusForbidden","message":"STSToken policy Forbidden for action cs:DescribeClusters","requestId":"XXXX","status":403,"statusCode":403}
Otorisasi peran RAM yang sudah ada
Jika aplikasi Anda perlu menggunakan peran RAM yang sudah ada alih-alih yang baru, Anda dapat memodifikasi kebijakan kepercayaan peran RAM tersebut dengan menambahkan pernyataan yang mengizinkan aplikasi yang menggunakan service account tertentu untuk mengasumsikan peran RAM ini dan memperoleh kredensial temporary. Untuk informasi lebih lanjut, lihat Modify the trust policy of a RAM role.
Kode berikut adalah contoh entri Statement yang perlu ditambahkan ke kebijakan kepercayaan peran RAM.
Ganti placeholder berikut dalam contoh entri Statement.
-
<oidc_issuer_url>: Ganti dengan URL penyedia OIDC untuk kluster. Anda dapat memperoleh URL ini dengan mengarahkan kursor ke Enabled di sebelah RRSA OIDC di tab Basic Information halaman Cluster Information. -
<oidc_provider_arn>: Ganti dengan ARN penyedia OIDC untuk kluster. Anda dapat memperoleh ARN ini dengan mengarahkan kursor ke Enabled di sebelah RRSA OIDC di tab Basic Information halaman Cluster Information. -
<namespace>: Ganti dengan namespace tempat aplikasi berada. -
<service_account>: Ganti dengan service account yang digunakan aplikasi.
{
"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>"
]
}
}
Referensi
-
Beberapa SDK resmi Alibaba Cloud menyediakan dukungan bawaan untuk otentikasi menggunakan token OIDC RRSA. Tabel berikut menjelaskan versi SDK yang mendukung fitur ini dan menyediakan tautan ke kode contoh.
Bahasa
Versi SDK
Kode contoh
Go
Alibaba Cloud Credentials for Go 1.2.6 dan yang lebih baru
Java
Alibaba Cloud Credentials for Java 0.2.10 dan yang lebih baru
Python 3
Alibaba Cloud Credentials for Python 0.3.1 dan yang lebih baru
Node.js dan TypeScript
Alibaba Cloud Credentials for TypeScript/Node.js 2.2.6 dan yang lebih baru
-
Saat melakukan SSO berbasis peran OIDC, Anda dapat memanggil API AssumeRoleWithOIDC untuk memperoleh kredensial temporary guna mengasumsikan peran RAM.