Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Kluster Azure Kubernetes Service (AKS) memerlukan perwakilan layanan Microsoft Entra atau identitas terkelola untuk membuat dan mengelola sumber daya Azure lainnya secara dinamis. Artikel ini menjelaskan cara membuat perwakilan layanan Microsoft Entra dan menggunakannya dengan kluster AKS Anda.
Nota
Untuk keamanan dan kemudahan penggunaan yang optimal, sebaiknya gunakan identitas terkelola alih-alih perwakilan layanan untuk mengotorisasi akses dari kluster AKS ke sumber daya lain di Azure. Identitas terkelola adalah jenis perwakilan layanan khusus yang dapat Anda gunakan untuk mendapatkan kredensial Microsoft Entra tanpa perlu mengelola dan mengamankan kredensial. Untuk informasi selengkapnya, lihat Menggunakan identitas terkelola di AKS.
Prasyarat
- Anda memerlukan Azure CLI versi 2.0.59 atau yang lebih tinggi. Temukan versi Anda menggunakan
az --versionperintah . Jika Anda perlu menginstal atau memperbarui, lihat Install Azure CLI.
- Jika menggunakan Azure PowerShell, Anda memerlukan Azure PowerShell versi 5.0.0 atau yang lebih tinggi. Temukan versi Anda menggunakan
Get-InstalledModule -Name Azcmdlet . Jika Anda perlu memasang atau melakukan peningkatan, lihat Modul pemasangan Azure Az PowerShell.
- Anda memerlukan izin untuk mendaftarkan aplikasi dengan penyewa Microsoft Entra Anda dan untuk menetapkan aplikasi ke peran dalam langganan Anda. Jika Anda tidak memiliki izin yang diperlukan, Anda perlu meminta administrator ID Microsoft Entra atau langganan Anda untuk menetapkan izin yang diperlukan atau membuat service principal untuk Anda.
Pertimbangan saat menggunakan perwakilan layanan
Ingatlah pertimbangan berikut saat menggunakan perwakilan layanan Microsoft Entra dengan AKS:
- Induk layanan untuk Kubernetes adalah bagian dari konfigurasi kluster, tetapi jangan gunakan identitas ini untuk mengonfigurasi kluster. Sebagai gantinya, buat perwakilan layanan terlebih dahulu, lalu gunakan perwakilan layanan tersebut untuk membuat kluster AKS.
- Setiap perwakilan layanan dikaitkan dengan aplikasi Microsoft Entra. Anda dapat mengaitkan entitas layanan untuk kluster Kubernetes dengan nama aplikasi Microsoft Entra yang valid (misalnya:
https://www.contoso.org/example). URL untuk aplikasi tidak harus menjadi titik akhir nyata. - Saat Anda menentukan ID klien perwakilan layanan, gunakan nilai ID aplikasi (
appIduntuk Azure CLI atauApplicationIduntuk Azure PowerShell). - Pada komputer virtual simpul agen (VM) di kluster AKS, kredensial perwakilan layanan disimpan dalam file
/etc/kubernetes/azure.json. - Saat Anda menghapus kluster AKS yang Anda buat menggunakan
az aks createcommand atauNew-AzAksClustercmdlet, objek principal layanan yang dibuat tidak dihapus secara otomatis. Lihat langkah-langkah untuk menghapus perwakilan layanan. - Jika Anda menggunakan prinsipal layanan dari penyewa Microsoft Entra yang berbeda, ada pertimbangan lain mengenai izin yang tersedia saat Anda menyebarkan kluster. Anda mungkin tidak memiliki izin yang sesuai untuk membaca dan menulis informasi direktori. Untuk informasi selengkapnya, lihat Apa saja izin pengguna default di ID Microsoft Entra?
Membuat "Service Principal"
Buat principal layanan menggunakan perintah
az ad sp create-for-rbac.# Set environment variable SERVICE_PRINCIPAL_NAME=<your-service-principal-name> # Create the service principal az ad sp create-for-rbac --name $SERVICE_PRINCIPAL_NAMEOutput Anda harus mirip dengan contoh output berikut:
{ "appId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "displayName": "myAKSClusterServicePrincipal", "name": "http://myAKSClusterServicePrincipal", "password": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "tenant": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" }Salin nilai untuk
appIddanpassworddari output yang akan digunakan saat membuat kluster AKS.
Buat principal layanan menggunakan perintah
New-AzADServicePrincipal.# Set environment variable $SpName = <your-service-principal-name> # Create the service principal New-AzADServicePrincipal -DisplayName $SpName -OutVariable spOutput Anda harus mirip dengan contoh output berikut:
Secret : System.Security.SecureString ServicePrincipalNames : {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx, http://myAKSClusterServicePrincipal} ApplicationId : xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx ObjectType : ServicePrincipal DisplayName : myAKSClusterServicePrincipal Id : xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx Type :Nilai disimpan dalam variabel yang Anda gunakan saat membuat kluster AKS.
Dekripsi nilai yang disimpan dalam string aman Rahasia menggunakan perintah berikut.
$BSTR = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($sp.Secret) [System.Runtime.InteropServices.Marshal]::PtrToStringAuto($BSTR)
Membuat kluster AKS dengan prinsipal layanan yang ada
Buat kluster AKS dengan service principal yang ada menggunakan perintah
az aks createdengan parameter--service-principaldan--client-secretyang diatur untuk menentukan nilai-nilaiappIddanpassword.# Set environment variables RESOURCE_GROUP=<your-resource-group-name> CLUSTER_NAME=<your-aks-cluster-name> APP_ID=<app-id> CLIENT_SECRET=<password-value> # Create the AKS cluster az aks create \ --resource-group $RESOURCE_GROUP \ --name $CLUSTER_NAME \ --service-principal $APP_ID \ --client-secret $CLIENT_SECRET \ --generate-ssh-keys
Ubah service principal
ApplicationIddanSecretmenjadi objek PSCredential menggunakan perintah berikut.$Cred = New-Object -TypeName System.Management.Automation.PSCredential ($sp.ApplicationId, $sp.Secret)Buat kluster AKS dengan perwakilan layanan yang ada menggunakan cmdlet
New-AzAksClusterdan tentukan parameterServicePrincipalIdAndSecretdengan objek PSCredential sebagai nilainya.# Set environment variables $ResourceGroupName = <your-resource-group-name> $ClusterName = <your-aks-cluster-name> # Create the AKS cluster New-AzAksCluster -ResourceGroupName $ResourceGroupName -Name $ClusterName -ServicePrincipalIdAndSecret $Cred
Nota
Jika Anda menggunakan prinsipal layanan yang ada dengan kunci rahasia yang dikustomisasi, pastikan kunci rahasianya tidak lebih dari 190 byte.
Mendelegasikan akses ke sumber daya Azure lainnya
Anda dapat menggunakan prinsipal layanan untuk kluster AKS untuk mengakses sumber daya lain. Misalnya, jika Anda ingin menyebarkan kluster AKS ke subnet jaringan virtual Azure (VNet) yang ada, sambungkan ke ACR, atau kunci akses atau rahasia dalam brankas kunci dari kluster Anda, maka Anda perlu mendelegasikan akses ke sumber daya tersebut ke perwakilan layanan. Untuk mendelegasikan akses, tetapkan peran kontrol akses berbasis peran Azure (Azure RBAC) ke perwakilan layanan.
Saat menetapkan peran, Anda menentukan cakupan untuk penetapan peran, seperti grup sumber daya atau sumber daya VNet. Penetapan peran menentukan izin apa yang dimiliki perwakilan layanan pada sumber daya dan pada cakupan apa.
Penting
Izin yang diberikan kepada perwakilan layanan yang terkait dengan kluster dapat memakan waktu hingga 60 menit untuk disebarluaskan.
Membuat penetapan peran
Nota
Cakupan untuk sumber daya harus berupa ID sumber daya lengkap, seperti /subscriptions/\<guid\>/resourceGroups/myResourceGroup atau /subscriptions/\<guid\>/resourceGroups/myResourceGroupVnet/providers/Microsoft.Network/virtualNetworks/myVnet.
Buat penetapan peran menggunakan
az role assignment createperintah . Tentukan nilai ID aplikasi service principal untuk parameter--assigneedan cakupan untuk penugasan peran untuk parameter--scope. Contoh berikut menetapkan izin prinsipal layanan untuk mengakses rahasia di Key Vault.az role assignment create \ --assignee <app-id> \ --scope "/subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.KeyVault/vaults/<vault-name>" \ --role "Key Vault Secrets User"
Buat penetapan peran menggunakan
New-AzRoleAssignmentcmdlet . Tentukan nilai ID aplikasi prinsipal layanan untuk-ApplicationIdparameter dan cakupan untuk penetapan peran untuk-Scopeparameter. Contoh berikut menetapkan izin prinsipal layanan untuk mengakses rahasia di Key Vault:New-AzRoleAssignment -ApplicationId <app-id> ` -Scope "/subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.KeyVault/vaults/<vault-name>" ` -RoleDefinitionName "Key Vault Secrets User"
Memberikan akses ke Azure Container Registry
Jika Anda menggunakan Azure Container Registry (ACR) sebagai penyimpanan gambar kontainer, Anda perlu memberikan izin kepada perwakilan layanan untuk kluster AKS Anda untuk membaca dan menarik gambar. Sebaiknya ikuti langkah-langkah dalam Mengautentikasi dengan Azure Container Registry dari Azure Kubernetes Service untuk berintegrasi dengan registri dan menetapkan peran yang sesuai untuk perwakilan layanan.
Memberikan akses ke sumber daya jaringan
Jika Anda menggunakan jaringan tingkat lanjut dengan VNet dan subnet atau alamat IP publik di grup sumber daya yang berbeda, Anda dapat menetapkan peran bawaan Kontributor Jaringan pada subnet dalam VNet. Atau, Anda dapat membuat peran kustom dengan izin untuk mengakses sumber daya jaringan dalam grup sumber daya tersebut. Untuk informasi selengkapnya, lihat Izin layanan AKS.
Memberikan akses ke disk penyimpanan
Jika Anda perlu mengakses sumber daya disk yang ada di grup sumber daya lain, tetapkan salah satu kumpulan izin peran berikut:
- Buat peran kustom dan tentukan izin peran Microsoft.Compute/disks/read dan Microsoft.Compute/disks/write .
- Tetapkan peran bawaan Kontributor Komputer Virtual pada grup sumber daya.
Memberikan akses ke Azure Container Instances
Jika Anda menggunakan kubelet virtual untuk berintegrasi dengan AKS dan menjalankan Azure Container Instances (ACI) dalam grup sumber daya yang terpisah dari kluster AKS, Anda perlu menetapkan izin Kontributor ke perwakilan layanan kluster AKS untuk grup sumber daya ACI.
Menghapus prinsipal layanan
Kueri untuk ID klien perwakilan layanan (
servicePrincipalProfile.clientId) dan hapus perwakilan layanan dengan menggunakan perintahaz ad sp deletedengan parameter--id. Perintah [az aks show][az-aks-show] mengambil ID klien untuk kluster AKS yang ditentukan.# Set environment variables RESOURCE_GROUP=<your-resource-group-name> CLUSTER_NAME=<your-aks-cluster-name> # Delete the service principal az ad sp delete --id $(az aks show \ --resource-group $RESOURCE_GROUP \ --name $CLUSTER_NAME \ --query servicePrincipalProfile.clientId \ --output tsv)
Jalankan kueri untuk ID klien perwakilan layanan (
ServicePrincipalProfile.ClientId) dan hapus perwakilan layanan menggunakan cmdletRemove-AzADServicePrincipaldengan parameter-ApplicationId. Cmdlet [Get-AzAksCluster][get-azakscluster] mengambil ID klien untuk kluster AKS yang ditentukan.# Set environment variables $ResourceGroupName = <your-resource-group-name> $ClusterName = <your-aks-cluster-name> $ClientId = (Get-AzAksCluster -ResourceGroupName myResourceGroup -Name myAKSCluster ).ServicePrincipalProfile.ClientId # Delete the service principal Remove-AzADServicePrincipal -ApplicationId $ClientId
Mengatasi masalah kredensial agen layanan
Azure CLI menyimpan kredensial principal layanan untuk kluster AKS.
Azure PowerShell menyimpan kredensial prinsipal layanan untuk kluster AKS.
Jika kredensial ini kedaluwarsa, Anda mungkin mengalami kesalahan selama penyebaran kluster AKS. Jika ada masalah dengan kredensial yang di-cache, Anda mungkin menerima pesan kesalahan yang mirip dengan pesan kesalahan berikut:
Operation failed with status: 'Bad Request'.
Details: The credentials in ServicePrincipalProfile were invalid. Please see https://aka.ms/aks-sp-help for more details.
Details: adal: Refresh request failed. Status Code = '401'.
Anda dapat memeriksa tanggal kedaluwarsa kredensial perwakilan layanan Anda menggunakan perintah az ad app credential list dengan kueri "[].endDateTime". Hasil menunjukkan endDateTime dari kredensial Anda.
az ad app credential list \
--id <app-id> \
--query "[].endDateTime" \
--output tsv
- Periksa tanggal kedaluwarsa kredensial perwakilan layanan Anda menggunakan
Get-AzADAppCredentialcmdlet. Hasil menunjukkanEndDatedari kredensial Anda.
Get-AzADAppCredential -ApplicationId <app-id>
Waktu kedaluwarsa default untuk kredensial perwakilan layanan adalah satu tahun. Jika kredensial Anda lebih dari satu tahun, Anda dapat mengatur ulang kredensial yang ada atau membuat perwakilan layanan baru.