Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Artikel ini menunjukkan cara mengotorisasi panggilan ke API Kubernetes di Azure Kubernetes Service (AKS) menggunakan identitas ID Microsoft Entra. Otorisasi ID Entra untuk API Kubernetes menggunakan penetapan peran Azure RBAC untuk memberikan akses ke sumber daya Kubernetes. Untuk sumber daya Kubernetes bawaan, tetapkan salah satu peran bawaan AKS (seperti Pembaca RBAC Azure Kubernetes Service) pada lingkup kluster atau namespace. Untuk sumber daya kustom (CRD), tetapkan peran kustom dengan kondisi Azure ABAC yang menentukan grup CRD atau jenis yang dapat diakses penerima tugas. Dua penetapan peran terdiri dari: satu memberikan akses ke sumber daya Kubernetes standar, dan yang lain memberikan akses bersyarat ke sumber daya kustom tertentu.
Untuk gambaran umum konseptual opsi otorisasi API Kubernetes yang tersedia di AKS, lihat Konsep otorisasi kluster.
Note
Saat menggunakan autentikasi terintegrasi antara MICROSOFT Entra ID dan AKS, Anda dapat menggunakan pengguna, grup, atau perwakilan layanan Microsoft Entra sebagai subjek dalam kontrol akses berbasis peran Kubernetes (Kubernetes RBAC). Dengan otorisasi ID Entra, Anda tidak perlu mengelola identitas dan kredensial pengguna secara terpisah untuk Kubernetes. Namun, Anda masih perlu mengatur dan mengelola penetapan peran Entra ID dan pengikatan RBAC Kubernetes secara terpisah.
Sebelum Anda mulai
- Anda memerlukan Azure CLI versi 2.24.0 atau yang lebih baru yang diinstal dan dikonfigurasi. Jalankan
az --versionuntuk menemukan versinya. Jika Anda perlu memasang atau meningkatkan, lihat Memasang Azure CLI. - Anda memerlukan
kubectl, dengan versi minimum 1.18.3. - Anda memerlukan integrasi Microsoft Entra terkelola yang diaktifkan pada kluster sebelum dapat menambahkan otorisasi ID Entra untuk API Kubernetes. Jika Anda perlu mengaktifkan integrasi Microsoft Entra terkelola, lihat Menggunakan ID Microsoft Entra di AKS.
- Penetapan peran baru dapat memakan waktu hingga lima menit untuk disebarluaskan dan diperbarui oleh server otorisasi.
- Autorisasi ID Entra untuk API Kubernetes mengharuskan tenant Microsoft Entra yang dikonfigurasi untuk autentikasi sama dengan tenant untuk langganan yang mengelola kluster AKS Anda.
Membuat kluster AKS baru dengan integrasi Microsoft Entra terkelola dan otorisasi ID Entra
Buat grup sumber daya Azure menggunakan perintah
az group create.export RESOURCE_GROUP=<resource-group-name> export LOCATION=<azure-region> az group create --name $RESOURCE_GROUP --location $LOCATIONBuat kluster AKS dengan integrasi Microsoft Entra terkelola dan otorisasi ID Entra menggunakan perintah
az aks create.export CLUSTER_NAME=<cluster-name> az aks create \ --resource-group $RESOURCE_GROUP \ --name $CLUSTER_NAME \ --enable-aad \ --enable-azure-rbac \ --generate-ssh-keysOutput Anda akan terlihat mirip dengan contoh output berikut:
"AADProfile": { "adminGroupObjectIds": null, "clientAppId": null, "enableAzureRbac": true, "managed": true, "serverAppId": null, "serverAppSecret": null, "tenantId": "****-****-****-****-****" }
Mengaktifkan otorisasi ID Entra pada kluster AKS yang ada
Aktifkan otorisasi ID Entra untuk API Kubernetes pada kluster AKS yang ada dengan menggunakan perintah
az aks updatedengan flag--enable-azure-rbac.az aks update --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --enable-azure-rbac
Peran bawaan AKS
AKS menyediakan peran bawaan berikut:
| Peranan | Description |
|---|---|
| Pembaca Azure Kubernetes Service RBAC | Mengizinkan akses baca-saja untuk melihat sebagian besar objek di namespace. Ini tidak mengizinkan menampilkan peran atau penggabungan peran. Peran ini tidak mengizinkan melihat Secrets, karena membaca konten Rahasia memungkinkan akses ke kredensial ServiceAccount di namespace, yang akan memungkinkan akses API sebagai ServiceAccount apa pun di namespace (bentuk eskalasi hak istimewa). |
| Penulis RBAC Azure Kubernetes Service | Mengizinkan akses baca/tulis ke sebagian besar objek dalam sebuah namespace. Peran ini tidak memungkinkan melihat atau memodifikasi peran atau pengikatan peran. Namun, peran ini memungkinkan mengakses Secrets dan menjalankan Pod sebagai ServiceAccount apa pun di namespace layanan, sehingga dapat digunakan untuk mendapatkan tingkat akses API dari ServiceAccount apa pun di namespace layanan. |
| Azure Kubernetes Service RBAC Admin | Mengizinkan akses admin, yang dimaksudkan untuk diberikan di dalam namespace. Mengizinkan akses read/write ke sebagian besar sumber daya di namespace (atau cakupan kluster), termasuk kemampuan untuk membuat peran dan pengikatan peran dalam namespace. Peran ini tidak mengizinkan akses tulis ke kuota sumber daya atau ke namespace itu sendiri. |
| Azure Kubernetes Service RBAC Admin Kluster | Mengizinkan akses bagi pengguna superuser untuk melakukan tindakan apa pun pada sumber daya apa pun. Ini memberikan kontrol penuh atas setiap sumber daya dalam kluster dan semua namespace. |
Membuat penetapan peran untuk akses kluster
Dapatkan ID sumber daya AKS Anda dengan perintah
az aks show.AKS_ID=$(az aks show --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --query id --output tsv)Buat penetapan peran menggunakan
az role assignment createperintah .<AAD-ENTITY-ID>dapat berupa nama pengguna atau ID klien dari perwakilan layanan. Contoh berikut menunjukkan cara melakukan penugasan peran untuk peran Admin RBAC Azure Kubernetes Service.az role assignment create --role "Azure Kubernetes Service RBAC Admin" --assignee <AAD-ENTITY-ID> --scope $AKS_IDNote
Anda dapat membuat penetapan peran Azure Kubernetes Service RBAC Reader dan Azure Kubernetes Service RBAC Writer yang terbatas pada namespace tertentu dalam kluster dengan menggunakan perintah
az role assignment createdan mengatur cakupan ke namespace yang diinginkan.az role assignment create --role "Azure Kubernetes Service RBAC Reader" --assignee <AAD-ENTITY-ID> --scope $AKS_ID/namespaces/<namespace-name>
Membuat definisi peran kustom
Untuk sumber daya Kubernetes bawaan, definisi peran kustom mereferensikan tindakan grup API yang sesuai di bawah Microsoft.ContainerService/managedClusters/. Contoh berikut memungkinkan pengguna untuk hanya membaca deployment dan tidak yang lainnya. Untuk daftar lengkap kemungkinan tindakan, lihat operasi Microsoft.ContainerService. Untuk memfilter akses ke grup atau jenis sumber daya kustom tertentu (CRD), lihat Membatasi akses sumber daya kustom menggunakan kondisi ABAC nanti di artikel ini.
Untuk membuat definisi peran kustom Anda sendiri, salin file berikut, ganti
<YOUR SUBSCRIPTION ID>dengan ID langganan Anda sendiri, lalu simpan sebagaideploy-view.json.{ "Name": "AKS Deployment Reader", "Description": "Lets you view all deployments in cluster/namespace.", "Actions": [], "NotActions": [], "DataActions": [ "Microsoft.ContainerService/managedClusters/apps/deployments/read" ], "NotDataActions": [], "assignableScopes": [ "/subscriptions/<YOUR SUBSCRIPTION ID>" ] }Buat definisi peran menggunakan perintah
az role definition create, mengatur--role-definitionke filedeploy-view.jsonyang Anda buat di langkah sebelumnya.az role definition create --role-definition @deploy-view.jsonTetapkan definisi peran ke pengguna atau identitas lain menggunakan
az role assignment createperintah .az role assignment create --role "AKS Deployment Reader" --assignee <AAD-ENTITY-ID> --scope $AKS_ID
Membatasi akses sumber daya kustom menggunakan kondisi ABAC (pratinjau)
Important
Fitur pratinjau AKS tersedia atas dasar layanan mandiri dan pendaftaran sukarela. Pratinjau disediakan "apa adanya" dan "sebagaimana tersedia," dan pratinjau tersebut dikecualikan dari perjanjian tingkat layanan (SLA) serta garansi terbatas. Pratinjau AKS sebagian didukung oleh dukungan pelanggan berdasarkan upaya terbaik yang dapat dilakukan. Dengan demikian, fitur-fitur ini tidak dimaksudkan untuk penggunaan produksi. Untuk informasi lebih lanjut, lihat artikel dukungan berikut ini:
Kondisi ABAC memungkinkan Anda memfilter penugasan peran Entra ID ke grup dan jenis sumber daya kustom (CRD) tertentu — secara terpusat melalui Microsoft Entra ID, tanpa perlu menulis RBAC Kubernetes dan manifes per kluster. Untuk latar belakang di Azure ABAC, lihat Apa itu kondisi penetapan peran Azure?.
Kapan menggunakan kondisi ABAC
Gunakan fitur ini saat Anda ingin:
- Batasi grup CRD mana atau jenis yang dapat dicantumkan atau didapatkan oleh penerima tugas.
- Terapkan batas akses sumber daya kustom secara terpusat dari ID Microsoft Entra tanpa mengelola RBAC
RoleKubernetes danRoleBindingobjek pada setiap kluster. - Membedakan antara CRD yang diterbitkan oleh operator yang berbeda (misalnya, izinkan
secrets-store.csi.x-k8s.iosaat memblokirsecurity.istio.io).
Atribut kondisi yang tersedia
Atribut permintaan berikut tersedia saat menulis kondisi untuk API Kubernetes pada kluster AKS:
| Attribute | Description |
|---|---|
Microsoft.ContainerService/managedClusters/customResources:group |
Grup API dari sumber daya kustom yang diakses (misalnya, secrets-store.csi.x-k8s.io). |
Microsoft.ContainerService/managedClusters/customResources:kind |
Jenis sumber daya kustom yang diakses (misalnya, secretproviderclasses). |
Menambahkan kondisi ABAC ke penetapan peran
Contoh berikut membuat peran kustom Pembaca CRD AKS yang memberikan akses baca ke sumber daya kustom, lalu menetapkannya dengan kondisi yang hanya memungkinkan akses ke secretproviderclasses dalam secrets-store.csi.x-k8s.io grup (CRD yang digunakan oleh penyedia Azure Key Vault untuk Driver Secrets Store CSI).
Simpan definisi peran berikut ke file bernama
crd-reader.json, mengganti<YOUR SUBSCRIPTION ID>dengan ID langganan Anda sendiri.{ "Name": "AKS CRD Reader", "Description": "Lets you read custom resources in the cluster.", "Actions": [], "NotActions": [], "DataActions": [ "Microsoft.ContainerService/managedClusters/customresources/read" ], "NotDataActions": [], "assignableScopes": [ "/subscriptions/<YOUR SUBSCRIPTION ID>" ] }Buat definisi peran menggunakan
az role definition createperintah .az role definition create --role-definition @crd-reader.jsonSimpan kondisi berikut ke file bernama
abac-condition.txt. Kondisi ini memungkinkan pembacaan sumber daya non-kustom untuk melewati tanpa perubahan, dan membatasi pembacaan terhadap sumber daya kustom ke grup dan jenis tertentu.( ( !(ActionMatches{'Microsoft.ContainerService/managedClusters/customresources/read'}) ) OR ( @Request[Microsoft.ContainerService/managedClusters/customResources:group] StringEqualsIgnoreCase 'secrets-store.csi.x-k8s.io' AND @Request[Microsoft.ContainerService/managedClusters/customResources:kind] StringEqualsIgnoreCase 'secretproviderclasses' ) )Buat penetapan peran dengan kondisi menggunakan perintah
az role assignment create.az role assignment create \ --role "AKS CRD Reader" \ --assignee <AAD-ENTITY-ID> \ --scope $AKS_ID \ --condition "$(cat abac-condition.txt)" \ --condition-version "2.0" \ --description "Allow reads on SecretProviderClass resources only"
Anda juga dapat menambahkan kondisi melalui portal Microsoft Azure. Pada halaman Tambahkan penetapan peran , pilih tab Kondisi , lalu pilih Tambahkan kondisi dan gunakan editor visual untuk menyusun ekspresi.
Memverifikasi kondisi
Setelah penetapan peran disebarluaskan (hingga lima menit), masuk sebagai penerima tugas dan konfirmasikan bahwa mereka dapat membaca CRD yang diizinkan tetapi bukan CRD lain.
Dapatkan kredensial kluster menggunakan
az aks get-credentialsperintah .az aks get-credentials --resource-group $RESOURCE_GROUP --name $CLUSTER_NAMEDaftar
secretproviderclassesdari grupsecrets-store.csi.x-k8s.io, yang diizinkan oleh kondisi. Komando harus berhasil dan mengembalikan sumber daya yang ada atau daftar kosong (atau kesalahan "tidak ditemukan" jika CRD tidak diinstal pada kluster).kubectl get secretproviderclasses.secrets-store.csi.x-k8s.io --all-namespacesDaftar
authorizationpoliciesdari grup Istiosecurity.istio.io, yang kondisinya memblokir. Perintah harus gagal dengan galatForbiddendari webhook otorisasi Entra ID (dengan asumsi Istio CRD diinstal pada kluster; jika tidak,kubectlmengembalikan galat 'not-found' sebelum server API mencapai webhook otorisasi).kubectl get authorizationpolicies.security.istio.io --all-namespaces
Membersihkan sumber daya
Menonaktifkan otorisasi ID Entra
Hapus otorisasi ID Entra menggunakan perintah
az aks updatedengan bendera--disable-azure-rbac.az aks update --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --disable-azure-rbac
Menghapus penetapan peran
Gunakan perintah
az role assignment listuntuk mencantumkan penugasan peran.az role assignment list --scope $AKS_ID --query [].id --output tsvHapus penetapan peran menggunakan
az role assignment deleteperintah .az role assignment delete --ids <LIST OF ASSIGNMENT IDS>
Menghapus definisi peran
Hapus definisi peran kustom menggunakan
az role definition deleteperintah .az role definition delete --name "AKS Deployment Reader"
Menghapus grup sumber daya dan kluster AKS
Hapus grup sumber daya (dan kluster AKS yang dikandungnya) menggunakan
az group deleteperintah .az group delete --name $RESOURCE_GROUP --yes --no-wait
Langkah berikutnya
Untuk mempelajari selengkapnya tentang autentikasi AKS, otorisasi, RBAC Kubernetes, dan Azure RBAC, lihat: