Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Azure Kubernetes Service (AKS) kümeleri, diğer Azure kaynaklarını dinamik olarak oluşturmak ve yönetmek için bir Microsoft Entra hizmet sorumlusu veya yönetilen kimlik gerektirir. Bu makalede Microsoft Entra hizmet ilkesi oluşturmanın ve bunu AKS kümenizle birlikte kullanmanın nasıl yapılacağı açıklanmaktadır.
Not
En iyi güvenlik ve kullanım kolaylığı için, aks kümesinden Azure'daki diğer kaynaklara erişim yetkisi vermek için hizmet sorumluları yerine yönetilen kimlikleri kullanmanızı öneririz. Yönetilen kimlik, kimlik bilgilerini yönetmenize ve güvenliğini sağlamanıza gerek kalmadan Microsoft Entra kimlik bilgilerini almak için kullanabileceğiniz özel bir hizmet sorumlusu türüdür. Daha fazla bilgi için AKS'de yönetilen bir kimlik kullanma'ya bakın.
Önkoşullar
- Azure CLI sürüm 2.0.59 veya üzeri gerekir. komutunu kullanarak
az --versionsürümünüzü bulun. Yüklemeniz veya yükseltmeniz gerekirse, bkz. Azure CLI yükleme.
- Azure PowerShell kullanıyorsanız, Azure PowerShell sürüm 5.0.0 veya üzeri gerekir. cmdlet'ini
Get-InstalledModule -Name Azkullanarak sürümünüzü bulun. Yüklemeniz veya yükseltmeniz gerekiyorsa bkz . Azure Az PowerShell modülünü yükleme.
- Bir uygulamayı Microsoft Entra kiracınıza kaydetmek ve uygulamayı aboneliğinizdeki bir role atamak için izinlere ihtiyacınız vardır. Gerekli izinlere sahip değilseniz, Microsoft Entra Id veya abonelik yöneticinizden gerekli izinleri atamasını veya sizin için hizmet sorumlusunu oluşturmasını istemeniz gerekir.
Hizmet sorumlusu kullanırken dikkat edilmesi gerekenler
AKS ile Microsoft Entra hizmet sorumlusu kullanırken aşağıdaki noktaları göz önünde bulundurun:
- Kubernetes hizmet sorumlusu küme yapılandırmasının bir parçasıdır, ancak kümeyi dağıtmak için bu kimliği kullanmayın. Bunun yerine, önce bir hizmet sorumlusu oluşturun , ardından AKS kümesini oluşturmak için bu hizmet sorumlusunu kullanın.
- Her hizmet sorumlusu bir Microsoft Entra uygulamasıyla ilişkilendirilir. Kubernetes kümesinin hizmet sorumlusunu geçerli herhangi bir Microsoft Entra uygulama adıyla ilişkilendirebilirsiniz (örneğin:
https://www.contoso.org/example). Uygulama URL'sinin gerçek bir uç nokta olması gerekmez. - Hizmet sorumlusu istemci kimliğini belirtirken uygulama kimliğinin değerini kullanın (
appIdAzure CLI veyaApplicationIdAzure PowerShell için). - AKS kümesindeki sanal makine (VM) aracı düğümlerinde, hizmet temsilcisi kimlik bilgileri
/etc/kubernetes/azure.jsondosyasında depolanır. - AKS kümesini
az aks createkomutunu veyaNew-AzAksClustercmdlet'ini kullanarak oluşturduğunuzda ve sildiğinizde, oluşturulan hizmet sorumlusu otomatik olarak silinmez. Hizmet sorumlusunu silme adımlarına bakın. - Farklı bir Microsoft Entra kiracısından hizmet sorumlusu kullanıyorsanız, kümeyi dağıtırken kullanabileceğiniz izinlerle ilgili başka noktalar da vardır. Dizin bilgilerini okumak ve yazmak için uygun izinlere sahip olmayabilirsiniz. Daha fazla bilgi için bkz . Microsoft Entra Id'de varsayılan kullanıcı izinleri nelerdir?
Hizmet sorumlusu oluşturma
komutunu kullanarak
az ad sp create-for-rbacbir hizmet sorumlusu oluşturun.# Set environment variable SERVICE_PRINCIPAL_NAME=<your-service-principal-name> # Create the service principal az ad sp create-for-rbac --name $SERVICE_PRINCIPAL_NAMEÇıkışınız aşağıdaki örnek çıkışa benzer olmalıdır:
{ "appId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "displayName": "myAKSClusterServicePrincipal", "name": "http://myAKSClusterServicePrincipal", "password": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "tenant": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" }AKS kümesini oluştururken kullanılacak çıkış için
appIdvepassworddeğerlerini kopyalayın.
komutunu kullanarak
New-AzADServicePrincipalbir hizmet sorumlusu oluşturun.# Set environment variable $SpName = <your-service-principal-name> # Create the service principal New-AzADServicePrincipal -DisplayName $SpName -OutVariable spÇıkışınız aşağıdaki örnek çıkışa benzer olmalıdır:
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 :Değerler, AKS kümesini oluştururken kullandığınız bir değişkende depolanır.
Aşağıdaki komutu kullanarak Gizli dizi güvenli dizesinde depolanan değerin şifresini çöz.
$BSTR = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($sp.Secret) [System.Runtime.InteropServices.Marshal]::PtrToStringAuto($BSTR)
Mevcut bir hizmet sorumlusuyla AKS kümesi oluşturma
Mevcut bir hizmet sorumlusuyla
az aks createkomutunu kullanarak ve--service-principalile--client-secretparametreleriniappIdvepassworddeğerlerini belirtmek üzere ayarlayarak bir AKS kümesi oluşturun.# 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
Aşağıdaki komutu kullanarak hizmet sorumlusunu
ApplicationIdveSecretPSCredential nesnesine dönüştürün.$Cred = New-Object -TypeName System.Management.Automation.PSCredential ($sp.ApplicationId, $sp.Secret)Mevcut hizmet sorumlusuyla bir AKS kümesi oluşturmak için
cmdlet'ini kullanarak, değerini PSCredential nesnesi olarak belirttiğinizparametresini belirtin. # 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
Not
Özelleştirilmiş gizli dizi ile mevcut bir hizmet sorumlusu kullanıyorsanız, gizli dizinin 190 bayttan uzun olmadığından emin olun.
Diğer Azure kaynaklarına erişim yetkisi verme
Diğer kaynaklara erişmek için AKS kümesinin hizmet sorumlusunu kullanabilirsiniz. Örneğin, AKS kümenizi mevcut bir Azure sanal ağı (VNet) alt ağına dağıtmak, ACR'ye bağlanmak veya kümenizden bir anahtar kasasındaki anahtarlara veya gizli dizilere erişmek istiyorsanız, bu kaynaklara erişim için hizmet sorumlusuna temsilci atamanız gerekir. Erişim yetkisi vermek için hizmet sorumlusuna Azure rol tabanlı erişim denetimi (Azure RBAC) rolü atayın.
Rolleri atarken, rol atamasının kapsamını (kaynak grubu veya sanal ağ kaynağı gibi) belirtirsiniz. Rol ataması, hizmet sorumlusunun kaynak üzerinde hangi izinlere sahip olduğunu ve hangi kapsamda olduğunu belirler.
Önemli
Bir kümeyle ilişkili hizmet sorumlusuna verilen izinlerin yayılması 60 dakika sürebilir.
Rol ataması oluşturma
Not
Bir kaynağın kapsamının tam bir kaynak kimliği olması gerekir, örneğin /subscriptions/\<guid\>/resourceGroups/myResourceGroup veya /subscriptions/\<guid\>/resourceGroups/myResourceGroupVnet/providers/Microsoft.Network/virtualNetworks/myVnet gibi.
az role assignment createkomutunu kullanarak bir rol ataması oluşturun. parametresi için hizmet sorumlusu uygulama kimliğinin--assigneedeğerini ve parametrenin rol atamasının--scopekapsamını belirtin. Aşağıdaki örnek, bir anahtar kasasındaki sırlara erişmek için hizmet prensibine erişim izinlerini atar: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"
New-AzRoleAssignmentcmdlet'i kullanarak bir rol ataması oluşturun. parametresi için hizmet sorumlusu uygulama kimliğinin-ApplicationIddeğerini ve parametrenin rol atamasının-Scopekapsamını belirtin. Aşağıdaki örnek, bir anahtar kasasında gizli verilere erişim için hizmet başlatıcıya izin atar:New-AzRoleAssignment -ApplicationId <app-id> ` -Scope "/subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.KeyVault/vaults/<vault-name>" ` -RoleDefinitionName "Key Vault Secrets User"
Azure Container Registry'ye erişim izni verme
Kapsayıcı görüntü deponuz olarak Azure Container Registry (ACR) kullanıyorsanız AKS kümenizin hizmet sorumlusuna görüntüleri okuması ve çekmesi için izin vermeniz gerekir. Bir kayıt defteriyle tümleştirmek ve hizmet sorumlusu için uygun rolü atamak için Azure Kubernetes Service'ten Azure Container Registry ile kimlik doğrulama başlığı altında yer alan adımların izlenmesini öneririz.
Ağ kaynaklarına erişim izni verme
Farklı kaynak grubundaki bir sanal ağ ve alt ağ veya genel IP adresleriyle gelişmiş ağ kullanıyorsanız, sanal ağ içindeki alt ağda Ağ Katkıda Bulunanı yerleşik rolünü atayabilirsiniz. Alternatif olarak, bu kaynak grubundaki ağ kaynaklarına erişme izinlerine sahip özel bir rol oluşturabilirsiniz. Daha fazla bilgi için bkz . AKS hizmeti izinleri.
Depolama disklerine erişim izni verme
Başka bir kaynak grubundaki mevcut disk kaynaklarına erişmeniz gerekiyorsa, aşağıdaki rol izinleri kümelerinden birini atayın:
- Özel bir rol oluşturun ve Microsoft.Compute/disks/read ve Microsoft.Compute/disks/write rol izinlerini tanımlayın.
- Kaynak grubuna Sanal Makine Katılımcısı yerleşik rolünü atayın.
Azure Container Instances'a erişim izni verme
AKS ile tümleştirmek için sanal kubelet kullanıyorsanız ve Azure Container Instances'ı (ACI) AKS kümesinden ayrı kaynak grubunda çalıştırıyorsanız, ACI kaynak grubu için AKS kümesi hizmet sorumlusuna Katkıda Bulunan izinleri atamanız gerekir.
Hizmet sorumlusunu silme
Hizmet sorumlusu istemci kimliğini (
servicePrincipalProfile.clientId) sorgulayın veaz ad sp deletekomutunu--idparametresiyle kullanarak hizmet sorumlusunu silin. [az aks show][az-aks-show] komutu, belirtilen AKS kümesi için istemci kimliğini alır.# 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)
Hizmet sorumlusu istemci kimliğini (
ServicePrincipalProfile.ClientId) sorgulayıp,Remove-AzADServicePrincipalcmdlet'ini-ApplicationIdparametresiyle kullanarak hizmet sorumlusunu silin. [Get-AzAksCluster][get-azakscluster] cmdlet'i belirtilen AKS kümesi için istemci kimliğini alır.# 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
Hizmet sorumlusu kimlik bilgisi sorunlarını çözme
Azure CLI, AKS kümeleri için hizmet sorumlusu kimlik bilgilerini önbelleğe alır.
Azure PowerShell, AKS kümeleri için hizmet sorumlusu kimlik bilgilerini önbelleğe alır.
Bu kimlik bilgilerinin süresi dolarsa AKS kümesi dağıtımı sırasında hatalarla karşılaşabilirsiniz. Önbelleğe alınan kimlik bilgileriyle ilgili bir sorun varsa aşağıdaki hata iletisine benzer bir hata iletisi alabilirsiniz:
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'.
az ad app credential list komutunu ve "[].endDateTime" sorgusunu kullanarak hizmet sorumlusu kimlik bilgilerinizin sona erme tarihini kontrol edebilirsiniz. Çıktı, endDateTime kimlik bilgilerinizi gösterir.
az ad app credential list \
--id <app-id> \
--query "[].endDateTime" \
--output tsv
- cmdlet'ini kullanarak hizmet sorumlusu kimlik bilgilerinizin
Get-AzADAppCredentialson kullanma tarihini denetleyin. Çıktı,EndDatekimlik bilgilerinizi gösterir.
Get-AzADAppCredential -ApplicationId <app-id>
Hizmet sorumlusu kimlik bilgileri için varsayılan süre sonu süresi bir yıldır. Kimlik bilgileriniz bir yıldan eskiyse, mevcut kimlik bilgilerini sıfırlayabilir veya yeni bir hizmet sorumlusu oluşturabilirsiniz.