Mengintegrasikan MICROSOFT Entra ID dengan Azure Kubernetes Service (AKS) menggunakan Azure CLI (warisan)

Peringatan

Fitur yang dijelaskan dalam dokumen ini, Integrasi Microsoft Entra (warisan) tidak digunakan lagi pada 1 Juni 2023. Saat ini, tidak ada kluster baru yang dapat dibuat dengan Microsoft Entra Integration (warisan).

AKS memiliki pengalaman MICROSOFT Entra ID terkelola AKS baru yang ditingkatkan yang tidak mengharuskan Anda mengelola aplikasi server atau klien. Jika Anda ingin bermigrasi ikuti instruksi di sini.

Azure Kubernetes Service (AKS) dapat dikonfigurasi untuk menggunakan ID Microsoft Entra untuk autentikasi pengguna. Dalam konfigurasi ini, Anda dapat masuk ke kluster AKS menggunakan token autentikasi Microsoft Entra. Operator kluster juga dapat mengonfigurasi kontrol akses berbasis peran Kube (Kube RBAC) berdasarkan identitas pengguna atau keanggotaan grup direktori.

Artikel ini menunjukkan cara membuat komponen Microsoft Entra yang diperlukan, lalu menyebarkan kluster berkemampuan ID Microsoft Entra dan membuat peran Kubernetes dasar di kluster AKS.

Batasan

  • MICROSOFT Entra ID hanya dapat diaktifkan pada kluster berkemampuan Kubernetes RBAC.
  • Integrasi warisan Microsoft Entra hanya dapat diaktifkan selama pembuatan kluster.

Sebelum Anda mulai

Anda memerlukan Azure CLI versi 2.0.61 atau yang lebih baru terpasang dan terkonfigurasi. Jalankan az --version untuk menemukan versinya. Jika Anda perlu memasang atau meningkatkan, lihat Memasang Azure CLI.

Buka https://shell.azure.com untuk membuka Cloud Shell di browser Anda.

Untuk konsistensi dan untuk membantu menjalankan perintah dalam artikel ini, buat variabel untuk nama kluster AKS yang Anda inginkan. Contoh berikut menggunakan nama myakscluster:

aksname="myakscluster"

Gambaran umum autentikasi Microsoft Entra

Autentikasi Microsoft Entra disediakan untuk kluster AKS dengan OpenID Koneksi. OpenID Connect adalah lapisan identitas yang dibangun di atas protokol OAuth 2.0. Untuk informasi selengkapnya tentang Koneksi OpenID, lihat dokumentasi Koneksi OpenID.

Dari dalam kluster Kube, Webhook Token Authentication digunakan untuk memverifikasi token autentikasi. Autentikasi token webhook dikonfigurasi dan dikelola sebagai bagian dari kluster AKS. Untuk informasi selengkapnya tentang autentikasi token Webhook, lihat dokumentasi autentikasi webhook.

Catatan

Saat mengonfigurasi ID Microsoft Entra untuk autentikasi AKS, dua aplikasi Microsoft Entra dikonfigurasi. Operasi ini harus diselesaikan oleh administrator penyewa Azure.

Membuat komponen server Microsoft Entra

Untuk berintegrasi dengan AKS, Anda membuat dan menggunakan aplikasi Microsoft Entra yang bertindak sebagai titik akhir untuk permintaan identitas. Aplikasi Microsoft Entra pertama yang Anda butuhkan mendapatkan keanggotaan grup Microsoft Entra untuk pengguna.

Buat komponen aplikasi server menggunakan perintah az add app create, lalu perbarui klaim keanggotaan grup menggunakan perintah az ad app update. Contoh berikut menggunakan variabel aksname yang ditentukan di bagian Sebelum Anda memulai, dan membuat variabel

# Create the Azure AD application
serverApplicationId=$(az ad app create \
    --display-name "${aksname}Server" \
    --identifier-uris "https://${aksname}Server" \
    --query appId -o tsv)

# Update the application group membership claims
az ad app update --id $serverApplicationId --set groupMembershipClaims=All

