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.

Sebelum Anda mulai

  • 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:

  • Dari browser Anda, masuk ke portal Azure.
  • Navigasi ke layanan Kubernetes, dan dari panel sebelah kiri pilih Konfigurasi kluster.
  • Di bawah bagian Autentikasi dan Otorisasi , verifikasi autentikasi Microsoft Entra dengan opsi RBAC Kubernetes dipilih.

Example of AKS Authentication and Authorization page in Azure portal.

Membuat grup demo di ID Microsoft Entra

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.

  1. 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)
    
  2. 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)
    
  3. Buat penetapan peran Azure untuk grup appdev menggunakan az role assignment create perintah . Tugas ini memungkinkan setiap anggota grup untuk kubectl 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 .

  1. Buat grup contoh kedua untuk SRE bernama opssre.

    OPSSRE_ID=$(az ad group create --display-name opssre --mail-nickname opssre --query id -o tsv)
    
  2. 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
    

Membuat pengguna demo di ID Microsoft Entra

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.

Mengatur nama prinsipal pengguna dan kata sandi untuk pengembang aplikasi

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

Membuat akun pengguna

  1. 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)
  1. 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
  1. 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
  1. 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
  1. 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

Membuat sumber daya kluster AKS untuk dev aplikasi

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.

  1. 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
  1. 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.

  1. 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: ["*"]
  1. Buat Peran menggunakan kubectl apply perintah dan tentukan nama file manifes YAML Anda.
kubectl apply -f role-dev-namespace.yaml
  1. 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
  1. 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.

  1. Buat RoleBinding menggunakan kubectl apply perintah dan tentukan nama file manifes YAML Anda:
kubectl apply -f rolebinding-dev-namespace.yaml

Membuat sumber daya kluster AKS untuk SREs

Sekarang, kita akan mengulangi langkah-langkah sebelumnya untuk membuat namespace, Peran, dan RoleBinding untuk SREs.

  1. Buat namespace layanan untuk sre menggunakan kubectl create namespace perintah .
kubectl create namespace sre
  1. 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: ["*"]
  1. Buat Peran menggunakan kubectl apply perintah dan tentukan nama file manifes YAML Anda.
kubectl apply -f role-sre-namespace.yaml
  1. Dapatkan ID sumber daya untuk grup opssre menggunakan perintah az ad group show .
az ad group show --group opssre --query id -o tsv
  1. 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
  1. Buat RoleBinding menggunakan kubectl apply perintah dan tentukan nama file manifes YAML Anda.
kubectl apply -f rolebinding-sre-namespace.yaml

Berinteraksi dengan sumber daya kluster menggunakan identitas Microsoft Entra

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.

  1. 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
  1. 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
  1. 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 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 created
  1. kubectl get pods Gunakan perintah untuk melihat pod di namespace dev.
kubectl get pods --namespace dev
  1. 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

Membuat dan melihat sumber daya kluster di luar namespace yang ditetapkan

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"

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 opssre .

  1. 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
  1. 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
  1. 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"

Membersihkan sumber daya

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

Langkah berikutnya