Anda dapat menggunakan fitur RAM Roles for Service Accounts (RRSA) untuk menegakkan kontrol akses pada pod yang berbeda dalam kluster. Fitur ini memungkinkan kontrol izin API yang lebih rinci pada pod dan mengurangi risiko keamanan. Topik ini menjelaskan cara menggunakan RRSA.
Informasi latar belakang
OpenID Connect (OIDC) adalah protokol otentikasi yang dikembangkan berdasarkan Open Authorization (OAuth) 2.0. Alibaba Cloud Resource Access Management (RAM) mendukung Single Sign-On (SSO) berbasis OIDC. Aplikasi yang diterapkan dalam kluster Kubernetes dapat menggunakan Token Layanan Keamanan (STS) yang dihasilkan untuk Peran RAM yang diasumsikan oleh pod aplikasi untuk memanggil operasi API dari layanan cloud. Alibaba Cloud Container Compute Service (ACS) mendukung fitur RRSA. Dalam skenario multi-penyewa, Anda dapat menggunakan fitur RRSA untuk mengizinkan pod yang berbeda mengakses layanan cloud yang berbeda. Anda juga dapat menggunakan fitur RRSA dalam kluster ACS untuk mengontrol masa berlaku token STS.
Langkah-langkah berikut menunjukkan bagaimana aplikasi mengakses sumber daya cloud ketika RRSA digunakan untuk menegakkan kontrol akses:
Terapkan pod dengan fitur proyeksi volume token akun layanan diaktifkan.
CatatanKluster ACS secara default memiliki fitur proyeksi volume token akun layanan diaktifkan.
Kluster ACS 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 dari STS dan memperoleh token STS yang digunakan untuk mengasumsikan Peran RAM.
CatatanUntuk memungkinkan aplikasi melakukan operasi ini, Anda harus terlebih dahulu memodifikasi konfigurasi Peran RAM untuk mengizinkan akun layanan yang digunakan oleh pod mengasumsikan Peran RAM yang ditentukan. Untuk informasi lebih lanjut, lihat AssumeRoleWithOIDC.
Aplikasi dalam pod menggunakan token STS untuk mengasumsikan Peran RAM yang ditentukan dan kemudian memanggil API layanan cloud yang relevan.
Aktifkan RRSA
Masuk ke Konsol ACS. Di panel navigasi kiri, klik Clusters.
Di halaman Clusters, temukan kluster yang ingin Anda kelola dan klik namanya. Di panel navigasi kiri halaman detail kluster, klik Cluster Information.
Di halaman Cluster Information, klik tab Basic Information. Pada tab Informasi Dasar, klik Enable RRSA.
Dalam pesan Enable RRSA, klik Confirm.
CatatanDibutuhkan sekitar 2 hingga 3 menit untuk mengaktifkan RRSA. Jika kolom Cluster Status terus menampilkan Updating, klik
di sudut kanan atas untuk menyegarkan halaman secara manual.Setelah status kluster berubah dari Updating menjadi Running, RRSA diaktifkan untuk kluster. Gerakkan penunjuk ke Enabled di sebelah kanan RRSA OIDC untuk melihat URL dan ARN penyedia OIDC.
Setelah RRSA diaktifkan, ACS melakukan operasi berikut di latar belakang:
Secara otomatis membuat penerbit OIDC yang didedikasikan untuk kluster. Penerbit OIDC dikelola oleh ACS.
Membuat penyedia identitas Peran RAM dalam akun Anda. Penyedia identitas menggunakan penerbit OIDC untuk Single Sign-On (SSO). Penyedia identitas diberi nama ack-rrsa-<cluster_id>. <cluster_id> menunjukkan ID kluster Anda.
Bekerja dengan RRSA
Setelah Anda mengaktifkan RRSA untuk kluster Anda, lakukan langkah-langkah berikut untuk memungkinkan aplikasi dalam kluster memperoleh token STS melalui RRSA. Token STS digunakan untuk memanggil API layanan cloud tertentu.
Gunakan Peran RAM baru dan berikan izin yang diperlukan kepada Peran RAM
Jika Anda ingin menggunakan Peran RAM yang ada, Anda harus memberikan izin yang diperlukan kepada Peran RAM.
Dalam contoh ini, sebuah aplikasi dibuat dan RRSA diaktifkan untuk kluster untuk memungkinkan aplikasi melakukan operasi berikut: mengasumsikan Peran RAM yang ditentukan dan kemudian memanggil operasi API untuk menanyakan kluster yang dimiliki oleh akun Alibaba Cloud saat ini. Sumber daya berikut digunakan:
Namespace: rrsa-demo
Akun layanan: demo-sa
Peran RAM: demo-role-for-rrsa
Buat Peran RAM bernama demo-role-for-rrsa.
Gunakan akun Alibaba Cloud untuk masuk ke Konsol RAM.
Di panel navigasi kiri, pilih . Di halaman Roles, klik Create Role.
Di panel Create Role, klik Switch To Editor untuk membuat peran.
Sebagai contoh, jika Anda menggunakan Visual Editor, konfigurasikan peran berdasarkan informasi berikut dan klik OK.
Item konfigurasi
Deskripsi
Effect
Nilai defaultnya adalah Allow.
Principal
Pilih Identity Provider dan klik Edit.
Atur jenis penyedia identitas ke OIDC dan pilih penyedia identitas kluster, seperti ack-rrsa-<cluster_id>. <cluster_id> adalah ID kluster Anda.
Action
sts:AssumeRole dipilih secara default.
Condition
oidc:iss: Kondisi ini secara otomatis ditambahkan setelah Anda memilih Identity Provider. Pertahankan nilai default.
oidc:aud: Kondisi ini secara otomatis ditambahkan setelah Anda memilih Identity Provider. Pertahankan nilai default.
oidc:sub: Anda perlu secara manual Add A Condition.
Condition Key:
oidc:subOperator:
StringEqualsCondition Value: Formatnya adalah system:serviceaccount:<namespace>:<serviceAccountName>.
<namespace>: Tentukan namespace aplikasi.
<serviceAccountName>: Tentukan nama akun layanan.
Dalam contoh ini, masukkan
system:serviceaccount:rrsa-demo:demo-sa.

Di kotak dialog yang muncul, masukkan nama peran
demo-role-for-rrsadan klik OK.
Lampirkan kebijakan sistem AliyunCSReadOnlyAccess ke peran yang dibuat. Untuk informasi lebih lanjut, lihat Berikan Izin kepada Peran RAM.

Terapkan aplikasi.
Buat file bernama demo.yaml berdasarkan persyaratan berikut:
CatatanModifikasi bidang berikut dalam template di atas:
Ganti
<role_arn>dengan ARN Peran RAM yang digunakan oleh aplikasi. Anda dapat melihat ARN di tab Basic Information Konsol RAM.Ganti
<oid_provider_arn>dengan ARN penyedia OIDC yang digunakan oleh kluster. Anda dapat menggerakkan penunjuk ke Enabled di sebelah kanan RRSA OIDC di tab Basic Information halaman Cluster Information.
Jalankan perintah berikut untuk menerapkan aplikasi:
kubectl apply -f demo.yamlSetelah aplikasi diterapkan, program aplikasi dapat menggunakan token OIDC, ARN Peran RAM, dan ARN penyedia identitas OIDC untuk memanggil operasi API STS AssumeRoleWithOIDC untuk memperoleh token STS sementara dari Peran RAM. Kemudian, ia dapat menggunakan token tersebut untuk memanggil API layanan cloud. Untuk informasi lebih lanjut, lihat AssumeRoleWithOIDC.
Jalankan perintah berikut untuk mencetak log aplikasi:
kubectl -n rrsa-demo logs demoDaftar kluster ditampilkan di output:
20**/**/** 08:35:23 ======= [mulai] daftar kluster ACK dengan RRSA ======= kluster: id kluster: cf***, nama kluster: foo* id kluster: c8***, nama kluster: bar* id kluster: c4***, nama kluster: foob* 20**/**/** 08:35:24 ======= [akhir] daftar kluster ACK dengan RRSA =======Opsional: Lepaskan kebijakan sistem AliyunCSReadOnlyAccess dari Peran RAM. Untuk informasi lebih lanjut, lihat Hapus Izin dari Peran RAM.
Tunggu 30 detik dan jalankan perintah berikut untuk mencetak log aplikasi lagi:
kubectl -n rrsa-demo logs demoPesan kesalahan berikut menunjukkan bahwa aplikasi tidak memiliki izin yang diperlukan:
20**/**/** 10:09:33 ======= [mulai] daftar kluster ACK dengan RRSA ======= 20**/**/** 10:09:33 SDKError: StatusCode: 403 Code: StatusForbidden Message: kode: 403, Kebijakan STSToken Dilarang untuk tindakan cs:DescribeClusters id permintaan: 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":"Kebijakan STSToken Dilarang untuk tindakan cs:DescribeClusters","requestId":"XXXX","status":403,"statusCode":403}
Gunakan Peran RAM yang ada dan berikan izin yang diperlukan kepada Peran RAM
Jika Anda ingin aplikasi menggunakan Peran RAM yang ada, Anda harus memodifikasi kebijakan kepercayaan Peran RAM berdasarkan template berikut. Dengan cara ini, aplikasi dapat menggunakan akun layanan untuk mengasumsikan Peran RAM dan memperoleh token STS. Untuk informasi lebih lanjut, lihat Edit Kebijakan Kepercayaan Peran RAM.
Contoh konfigurasi Statement:
Modifikasi bidang berikut dalam konfigurasi Statement:
Ganti
<oidc_issuer_url>dengan URL penyedia OIDC yang digunakan oleh kluster. Di tab Basic Information halaman Cluster Information, gerakkan penunjuk ke Enabled di sebelah kanan RRSA OIDC.Ganti
<oidc_provider_arn>dengan ARN penyedia OIDC yang digunakan oleh kluster. Di tab Basic Information halaman Cluster Information, gerakkan penunjuk ke Enabled di sebelah kanan RRSA OIDC.Ganti
<namespace>dengan namespace aplikasi.Ganti
<service_account>dengan akun layanan yang digunakan oleh 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>"
]
}
}Dokumen terkait
Beberapa SDK Alibaba Cloud memungkinkan aplikasi memanggil API layanan cloud tertentu menggunakan token OIDC dari RRSA. Tabel berikut menjelaskan versi SDK yang didukung dan demo.
Bahasa pemrograman
Versi SDK yang didukung
Demo
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
Kueri token STS untuk mengasumsikan Peran RAM selama SSO berbasis peran dengan memanggil AssumeRoleWithOIDC.