Sekarang buat perwakilan layanan untuk aplikasi server menggunakan perintah az ad sp create. Perwakilan layanan ini digunakan untuk mengautentikasi dirinya sendiri dalam platform Azure. Kemudian, dapatkan rahasia perwakilan layanan menggunakan perintah az ad sp credential reset dan tetapkan ke variabel bernama serverApplicationSecret untuk digunakan dalam salah satu langkah berikut:

# Create a service principal for the Azure AD application
az ad sp create --id $serverApplicationId

# Get the service principal secret
serverApplicationSecret=$(az ad sp credential reset \
    --name $serverApplicationId \
    --credential-description "AKSPassword" \
    --query password -o tsv)

Perwakilan layanan Microsoft Entra memerlukan izin untuk melakukan tindakan berikut:

  • Membaca data direktori
  • Masuk dan membaca profil pengguna

Tetapkan izin ini menggunakan perintah az ad app permissions add:

az ad app permission add \
    --id $serverApplicationId \
    --api 00000003-0000-0000-c000-000000000000 \
    --api-permissions e1fe6dd8-ba31-4d61-89e7-88639da4683d=Scope 06da0dbc-49e2-44d2-8312-53f166ab848a=Scope 7ab1d382-f21e-4acd-a863-ba3e13f7da61=Role

Terakhir, berikan izin yang ditetapkan pada langkah sebelumnya untuk aplikasi server menggunakan perintah az ad app permission grant. Langkah ini gagal jika akun saat ini bukan admin penyewa. Anda juga perlu menambahkan izin untuk aplikasi Microsoft Entra untuk meminta informasi yang mungkin memerlukan persetujuan administratif menggunakan persetujuan admin izin aplikasi az ad:

az ad app permission grant --id $serverApplicationId --api 00000003-0000-0000-c000-000000000000
az ad app permission admin-consent --id  $serverApplicationId

Membuat komponen klien Microsoft Entra

Aplikasi Microsoft Entra kedua digunakan saat pengguna masuk ke kluster AKS dengan Kubernetes CLI (kubectl). Aplikasi klien ini mengambil permintaan autentikasi dari pengguna dan memverifikasi kredensial dan izin mereka. Buat aplikasi Microsoft Entra untuk komponen klien menggunakan perintah az ad app create :

clientApplicationId=$(az ad app create \
    --display-name "${aksname}Client" \
    --native-app \
    --reply-urls "https://${aksname}Client" \
    --query appId -o tsv)

Buat perwakilan layanan untuk aplikasi server menggunakan perintah az ad sp create:

az ad sp create --id $clientApplicationId

Dapatkan ID oAuth2 untuk aplikasi server untuk memungkinkan alur autentikasi antara kedua komponen aplikasi menggunakan perintah az ad app show. ID oAuth2 ini digunakan pada langkah berikutnya.

oAuthPermissionId=$(az ad app show --id $serverApplicationId --query "oauth2Permissions[0].id" -o tsv)

Tambahkan izin untuk aplikasi klien dan komponen aplikasi server untuk menggunakan alur komunikasi oAuth2 menggunakan perintah az ad app permission add. Kemudian, beri izin untuk aplikasi klien untuk berkomunikasi dengan aplikasi server menggunakan perintah az ad app permission grant:

az ad app permission add --id $clientApplicationId --api $serverApplicationId --api-permissions ${oAuthPermissionId}=Scope
az ad app permission grant --id $clientApplicationId --api $serverApplicationId

Menyebarkan kluster

Dengan dua aplikasi Microsoft Entra yang dibuat, sekarang buat kluster AKS itu sendiri. Pertama, buat grup sumber daya menggunakan perintah az group create. Contoh berikut ini membuat grup sumber daya di wilayah EastUS:

Membuat grup sumber daya untuk kluster:

az group create --name myResourceGroup --location EastUS

Dapatkan ID penyewa langganan Azure Anda menggunakan perintah az account show. Kemudian, buat kluster AKS menggunakan perintah az aks create. Perintah untuk membuat kluster AKS menyediakan ID aplikasi server dan klien, rahasia perwakilan layanan aplikasi server, dan ID penyewa Anda:

tenantId=$(az account show --query tenantId -o tsv)

az aks create \
    --resource-group myResourceGroup \
    --name $aksname \
    --node-count 1 \
    --generate-ssh-keys \
    --aad-server-app-id $serverApplicationId \
    --aad-server-app-secret $serverApplicationSecret \
    --aad-client-app-id $clientApplicationId \
    --aad-tenant-id $tenantId

Terakhir, dapatkan info masuk admin kluster menggunakan perintah az aks get-credentials. Dalam salah satu langkah berikut, Anda mendapatkan kredensial kluster pengguna reguler untuk melihat alur autentikasi Microsoft Entra beraksi.

az aks get-credentials --resource-group myResourceGroup --name $aksname --admin

Membuat pengikatan RBAC Kube

Sebelum akun Microsoft Entra dapat digunakan dengan kluster AKS, pengikatan peran atau pengikatan peran kluster perlu dibuat. Peran menentukan izin untuk diberikan, dan pengikatan menerapkannya kepada pengguna yang diinginkan. Tugas ini dapat diterapkan ke namespace tertentu, atau di seluruh kluster. Untuk informasi lebih lanjut, lihat Menggunakan otorisasi RBAC Kube.

Dapatkan nama pokok pengguna (UPN) untuk pengguna yang saat ini masuk menggunakan perintah az ad signed-in-user show. Akun pengguna ini diaktifkan untuk integrasi Microsoft Entra di langkah berikutnya.

az ad signed-in-user show --query userPrincipalName -o tsv

Penting

Jika pengguna yang Anda berikan pengikatan RBAC Kubernetes berada di penyewa Microsoft Entra yang sama, tetapkan izin berdasarkan userPrincipalName. Jika pengguna berada di penyewa Microsoft Entra yang berbeda, kueri dan gunakan properti objectId sebagai gantinya.

Buat file bernama basic-azure-ad-binding.yaml, dan tempelkan konten berikut. Pada baris terakhir, ganti userPrincipalName_or_objectId dengan UPN atau output ID objek dari perintah sebelumnya:

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: contoso-cluster-admins
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- apiGroup: rbac.authorization.k8s.io
  kind: User
  name: userPrincipalName_or_objectId

Buat ClusterRoleBinding menggunakan perintah kubectl apply dan tentukan nama file dari manifes YAML:

kubectl apply -f basic-azure-ad-binding.yaml

Mengakses kluster dengan ID Microsoft Entra

Sekarang mari kita uji integrasi autentikasi Microsoft Entra untuk kluster AKS. Atur konteks konfigurasi kubectl untuk menggunakan info masuk pengguna reguler. Konteks ini meneruskan semua permintaan autentikasi kembali melalui ID Microsoft Entra.

az aks get-credentials --resource-group myResourceGroup --name $aksname --overwrite-existing

Sekarang gunakan perintah kubectl get pods untuk melihat pod di semua namespace layanan:

kubectl get pods --all-namespaces

Anda menerima permintaan masuk untuk mengautentikasi menggunakan kredensial Microsoft Entra menggunakan browser web. Setelah berhasil diautentikasi, perintah kubectl akan menampilkan pod di kluster AKS, seperti yang ditunjukkan pada contoh output berikut:

kubectl get pods --all-namespaces
To sign in, use a web browser to open the page https://microsoft.com/devicelogin and enter the code BYMK7UXVD to authenticate.

NAMESPACE     NAME                                    READY   STATUS    RESTARTS   AGE
kube-system   coredns-754f947b4-2v75r                 1/1     Running   0          23h
kube-system   coredns-754f947b4-tghwh                 1/1     Running   0          23h
kube-system   coredns-autoscaler-6fcdb7d64-4wkvp      1/1     Running   0          23h
kube-system   heapster-5fb7488d97-t5wzk               2/2     Running   0          23h
kube-system   kube-proxy-2nd5m                        1/1     Running   0          23h
kube-system   kube-svc-redirect-swp9r                 2/2     Running   0          23h
kube-system   kubernetes-dashboard-847bb4ddc6-trt7m   1/1     Running   0          23h
kube-system   metrics-server-7b97f9cd9-btxzz          1/1     Running   0          23h
kube-system   tunnelfront-6ff887cffb-xkfmq            1/1     Running   0          23h

Token autentikasi yang diterima untuk kubectl di-cache. Kamu hanya diminta ulang untuk login ketika token telah kedaluwarsa atau file konfigurasi Kube dibuat kembali.

Jika Anda melihat pesan kesalahan otorisasi setelah Anda berhasil masuk menggunakan browser web seperti dalam contoh output berikut, periksa kemungkinan masalah berikut ini:

error: You must be logged in to the server (Unauthorized)
  • Anda menentukan ID objek atau UPN yang sesuai, bergantung pada apakah akun pengguna berada di penyewa Microsoft Entra yang sama atau tidak.
  • Pengguna bukan anggota lebih dari 200 grup.
  • Rahasia yang didefinisikan dalam pendaftaran aplikasi untuk server cocok dengan nilai yang dikonfigurasi menggunakan --aad-server-app-secret
  • Pastikan bahwa hanya satu versi kubectl yang dipasang pada komputer Anda pada satu waktu. Versi yang bertentangan dapat menyebabkan masalah selama otorisasi. Untuk memasang versi terkini, gunakan az aks install-cli.

Tanya jawab umum tentang migrasi dari Microsoft Entra Integration ke ID Microsoft Entra yang dikelola AKS

1. Apa rencana untuk migrasi?

Integrasi Microsoft Entra (warisan) tidak akan digunakan lagi pada 1 Juni 2023. Setelah tanggal ini, Anda tidak akan dapat membuat kluster baru dengan ID Microsoft Entra (warisan). Kami akan memigrasikan semua kluster Microsoft Entra Integration (warisan) AKS ke ID Microsoft Entra yang dikelola AKS secara otomatis mulai 1 Agustus 2023. Kami mengirim email pemberitahuan ke admin langganan yang terkena dampak dua kali untuk mengingatkan mereka tentang migrasi.

2. Apa yang akan terjadi jika saya tidak mengambil tindakan apa pun?

Kluster AKS Microsoft Entra Integration (warisan) Anda akan terus berfungsi setelah 1 Juni 2023. Kami akan secara otomatis memigrasikan kluster Anda ke ID Microsoft Entra yang dikelola AKS mulai 1 Agustus 2023. Anda mungkin mengalami waktu henti server API selama migrasi.

Konten kubeconfig berubah setelah migrasi. Anda perlu menggabungkan kredensial baru ke dalam file kubeconfig menggunakan az aks get-credentials --resource-group <AKS resource group name> --name <AKS cluster name>.

Sebaiknya perbarui kluster AKS Anda ke ID Microsoft Entra yang dikelola AKS secara manual sebelum 1 Agustus. Dengan cara ini Anda dapat mengelola waktu henti selama jam non-bisnis ketika lebih nyaman.

3. Mengapa saya masih menerima email pemberitahuan setelah migrasi manual?

Dibutuhkan beberapa hari untuk mengirim email. Jika kluster Anda tidak dimigrasikan sebelum kami memulai proses pengiriman email, Anda mungkin masih menerima pemberitahuan.

4. Bagaimana cara memeriksa apakah kluster saya kluster saya dimigrasikan ke ID Microsoft Entra yang dikelola AKS?

Konfirmasikan kluster AKS Anda dimigrasikan ke ID Microsoft Entra yang dikelola AKS menggunakan az aks show perintah .

az aks show -g <RGName> -n <ClusterName>  --query "aadProfile"

Jika kluster Anda menggunakan ID Microsoft Entra yang dikelola AKS, output yang ditampilkan managed adalah true. Misalnya:

    {
      "adminGroupObjectIDs": [
        "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
      ],
      "adminUsers": null,
      "clientAppId": null,
      "enableAzureRbac": null,
      "managed": true,
      "serverAppId": null,
      "serverAppSecret": null,
      "tenantId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
    }

Langkah berikutnya

Untuk skrip lengkap yang berisi perintah yang ditampilkan dalam artikel ini, lihat [skrip integrasi Microsoft Entra di repositori sampel AKS][complete-script].

Untuk menggunakan pengguna dan grup Microsoft Entra untuk mengontrol akses ke sumber daya kluster, lihat Mengontrol akses ke sumber daya kluster menggunakan kontrol akses berbasis peran Kubernetes dan identitas Microsoft Entra di AKS.

Untuk informasi lebih lanjut tentang cara mengamankan kluster Kube, 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.