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.
Azure Kubernetes Service (AKS) dapat dikonfigurasi untuk menggunakan ID Microsoft Entra untuk autentikasi pengguna. Dalam konfigurasi ini, Anda masuk ke kluster AKS menggunakan token autentikasi Microsoft Entra. Setelah diautentikasi, Anda dapat menggunakan kontrol akses berbasis peran (RBAC) Kube bawaan untuk mengelola akses ke namespace layanan dan sumber daya kluster berdasarkan identitas pengguna atau keanggotaan grup.
Artikel ini memperlihatkan kepada Anda cara:
Mengontrol akses menggunakan RBAC Kubernetes dalam kluster AKS berdasarkan keanggotaan grup Microsoft Entra.
Buat contoh grup dan pengguna di ID Microsoft Entra.
Buat Peran dan RoleBindings dalam kluster AKS yang memberikan izin yang sesuai, seperti membuat dan melihat sumber daya.
Prasyarat
Anda memiliki kluster AKS yang sudah ada dengan integrasi Microsoft Entra diaktifkan. Jika Anda memerlukan kluster AKS dengan konfigurasi ini, lihat Mengintegrasikan ID Microsoft Entra dengan AKS.
RBAC Kubernetes diaktifkan secara default selama pembuatan kluster AKS. Untuk meningkatkan kluster yang ada dengan integrasi Microsoft Entra dan Kubernetes RBAC, lihat Mengaktifkan integrasi Microsoft Entra pada kluster AKS yang ada.
Pastikan Azure CLI versi 2.0.61 atau yang lebih baru diinstal dan dikonfigurasi. Jalankan
az --versionuntuk mencari tahu versinya. Untuk menginstal atau meningkatkan, lihat Install Azure CLI.Jika menggunakan Terraform, instal Terraform versi 2.99.0 atau yang lebih baru.
Gunakan portal Azure atau Azure CLI untuk memverifikasi integrasi Microsoft Entra dengan Kubernetes RBAC diaktifkan.
Untuk memverifikasi menggunakan portal Azure:
- Masuk ke portal Microsoft Azure dan navigasikan ke sumber daya kluster AKS Anda.
- Di menu layanan, di bawah Pengaturan, pilih Konfigurasi keamanan.
- Di bawah bagian Autentikasi dan Otorisasi, pastikan opsi autentikasi Microsoft Entra dengan RBAC Kubernetes dipilih.
Membuat grup di ID Microsoft Entra
Bagian ini mengajarkan anda cara membuat dua peran pengguna untuk menunjukkan bagaimana Kubernetes RBAC dan Microsoft Entra ID mengontrol sumber daya kluster akses. Dua contoh peran berikut adalah:
Pengembang aplikasi
- Pengguna bernama aksdev yang merupakan bagian dari grup appdev .
Site Reliability Engineer (SRE)
- Pengguna bernama akssre yang merupakan bagian dari grup opssre .
Di lingkungan produksi, Anda dapat menggunakan pengguna dan grup yang ada dalam penyewa Microsoft Entra.
Pertama, dapatkan ID sumber daya kluster AKS Anda menggunakan
az aks showperintah . Kemudian, tetapkan ID sumber daya ke variabel bernama AKS_ID sehingga dapat dirujuk dalam perintah lain.AKS_ID=$(az aks show \ --resource-group myResourceGroup \ --name myAKSCluster \ --query id -o tsv)Buat grup contoh pertama di Microsoft Entra ID untuk pengembang aplikasi dengan menggunakan perintah
az ad group create. Contoh berikut membuat grup bernama appdev:APPDEV_ID=$(az ad group create --display-name appdev --mail-nickname appdev --query id -o tsv)Buat penetapan peran Azure untuk grup appdev menggunakan
az role assignment createperintah . Tugas ini memungkinkan setiap anggota grup untuk menggunakankubectlberinteraksi dengan kluster AKS dengan memberikan mereka Peran Pengguna Kluster Layanan Azure Kubernetes.az role assignment create \ --assignee $APPDEV_ID \ --role "Azure Kubernetes Service Cluster User Role" \ --scope $AKS_IDImportant
Nama peran yang Anda tentukan harus sama persis dengan nama definisi peran Azure, termasuk kapitalisasi dan penspasian.
Tip
Jika Anda menerima kesalahan seperti
Principal 35bfec9328bd4d8d9b54dea6dac57b82 doesn't exist in the directory a5443dcd-cd0e-494d-a387-3039b419f0d5., tunggu beberapa detik agar ID objek grup Microsoft Entra disebarluaskan melalui direktori, coba perintah lagiaz role assignment create.
Membuat pengguna di ID Microsoft Entra
Setelah Anda membuat contoh grup ID Microsoft Entra untuk pengembang aplikasi dan SREs, langkah selanjutnya adalah membuat dua akun pengguna yang sesuai. Pengguna ini digunakan untuk masuk ke kluster AKS dan memvalidasi integrasi RBAC Kubernetes yang dijelaskan nanti di artikel ini.
Sebelum memulai, Anda harus mengatur nama prinsipal pengguna (UPN) dan kata sandi untuk pengembang aplikasi. UPN harus mencakup nama domain yang terverifikasi dari penyewa Anda. Misalnya, pengguna pengembang aplikasi, aksdev@contoso.com. Untuk mengetahui (atau mengatur) nama domain terverifikasi di penyewa Anda, lihat Mengelola nama domain kustom di ID Microsoft Entra Anda.
Perintah berikut meminta UPN dari Anda dan mengaturnya ke AAD_DEV_UPN sehingga dapat digunakan dalam perintah selanjutnya.
echo "Please enter the UPN for application developers: " && read AAD_DEV_UPN
Perintah berikut meminta kata sandi dan mengaturnya ke AAD_DEV_PW untuk digunakan dalam perintah selanjutnya:
echo "Please enter the secure password for application developers: " && read AAD_DEV_PW
Membuat akun pengguna
Buat akun pengguna pertama di ID Microsoft Entra menggunakan
az ad user createperintah . Contoh berikut membuat pengguna dengan nama tampilan AKS Dev, UPN, dan kata sandi aman menggunakan nilai dalam AAD_DEV_UPN dan AAD_DEV_PW:AKSDEV_ID=$(az ad user create \ --display-name "AKS Dev" \ --user-principal-name $AAD_DEV_UPN \ --password $AAD_DEV_PW \ --query id -o tsv)Tambahkan pengguna ke grup appdev yang dibuat di bagian sebelumnya menggunakan
az ad group member addperintah :az ad group member add --group appdev --member-id $AKSDEV_ID
Membuat sumber daya kluster AKS
Grup Microsoft Entra, pengguna, dan penetapan peran Azure telah dibuat. Sekarang, Anda mengonfigurasi kluster AKS untuk memungkinkan grup yang berbeda ini mengakses sumber daya tertentu.
Dapatkan kredensial admin kluster menggunakan
az aks get-credentialsperintah . Di salah satu bagian berikut, Anda mendapatkan kredensial kluster pengguna reguler untuk melihat alur autentikasi Microsoft Entra dalam aksi.az aks get-credentials --resource-group myResourceGroup --name myAKSCluster --adminBuat namespace di kluster AKS menggunakan perintah
kubectl create namespace. Contoh berikut membuat nama namespace dev:kubectl create namespace devNote
Dalam Kube, Peran mendefinisikan izin yang akan diberikan, dan RoleBindings menerapkannya ke pengguna atau grup yang diinginkan. Tugas ini dapat diterapkan ke namespace tertentu, atau di seluruh kluster. Untuk informasi lebih lanjut, lihat Menggunakan otorisasi RBAC Kubernetes.
Jika pengguna yang Anda berikan pengikatan RBAC Kubernetes berada di penyewa Microsoft Entra yang sama, tetapkan izin berdasarkan UPN. Jika pengguna berada di penyewa Microsoft Entra yang berbeda, lakukan pencarian dan gunakan properti objectId sebagai gantinya.
Buat Peran untuk namespace dev, yang memberikan izin penuh ke namespace tersebut. Di lingkungan produksi, Anda dapat menentukan lebih banyak izin terperinci untuk pengguna atau grup yang berbeda. Buat file bernama
role-dev-namespace.yamldan tempelkan manifes YAML berikut:kind: Role apiVersion: rbac.authorization.k8s.io/v1 metadata: name: dev-user-full-access namespace: dev rules: - apiGroups: ["", "extensions", "apps"] resources: ["*"] verbs: ["*"] - apiGroups: ["batch"] resources: - jobs - cronjobs verbs: ["*"]Buat Peran menggunakan
kubectl applyperintah dan tentukan nama file manifes YAML Anda.kubectl apply -f role-dev-namespace.yamlDapatkan ID sumber daya untuk grup appdev menggunakan
az ad group showperintah . Grup ini akan ditetapkan sebagai subjek RoleBinding di langkah berikutnya.az ad group show --group appdev --query id -o tsvBuat RoleBinding untuk grup appdev agar dapat menggunakan Peran yang sudah dibuat sebelumnya untuk akses namespace. Buat file bernama
rolebinding-dev-namespace.yaml, dan tempelkan manifes YAML berikut. Pada baris terakhir, ganti groupObjectId dengan output ID objek grup dari perintah sebelumnya.kind: RoleBinding apiVersion: rbac.authorization.k8s.io/v1 metadata: name: dev-user-access namespace: dev roleRef: apiGroup: rbac.authorization.k8s.io kind: Role name: dev-user-full-access subjects: - kind: Group # Replace the placeholder below with the group's objectId (GUID) name: groupObjectIdTip
Jika Anda ingin membuat RoleBinding untuk satu pengguna, tentukan jenis: Pengguna dan ganti groupObjectId dengan UPN di sampel sebelumnya.
Buat RoleBinding menggunakan
kubectl applyperintah dan tentukan nama file manifes YAML Anda:kubectl apply -f rolebinding-dev-namespace.yaml
Mengakses sumber daya kluster AKS dengan identitas Microsoft Entra
Sekarang, uji apakah izin yang diharapkan berfungsi saat Anda membuat dan mengelola sumber daya di kluster AKS. Dalam contoh ini, Anda menjadwalkan dan melihat pod di namespace yang ditetapkan pengguna, dan mencoba menjadwalkan dan melihat pod di luar namespace yang ditetapkan.
Atur ulang konteks kubeconfig menggunakan perintah
az aks get-credentials. Di bagian sebelumnya, Anda set konteks menggunakan info masuk admin kluster. Pengguna admin melewati perintah masuk Microsoft Entra. Tanpa parameter--admin, konteks pengguna yang mengharuskan semua permintaan untuk diautentikasi menggunakan Microsoft Entra ID diterapkan.az aks get-credentials --resource-group myResourceGroup --name myAKSCluster --overwrite-existingJadwalkan pod NGINX dasar menggunakan perintah
kubectl rundalam namespace dev:kubectl run nginx-dev --image=mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine --namespace devMasukkan kredensial untuk akun grup appdev (masukkan kredensial Anda sendiri) di prompt masuk. Setelah Anda berhasil masuk, token akun di-cache untuk perintah mendatang
kubectl. NGINX berhasil dijadwalkan seperti yang ditunjukkan dalam contoh output berikut:$ kubectl run nginx-dev --image=mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine --namespace dev To sign in, use a web browser to open the page https://microsoft.com/devicelogin and enter the code B24ZD6FP8 to authenticate. pod/nginx-dev createdkubectl get podsGunakan perintah untuk melihat pod di namespace dev:kubectl get pods --namespace devPastikan status pod NGINX Berjalan. Hasil tampak seperti output berikut:
$ kubectl get pods --namespace dev NAME READY STATUS RESTARTS AGE nginx-dev 1/1 Running 0 4m
Menguji akses SRE ke sumber daya kluster AKS
Untuk mengonfirmasi bahwa keanggotaan grup Microsoft Entra dan RBAC Kubernetes kami berfungsi dengan benar antara pengguna dan grup yang berbeda, coba perintah sebelumnya saat masuk sebagai pengguna akssre .
Atur ulang konteks kubeconfig menggunakan
az aks get-credentialsperintah yang menghapus token autentikasi yang di-cache sebelumnya untuk pengguna aksdev .az aks get-credentials --resource-group myResourceGroup --name myAKSCluster --overwrite-existingJadwalkan dan lihat pods di namespace SRE yang ditetapkan. Saat diminta, masuk dengan kredensial akun grup opssre (masukkan kredensial Anda sendiri).
kubectl run nginx-sre --image=mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine --namespace sre kubectl get pods --namespace sreSeperti yang ditunjukkan pada contoh output berikut, Anda dapat berhasil membuat dan melihat pod:
$ kubectl run nginx-sre --image=mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine --namespace sreUntuk masuk, gunakan browser web untuk membuka halaman https://microsoft.com/devicelogin dan masukkan kode BM4RHP3FD untuk mengautentikasi.
pod/nginx-sre created $ kubectl get pods --namespace sre NAME READY STATUS RESTARTS AGE nginx-sre 1/1 Running 0Cobalah untuk melihat atau menjadwalkan pod di luar namespace SRE yang ditetapkan.
kubectl get pods --all-namespaces kubectl run nginx-sre --image=mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine --namespace devPerintah
kubectlini gagal, seperti yang ditunjukkan dalam contoh output berikut. Keanggotaan grup pengguna serta Peran Kubernetes dan RoleBindings tidak memberikan izin untuk membuat atau mengelola sumber daya di namespace lain.$ kubectl get pods --all-namespaces Error from server (Forbidden): pods is forbidden: User "akssre@contoso.com" cannot list pods at the cluster scope $ kubectl run nginx-sre --image=mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine --namespace dev Error from server (Forbidden): pods is forbidden: User "akssre@contoso.com" cannot create pods in the namespace "dev"
Membuat dan melihat sumber daya kluster di luar namespace yang ditetapkan
Untuk melihat pod di luar namespace dev . Gunakan perintah kubectl get pods dengan --all-namespaces:
kubectl get pods --all-namespaces
Keanggotaan grup pengguna tidak memiliki Peran Kubernetes yang memungkinkan tindakan ini, seperti yang ditunjukkan pada contoh output berikut:
Error from server (Forbidden): pods is forbidden: User "aksdev@contoso.com" cannot list resource "pods" in API group "" at the cluster scope
Dengan cara yang sama, jadwalkan pod di namespace yang berbeda, seperti namespace SRE. Keanggotaan grup pengguna tidak selaras dengan Peran Kubernetes dan RoleBinding untuk memberikan izin ini, seperti yang ditunjukkan pada contoh output berikut:
$ kubectl run nginx-dev --image=mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine --namespace sre
Error from server (Forbidden): pods is forbidden: User "akssre@contoso.com" cannot create resource "pods" in API group "" in the namespace "sre"
Membersihkan sumber daya kluster
Untuk membersihkan semua sumber daya, jalankan perintah berikut:
# Get the admin kubeconfig context to delete the necessary cluster resources.
az aks get-credentials --resource-group myResourceGroup --name myAKSCluster --admin
# Delete the dev and SRE namespaces. This also deletes the pods, Roles, and RoleBindings.
kubectl delete namespace dev
kubectl delete namespace sre
# Delete the Microsoft Entra ID user accounts for aksdev and akssre.
az ad user delete --upn-or-object-id $AKSDEV_ID
az ad user delete --upn-or-object-id $AKSSRE_ID
# Delete the Microsoft Entra ID groups for appdev and opssre. This also deletes the Azure role assignments.
az ad group delete --group appdev
az ad group delete --group opssre
Langkah berikutnya
Untuk informasi selengkapnya tentang cara mengamankan kluster Kubernetes, lihat Opsi akses dan identitas untuk AKS.
Untuk praktik terbaik tentang kontrol identitas dan sumber daya, lihat Konsep autentikasi dan otorisasi di AKS.