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.
Berlaku untuk: ✔️ AKS Automatic ✔️ AKS Standard
Artikel ini menunjukkan cara mengotorisasi panggilan ke API Kubernetes di Azure Kubernetes Service (AKS) dengan menggunakan identitas Microsoft Entra ID. Otorisasi Microsoft Entra ID 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 Azure Kubernetes Service RBAC Reader) pada cakupan 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 sebagian besar beban kerja produksi, AKS Automatic adalah opsi default yang direkomendasikan dan siap untuk produksi bagi AKS. Kluster Otomatis AKS telah dikonfigurasi sebelumnya dengan Azure RBAC untuk otorisasi Kubernetes, sehingga Anda dapat fokus pada penetapan peran Microsoft Entra yang tepat kepada pengguna, grup, dan perwakilan layanan.
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 menggunakan otorisasi Microsoft Entra ID, Anda tidak perlu mengelola identitas dan kredensial pengguna secara terpisah untuk Kubernetes. Namun, Anda masih perlu menyiapkan dan mengelola penetapan peran Microsoft Entra ID dan pengikatan RBAC Kubernetes secara terpisah.
Note
Kluster Otomatis AKS telah dikonfigurasi sebelumnya untuk menggunakan Azure RBAC untuk otorisasi Kubernetes. Anda tidak perlu mengaktifkan --enable-azure-rbac pada kluster Otomatis AKS. Di AKS Standard, Anda dapat mengaktifkan atau menonaktifkan Azure RBAC berdasarkan konfigurasi kluster Anda.
Prerequisites
- 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 Microsoft Entra ID 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.
- Otorisasi Microsoft Entra ID untuk API Kubernetes mengharuskan tenant Microsoft Entra yang dikonfigurasi untuk autentikasi sama dengan tenant untuk langganan yang menaungi klaster AKS Anda.
Perilaku mode kluster AKS
| Mode kluster | Azure RBAC untuk otorisasi Kubernetes |
|---|---|
| AKS Otomatis | Telah dikonfigurasi sebelumnya (diaktifkan secara default) |
| Standar AKS | Opsional (aktifkan dengan --enable-azure-rbac) |
Membuat kluster AKS baru dengan integrasi Microsoft Entra terkelola dan otorisasi Microsoft Entra ID
AKS Otomatis (disarankan untuk beban kerja produksi)
Untuk beban kerja produksi baru, gunakan AKS Otomatis. Azure RBAC untuk otorisasi Kubernetes telah diprakonfigurasi pada kluster AKS Automatic.
Buat kluster Otomatis AKS dengan mengikuti Buat kluster otomatis Azure Kubernetes Service (AKS).
Opsional: verifikasi bahwa Azure RBAC untuk otorisasi Kubernetes diaktifkan pada kluster Anda menggunakan
az aks showperintah .# Set environment variables export RESOURCE_GROUP=<resource-group-name> export CLUSTER_NAME=<cluster-name> az aks show \ --resource-group $RESOURCE_GROUP \ --name $CLUSTER_NAME \ --query "aadProfile.enableAzureRbac" \ --output tsv
Standar AKS
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 Standard dengan integrasi Microsoft Entra terkelola dan otorisasi Microsoft Entra ID 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 Microsoft Entra ID pada kluster AKS yang ada
Untuk kluster AKS Standar yang sudah ada, aktifkan otorisasi Microsoft Entra ID untuk API Kubernetes menggunakan perintah az aks update dengan flag --enable-azure-rbac.
# Set environment variables
export RESOURCE_GROUP=<resource-group-name>
export CLUSTER_NAME=<cluster-name>
# Enable Microsoft Entra ID authorization for the Kubernetes API
az aks update --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --enable-azure-rbac
Kluster Otomatis AKS sudah memiliki RBAC Azure untuk otorisasi Kubernetes yang telah dikonfigurasi sebelumnya. Anda tidak perlu menjalankan --enable-azure-rbac untuk AKS Automatic.
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. |
| Administrator RBAC Azure Kubernetes Service | 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.# Set environment variables export RESOURCE_GROUP=<resource-group-name> export CLUSTER_NAME=<cluster-name> # Get the AKS resource ID 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 membuat penugasan peran untuk peran Azure Kubernetes Service RBAC Admin.# Set environment variables export RESOURCE_GROUP=<resource-group-name> export CLUSTER_NAME=<cluster-name> # Get the AKS resource ID AKS_ID=$(az aks show --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --query id --output tsv) # Create a role assignment for the Azure Kubernetes Service RBAC Admin role 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 dicakup ke namespace tertentu dalam kluster menggunakan
az role assignment createperintah dan 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 .# Set environment variables export RESOURCE_GROUP=<resource-group-name> export CLUSTER_NAME=<cluster-name> # Get the AKS resource ID AKS_ID=$(az aks show --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --query id --output tsv) # Create a role assignment for the AKS Deployment Reader role 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 penetapan peran Microsoft Entra ID ke grup dan jenis sumber daya kustom (CRD) tertentu—secara terpusat, dari Microsoft Entra ID, tanpa menulis manifes Kubernetes RBAC Role dan RoleBinding untuk tiap kluster. Untuk latar belakang 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. Kemudian, peran ditetapkan dengan kondisi yang hanya mengizinkan akses ke secretproviderclasses dalam grup secrets-store.csi.x-k8s.io (CRD yang digunakan oleh penyedia Azure Key Vault untuk Secrets Store CSI Driver).
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.# Set environment variables export RESOURCE_GROUP=<resource-group-name> export CLUSTER_NAME=<cluster-name> # Get the AKS resource ID AKS_ID=$(az aks show --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --query id --output tsv) # Create a role assignment for the AKS CRD Reader role with an ABAC condition 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 .# Set environment variables export RESOURCE_GROUP=<resource-group-name> export CLUSTER_NAME=<cluster-name> # Get the cluster credentials 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 kesalahanForbiddendari webhook otorisasi Microsoft Entra ID (dengan asumsi Istio CRD telah diinstal pada kluster; jika tidak,kubectlakan mengembalikan kesalahan not-found sebelum server API mencapai webhook otorisasi).kubectl get authorizationpolicies.security.istio.io --all-namespaces
Membersihkan sumber daya
Menonaktifkan otorisasi Microsoft Entra ID
Hapus otorisasi Microsoft Entra ID menggunakan perintah az aks update dengan flag --disable-azure-rbac.
# Set environment variables
export RESOURCE_GROUP=<resource-group-name>
export CLUSTER_NAME=<cluster-name>
# Disable Microsoft Entra ID authorization for the Kubernetes API
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.# Set environment variables export RESOURCE_GROUP=<resource-group-name> export CLUSTER_NAME=<cluster-name> # Get the AKS resource ID AKS_ID=$(az aks show --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --query id --output tsv) # List role assignments for the AKS cluster 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 delete perintah .
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 delete perintah .
# Set environment variables
export RESOURCE_GROUP=<resource-group-name>
# Delete the resource group and all resources in it
az group delete --name $RESOURCE_GROUP --yes --no-wait
Konten terkait
Untuk mempelajari selengkapnya tentang AKS, lihat artikel berikut ini: