Menggunakan kontrol akses berbasis peran Azure untuk Otorisasi Kubernetes

Saat memanfaatkan 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). Fitur ini membuat Anda tidak perlu lagi mengelola identitas dan kredensial pengguna secara terpisah untuk Kubernetes. Namun, Anda masih harus menyiapkan dan mengelola RBAC Azure dan Kubernetes RBAC secara terpisah.

Artikel ini membahas cara menggunakan Azure RBAC untuk Otorisasi Kubernetes, yang memungkinkan manajemen terpadu dan kontrol akses di seluruh sumber daya Azure, AKS, dan sumber daya Kubernetes. Untuk informasi selengkapnya, lihat Azure RBAC untuk Otorisasi Kubernetes.

Sebelum Anda mulai

  • Anda memerlukan Azure CLI versi 2.24.0 atau yang lebih baru yang diinstal dan dikonfigurasi. Jalankan az --version untuk 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 Azure RBAC untuk otorisasi Kubernetes. Jika Anda perlu mengaktifkan integrasi Microsoft Entra terkelola, lihat Menggunakan ID Microsoft Entra di AKS.
  • Jika Anda memiliki CRD dan membuat definisi peran kustom, satu-satunya cara untuk mencakup CRD saat ini adalah dengan menggunakan Microsoft.ContainerService/managedClusters/*/read. Untuk objek yang tersisa, Anda dapat menggunakan grup API tertentu, seperti Microsoft.ContainerService/apps/deployments/read.
  • Penetapan peran baru dapat memakan waktu hingga lima menit untuk disebarluaskan dan diperbarui oleh server otorisasi.
  • Azure RBAC untuk Otorisasi Kubernetes mengharuskan penyewa Microsoft Entra yang dikonfigurasi untuk autentikasi sama dengan penyewa untuk langganan yang menyimpan kluster AKS Anda.

Membuat kluster AKS baru dengan integrasi Microsoft Entra terkelola dan Azure RBAC untuk Otorisasi Kubernetes

Buat grup sumber daya Azure menggunakan az group create perintah .

az group create --name myResourceGroup --location westus2

Buat kluster AKS dengan integrasi Microsoft Entra terkelola dan Azure RBAC untuk Otorisasi Kubernetes menggunakan az aks create perintah .

az aks create -g myResourceGroup -n myManagedCluster --enable-aad --enable-azure-rbac

Output akan terlihat mirip dengan contoh output berikut:

"AADProfile": {
    "adminGroupObjectIds": null,
    "clientAppId": null,
    "enableAzureRbac": true,
    "managed": true,
    "serverAppId": null,
    "serverAppSecret": null,
    "tenantId": "****-****-****-****-****"
}

Mengaktifkan Azure RBAC pada kluster AKS yang sudah ada

Tambahkan Azure RBAC untuk Otorisasi Kubernetes ke kluster AKS yang ada menggunakan az aks update perintah dengan enable-azure-rbac bendera .

az aks update -g myResourceGroup -n myAKSCluster --enable-azure-rbac

Menonaktifkan Azure RBAC untuk Otorisasi Kubernetes dari kluster AKS

Hapus Azure RBAC untuk Otorisasi Kubernetes dari kluster AKS yang ada menggunakan az aks update perintah dengan disable-azure-rbac bendera .

az aks update -g myResourceGroup -n myAKSCluster --disable-azure-rbac

Membuat penetapan peran bagi pengguna untuk mengakses kluster

AKS menyediakan peran bawaan berikut:

Peran Deskripsi
Pembaca RBAC Azure Kubernetes Service Mengizinkan akses baca-saja untuk melihat sebagian besar objek di namespace layanan. Hal ini tidak mengizinkan untuk menampilkan peran atau pengikatan peran. Peran ini tidak mengizinkan melihat Secrets, karena membaca konten Rahasia memungkinkan akses ke kredensial ServiceAccount di namespace layanan, yang akan memungkinkan akses API sebagai ServiceAccount apa pun di namespace layanan (bentuk eskalasi hak istimewa).
Penulis RBAC Azure Kubernetes Service Mengizinkan akses read/write ke sebagian besar objek dalam sebuah namespace layanan. Peran ini tidak memungkinkan melihat atau memodifikasi peran atau pengikatan peran. Namun, peran ini memungkinkan akses ke Secrets dan menjalankan Pod sebagai ServiceAccount mana pun di namespace, sehingga dapat digunakan untuk mendapatkan level akses API dari ServiceAccount apa pun di namespace.
Admin RBAC Azure Kubernetes Service Mengizinkan akses admin, untuk di dalam namespace layanan. Mengizinkan akses read/write ke sebagian besar sumber daya di namespace layanan (atau cakupan klaster), termasuk kemampuan untuk membuat peran dan pengikatan peran dalam namespace layanan. Peran ini tidak mengizinkan akses write ke kuota sumber daya atau ke namespace itu sendiri.
Admin Kluster RBAC Azure Kubernetes Service Mengizinkan akses bagi pengguna-super untuk melakukan tindakan apa pun pada sumber daya apa pun. Memberikan kontrol penuh atas setiap sumber daya dalam klaster dan di semua namespace layanan.

Penetapan peran yang dilingkup ke seluruh kluster AKS dapat dilakukan baik pada bilah Kontrol Akses (IAM) sumber daya kluster pada portal Azure atau dengan menggunakan perintah Azure CLI berikut:

Dapatkan ID sumber daya AKS Anda menggunakan az aks show perintah .

AKS_ID=$(az aks show -g myResourceGroup -n myManagedCluster --query id -o tsv)

Buat penetapan peran menggunakan az role assignment create perintah . <AAD-ENTITY-ID> dapat berupa nama pengguna atau ID klien dari perwakilan layanan.

az role assignment create --role "Azure Kubernetes Service RBAC Admin" --assignee <AAD-ENTITY-ID> --scope $AKS_ID

Catatan

Anda dapat membuat penetapan peran Azure Kubernetes Service RBAC Reader dan RBAC Writer Azure Kubernetes Service yang tercakup ke namespace tertentu dalam kluster menggunakan az role assignment create perintah 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>

Catatan

Di portal Azure, setelah membuat penetapan peran yang dilingkup ke namespace yang diinginkan, Anda tidak akan dapat melihat "penetapan peran" untuk namespace pada cakupan. Anda dapat menemukannya dengan menggunakan az role assignment list perintah, atau mencantumkan penetapan peran untuk pengguna atau grup, tempat Anda menetapkan peran.

az role assignment list --scope $AKS_ID/namespaces/<namespace-name>

Buat definisi peran kustom

Contoh definisi peran kustom berikut memungkinkan pengguna untuk hanya membaca penyebaran dan tidak ada yang lain. Untuk daftar lengkap kemungkinan tindakan, lihat operasi Microsoft.ContainerService.

Untuk membuat definisi peran kustom Anda sendiri, salin file berikut, ganti <YOUR SUBSCRIPTION ID> dengan ID langganan Anda sendiri, lalu simpan sebagai deploy-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 az role definition create perintah , atur --role-definition ke file yang deploy-view.json Anda buat di langkah sebelumnya.

az role definition create --role-definition @deploy-view.json 

Tetapkan definisi peran ke pengguna atau identitas lain menggunakan az role assignment create perintah .

az role assignment create --role "AKS Deployment Reader" --assignee <AAD-ENTITY-ID> --scope $AKS_ID

Gunakan Azure RBAC untuk Otorisasi Kubernetes dengan kubectl

Pastikan Anda memiliki peran bawaan Pengguna Kluster Azure Kubernetes Service, lalu dapatkan kubeconfig kluster AKS Anda menggunakan az aks get-credentials perintah .

az aks get-credentials -g myResourceGroup -n myManagedCluster

Sekarang, Anda dapat menggunakan kubectl kelola kluster Anda. Misalnya, Anda dapat mencantumkan simpul di kluster Anda menggunakan kubectl get nodes. Saat pertama kali menjalankannya, Anda harus masuk, seperti yang ditunjukkan dalam contoh berikut:

kubectl get nodes
To sign in, use a web browser to open the page https://microsoft.com/devicelogin and enter the code AAAAAAAAA to authenticate.

NAME                                STATUS   ROLES   AGE    VERSION
aks-nodepool1-93451573-vmss000000   Ready    agent   3h6m   v1.15.11
aks-nodepool1-93451573-vmss000001   Ready    agent   3h6m   v1.15.11
aks-nodepool1-93451573-vmss000002   Ready    agent   3h6m   v1.15.11

Gunakan Azure RBAC untuk Otorisasi Kubernetes dengan kubelogin

AKS membuat kubelogin plugin untuk membantu membuka blokir skenario tambahan, seperti login non-interaktif, versi yang lebih kubectl lama, atau memanfaatkan SSO di beberapa kluster tanpa perlu masuk ke kluster baru.

Anda dapat menggunakan kubelogin plugin dengan menjalankan perintah berikut:

export KUBECONFIG=/path/to/kubeconfig
kubelogin convert-kubeconfig

Mirip kubectldengan , Anda perlu masuk saat pertama kali menjalankannya, seperti yang ditunjukkan dalam contoh berikut:

kubectl get nodes
To sign in, use a web browser to open the page https://microsoft.com/devicelogin and enter the code AAAAAAAAA to authenticate.

NAME                                STATUS   ROLES   AGE    VERSION
aks-nodepool1-93451573-vmss000000   Ready    agent   3h6m   v1.15.11
aks-nodepool1-93451573-vmss000001   Ready    agent   3h6m   v1.15.11
aks-nodepool1-93451573-vmss000002   Ready    agent   3h6m   v1.15.11

Membersihkan sumber daya

Menghapus penetapan peran

# List role assignments
az role assignment list --scope $AKS_ID --query [].id -o tsv

# Delete role assignments
az role assignment delete --ids <LIST OF ASSIGNMENT IDS>

Menghapus definisi peran

az role definition delete -n "AKS Deployment Reader"

Menghapus grup sumber daya dan kluster AKS

az group delete -n myResourceGroup

Langkah berikutnya

Untuk mempelajari selengkapnya tentang autentikasi AKS, otorisasi, RBAC Kubernetes, dan Azure RBAC, lihat: