Gunakan kontrol akses berbasis peran Kubernetes dengan Azure Active Directory di Azure Kubernetes Service
Azure Kubernetes Service (AKS) dapat dikonfigurasi untuk menggunakan Azure Active Directory (Azure AD) untuk autentikasi pengguna. Dalam konfigurasi ini, Anda dapat masuk ke kluster AKS menggunakan token autentikasi Microsoft Azure Active Directory. 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 Azure AD.
- Buat grup contoh dan pengguna di Azure AD.
- Buat Peran dan RoleBindings di 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 Azure AD diaktifkan. Jika Anda memerlukan kluster AKS dengan konfigurasi ini, lihat Mengintegrasikan Azure AD dengan AKS.
- RBAC Kube diaktifkan secara default selama pembuatan kluster AKS. Untuk meningkatkan kluster dengan integrasi Azure AD dan RBAC Kubernetes, Aktifkan integrasi Azure AD 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 Pasang CLI Azure. - Jika menggunakan Terraform, instal Terraform versi 2.99.0 atau yang lebih baru.
Gunakan portal Azure atau Azure CLI untuk memverifikasi integrasi Azure AD dengan RBAC Kubernetes 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 Azure AD dengan opsi RBAC Kubernetes dipilih.
Membuat grup demo di Azure Active Directory
Dalam artikel ini, kita akan membuat dua peran pengguna untuk menunjukkan bagaimana RBAC Kubernetes dan Azure AD 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 sudah ada dalam penyewa Azure Active Directory.
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 Azure AD 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 . Penugasan ini memungkinkan setiap anggota grup menggunakankubectl
untuk berinteraksi dengan kluster AKS dengan memberi mereka Peran Pengguna Kluster Azure Kubernetes Service.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 hingga ID objek grup Azure Active Directory merambat melalui direktori, lalu coba perintah az role assignment create
lagi.
Buat grup contoh kedua untuk SRE bernama opssre.
OPSSRE_ID=$(az ad group create --display-name opssre --mail-nickname opssre --query objectId -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
Membuat pengguna demo di Azure Active Directory
Sekarang setelah kita memiliki dua contoh grup yang dibuat di Azure AD 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 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
- Buat akun pengguna pertama di Azure AD 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 objectId -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 objectId -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 telah membuat grup, pengguna, dan penetapan peran Azure yang Azure AD. 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 . Dalam salah satu langkah berikut, Anda mendapatkan info masuk kluster pengguna reguler untuk melihat alur autentikasi Microsoft Azure Active Directory dalam tindakan.
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 Azure AD yang sama, tetapkan izin berdasarkan userPrincipalName (UPN). Jika pengguna berada di penyewa Azure Active Directory yang berbeda, buat 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
Membuat sumber daya kluster AKS untuk SREs
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
Berinteraksi dengan sumber daya kluster menggunakan identitas Azure Active Directory
Sekarang, kami akan menguji bahwa izin yang diharapkan berfungsi saat Anda membuat dan mengelola sumber daya dalam kluster AKS. Dalam contoh ini, kita akan menjadwalkan dan melihat pod di namespace yang ditetapkan pengguna, dan mencoba menjadwalkan dan melihat pod di luar namespace yang ditetapkan.
- Reset konteks kubeconfig menggunakan
az aks get-credentials
perintah . Di bagian sebelumnya, Anda set konteks menggunakan info masuk admin kluster. Pengguna admin melewati perintah masuk Azure AD. Tanpa parameter--admin
, konteks pengguna diterapkan yang mengharuskan semua permintaan diautentikasi menggunakan Azure Active Directory.
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
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, coba jadwalkan pod di namespace layanan yang berbeda, seperti namespace layanan sre . Keanggotaan grup pengguna tidak selaras dengan Peran Kube 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 Azure Active Directory kami dan RBAC Kube 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"
Menghapus sumber daya
Dalam artikel ini, Anda membuat sumber daya di kluster AKS dan pengguna serta grup di Azure Active Directory. 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
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.