Menggunakan kontrol akses berbasis peran Kubernetes dengan ID Microsoft Entra di Azure Kubernetes Service
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 Kubernetes (Kubernetes RBAC) bawaan untuk mengelola akses ke namespace layanan dan sumber daya kluster berdasarkan identitas pengguna atau keanggotaan grup.
Artikel ini menunjukkan 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 untuk memberikan izin yang sesuai untuk membuat dan melihat sumber daya.
- 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 Anda dengan integrasi Microsoft Entra dan RBAC Kubernetes, Aktifkan integrasi Microsoft Entra pada kluster AKS yang ada.
- Pastikan Azure CLI versi 2.0.61 atau yang lebih baru diinstal dan dikonfigurasi. Jalankan
az --version
untuk menemukan versinya. Jika Anda perlu memasang atau meningkatkan, lihat Memasang 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 Azure dan navigasikan ke sumber daya kluster AKS Anda.
- Di menu layanan, di bawah Pengaturan, pilih Konfigurasi kluster.
- Di bawah bagian Autentikasi dan Otorisasi , verifikasi autentikasi Microsoft Entra dengan opsi RBAC Kubernetes dipilih.
Dalam artikel ini, kita akan membuat dua peran pengguna untuk menunjukkan bagaimana Kubernetes RBAC dan Microsoft Entra ID mengontrol akses ke sumber daya kluster. Dua peran contoh berikut digunakan:
- Pengembang aplikasi
- Pengguna bernama aksdev yang merupakan bagian dari grup appdev .
- Teknisi keandalan situs
- 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 show
perintah . 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 ID Microsoft Entra untuk pengembang aplikasi menggunakan
az ad group create
perintah . Contoh berikut membuat grup sumber daya 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 create
perintah . Tugas ini memungkinkan setiap anggota grup untukkubectl
berinteraksi dengan kluster AKS dengan memberikan Peran Pengguna Kluster Layanan Azure Kube.az role assignment create \ --assignee $APPDEV_ID \ --role "Azure Kubernetes Service Cluster User Role" \ --scope $AKS_ID
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 lagi az role assignment create
.
Buat grup contoh kedua untuk SRE bernama opssre.
OPSSRE_ID=$(az ad group create --display-name opssre --mail-nickname opssre --query id -o tsv)
Buat penetapan peran Azure untuk memberi anggota grup Peran Pengguna Kluster Azure Kubernetes Service.
az role assignment create \ --assignee $OPSSRE_ID \ --role "Azure Kubernetes Service Cluster User Role" \ --scope $AKS_ID
Sekarang setelah kita memiliki dua contoh grup yang dibuat di MICROSOFT Entra ID untuk pengembang aplikasi dan SRE, kita akan membuat dua contoh pengguna. Untuk menguji integrasi RBAC Kubernetes di akhir artikel, Anda akan masuk ke kluster AKS dengan akun-akun ini.
Set nama prinsipal pengguna (UPN) dan kata sandi untuk pengembang aplikasi. Nama prinsipal pengguna harus menyertakan nama domain terverifikasi penyewa Anda, misalnya aksdev@contoso.com
.
Perintah berikut meminta ANDA untuk UPN 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
- Buat akun pengguna pertama di ID Microsoft Entra menggunakan
az ad user create
perintah . Contoh berikut membuat pengguna dengan nama tampilan AKS Dev dan UPN serta 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 add
perintah .
az ad group member add --group appdev --member-id $AKSDEV_ID
- Atur nama prinsipal pengguna dan kata sandi untuk SREs. Nama prinsipal pengguna harus menyertakan nama domain terverifikasi penyewa Anda, misalnya
akssre@contoso.com
. Perintah berikut meminta UPN dan mengaturnya ke AAD_SRE_UPN untuk digunakan dalam perintah selanjutnya:
echo "Please enter the UPN for SREs: " && read AAD_SRE_UPN
- Perintah berikut meminta kata sandi dan mengaturnya ke AAD_SRE_PW untuk digunakan dalam perintah selanjutnya:
echo "Please enter the secure password for SREs: " && read AAD_SRE_PW
- Membuat akun pengguna kedua. Contoh berikut membuat pengguna dengan nama tampilan AKS SRE dan nama prinsipal pengguna serta kata sandi aman menggunakan nilai dalam AAD_SRE_UPN dan AAD_SRE_PW:
# Create a user for the SRE role
AKSSRE_ID=$(az ad user create \
--display-name "AKS SRE" \
--user-principal-name $AAD_SRE_UPN \
--password $AAD_SRE_PW \
--query id -o tsv)
# Add the user to the opssre Azure AD group
az ad group member add --group opssre --member-id $AKSSRE_ID
Kami membuat grup Microsoft Entra, pengguna, dan penetapan peran Azure kami. Sekarang, kita akan mengonfigurasi kluster AKS untuk memungkinkan grup yang berbeda ini mengakses sumber daya tertentu.
- Dapatkan kredensial admin kluster menggunakan
az aks get-credentials
perintah . Di salah satu bagian berikut, Anda mendapatkan kredensial kluster pengguna reguler untuk melihat alur autentikasi Microsoft Entra beraksi.
az aks get-credentials --resource-group myResourceGroup --name myAKSCluster --admin
- Buat namespace layanan di kluster AKS menggunakan
kubectl create namespace
perintah . Contoh berikut membuat nama namespace dev:
kubectl create namespace dev
Catatan
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 Kube.
Jika pengguna yang Anda berikan pengikatan RBAC Kubernetes berada di penyewa Microsoft Entra yang sama, tetapkan izin berdasarkan userPrincipalName (UPN). Jika pengguna berada di penyewa Microsoft Entra yang berbeda, kueri dan gunakan properti objectId sebagai gantinya.
- Buat Peran untuk namespace dev , yang memberikan izin penuh ke namespace layanan. Di lingkungan produksi, Anda dapat menentukan lebih banyak izin terperinci untuk pengguna atau grup yang berbeda. Buat file bernama
role-dev-namespace.yaml
dan 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 apply
perintah dan tentukan nama file manifes YAML Anda.
kubectl apply -f role-dev-namespace.yaml
- Dapatkan ID sumber daya untuk grup appdev menggunakan
az ad group show
perintah . Grup ini ditetapkan sebagai subjek RoleBinding di langkah berikutnya.
az ad group show --group appdev --query id -o tsv
- Buat RoleBinding untuk grup appdev untuk menggunakan Peran yang 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
namespace: dev
name: groupObjectId
Tip
Jika Anda ingin membuat RoleBinding untuk satu pengguna, tentukan jenis: Pengguna serta ganti groupObjectId dengan nama prinsipal pengguna (UPN) dalam sampel di atas.
- Buat RoleBinding menggunakan
kubectl apply
perintah dan tentukan nama file manifes YAML Anda:
kubectl apply -f rolebinding-dev-namespace.yaml
Sekarang, kita akan mengulangi langkah-langkah sebelumnya untuk membuat namespace, Peran, dan RoleBinding untuk SREs.
- Buat namespace layanan untuk sre menggunakan
kubectl create namespace
perintah .
kubectl create namespace sre
- Buat file bernama
role-sre-namespace.yaml
dan tempelkan manifes YAML berikut:
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: sre-user-full-access
namespace: sre
rules:
- apiGroups: ["", "extensions", "apps"]
resources: ["*"]
verbs: ["*"]
- apiGroups: ["batch"]
resources:
- jobs
- cronjobs
verbs: ["*"]
- Buat Peran menggunakan
kubectl apply
perintah dan tentukan nama file manifes YAML Anda.
kubectl apply -f role-sre-namespace.yaml
- Dapatkan ID sumber daya untuk grup opssre menggunakan perintah az ad group show .
az ad group show --group opssre --query id -o tsv
- Buat RoleBinding untuk grup opssre untuk menggunakan Peran yang dibuat sebelumnya untuk akses namespace. Buat file bernama
rolebinding-sre-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: sre-user-access
namespace: sre
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: Role
name: sre-user-full-access
subjects:
- kind: Group
namespace: sre
name: groupObjectId
- Buat RoleBinding menggunakan
kubectl apply
perintah dan tentukan nama file manifes YAML Anda.
kubectl apply -f rolebinding-sre-namespace.yaml
Sekarang, kita akan menguji bahwa izin yang diharapkan berfungsi saat Anda membuat dan mengelola sumber daya di kluster AKS. Dalam contoh ini, kita akan menjadwalkan dan melihat pod di namespace layanan yang ditetapkan pengguna, dan mencoba menjadwalkan dan melihat pod di luar namespace yang ditetapkan.
- Atur ulang konteks kubeconfig menggunakan
az aks get-credentials
perintah . Di bagian sebelumnya, Anda set konteks menggunakan info masuk admin kluster. Pengguna admin melewati perintah masuk Microsoft Entra.--admin
Tanpa parameter , konteks pengguna diterapkan yang mengharuskan semua permintaan diautentikasi menggunakan ID Microsoft Entra.
az aks get-credentials --resource-group myResourceGroup --name myAKSCluster --overwrite-existing
- Jadwalkan pod NGINX dasar menggunakan
kubectl run
perintah di namespace dev .
kubectl run nginx-dev --image=mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine --namespace dev
- Masukkan kredensial untuk akun Anda sendiri
appdev@contoso.com
yang dibuat di awal artikel sebagai perintah masuk. Setelah Anda berhasil masuk, token akun di-cache untuk perintah mendatangkubectl
. 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 created
kubectl get pods
Gunakan perintah untuk melihat pod di namespace dev.
kubectl get pods --namespace dev
- Pastikan status pod NGINX Berjalan. Output akan terlihat mirip dengan output berikut:
$ kubectl get pods --namespace dev
NAME READY STATUS RESTARTS AGE
nginx-dev 1/1 Running 0 4m
Cobalah untuk melihat pod di luar namespace dev . kubectl get pods
Gunakan perintah lagi, kali ini untuk melihat --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, cobalah untuk menjadwalkan pod di namespace layanan yang berbeda, seperti namespace layanan 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 "aksdev@contoso.com" cannot create resource "pods" in API group "" in the namespace "sre"
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 opssre .
- Atur ulang konteks kubeconfig menggunakan
az aks get-credentials
perintah yang menghapus token autentikasi yang di-cache sebelumnya untuk pengguna aksdev .
az aks get-credentials --resource-group myResourceGroup --name myAKSCluster --overwrite-existing
- Cobalah untuk menjadwalkan dan melihat od di namespace sre yang ditetapkan. Saat diminta, masuk dengan kredensial Anda sendiri
opssre@contoso.com
yang dibuat di awal artikel.
kubectl run nginx-sre --image=mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine --namespace sre
kubectl get pods --namespace sre
Seperti 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 sre
3. To sign in, use a web browser to open the page https://microsoft.com/devicelogin and enter the code BM4RHP3FD to authenticate.
pod/nginx-sre created
$ kubectl get pods --namespace sre
NAME READY STATUS RESTARTS AGE
nginx-sre 1/1 Running 0
- Cobalah untuk melihat atau menjadwalkan pod di luar namespace layanan SRE yang ditetapkan.
kubectl get pods --all-namespaces
kubectl run nginx-sre --image=mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine --namespace dev
Perintah kubectl
ini gagal, seperti yang ditunjukkan dalam contoh output berikut. Keanggotaan grup pengguna dan Peran Kubernetes dan RoleBindings tidak memberikan izin untuk membuat atau mengelola sumber daya di namespace layanan 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"
Dalam artikel ini, Anda membuat sumber daya di kluster AKS dan pengguna dan grup di ID Microsoft Entra. 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 Azure AD 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 Azure AD groups for appdev and opssre. This also deletes the Azure role assignments.
az ad group delete --group appdev
az ad group delete --group opssre
Untuk informasi selengkapnya tentang cara mengamankan kluster Kubernetes, lihat Opsi akses dan identitas untuk AKS.
Untuk praktik terbaik tentang identitas dan kontrol sumber daya, lihat Praktik terbaik untuk autentikasi dan otorisasi di AKS.
Umpan balik Azure Kubernetes Service
Azure Kubernetes Service adalah proyek sumber terbuka. Pilih tautan untuk memberikan umpan balik: