Azure Kubernetes Hizmeti (AKS) ile hizmet sorumlusu kullanma
AKS kümesi, Azure Load Balancer veya Azure Container Registry (ACR) gibi diğer Azure kaynaklarını dinamik olarak oluşturmak ve yönetmek için Microsoft Entra hizmet sorumlusu veya yönetilen kimlik gerektirir.
En iyi güvenlik ve kullanım kolaylığı için Microsoft, aks kümesinden Azure'daki diğer kaynaklara erişim yetkisi vermek için hizmet sorumluları yerine yönetilen kimliklerin kullanılmasını önerir. Yönetilen kimlik, kimlik bilgilerini yönetmek ve güvenliğini sağlamak zorunda kalmadan Microsoft Entra kimlik bilgilerini almak için kullanılabilecek özel bir hizmet sorumlusu türüdür. Kümenizle yönetilen kimlik kullanma hakkında daha fazla bilgi için bkz . AKS'de yönetilen kimlik kullanma.
Bu makalede AKS kümelerinizle hizmet sorumlusu oluşturma ve kullanma adımları gösterilmektedir.
Başlamadan önce
Microsoft Entra hizmet sorumlusu oluşturmak için, bir uygulamayı Microsoft Entra kiracınıza kaydetme ve uygulamayı aboneliğinizdeki bir role atama izinleriniz olmalıdır. Gerekli izinlere sahip değilseniz, Microsoft Entra Id veya abonelik yöneticinizden gerekli izinleri atamasını veya AKS kümenizle kullanmak üzere bir hizmet sorumlusu oluşturmasını istemeniz gerekir.
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?
Önkoşullar
- Azure CLI kullanıyorsanız Azure CLI sürüm 2.0.59 veya üzeri gerekir. Sürümü bulmak için
az --version
komutunu çalıştırın. 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. Sürümü bulmak için
Get-InstalledModule -Name Az
komutunu çalıştırın. Yüklemeniz veya yükseltmeniz gerekiyorsa bkz . Azure Az PowerShell modülünü yükleme.
Hizmet sorumlusu oluşturma
Kümenizi oluşturmadan önce bir hizmet sorumlusu oluşturun.
komutunu kullanarak
az ad sp create-for-rbac
bir hizmet sorumlusu oluşturun.az ad sp create-for-rbac --name myAKSClusterServicePrincipal
Çı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" }
Çıkış için ve
password
değerleriniappId
kopyalayın. Sonraki bölümde AKS kümesi oluştururken bunları kullanacaksınız.
Bir AKS kümesi için hizmet sorumlusu belirtin
komutunu kullanarak yeni bir AKS kümesi için mevcut hizmet sorumlusunu
az aks create
kullanın ve ve parametrelerini kullanarak--service-principal
--client-secret
önceki bölümü aldığınız çıkıştan vepassword
değerini belirtinappId
.az aks create \ --resource-group myResourceGroup \ --name myAKSCluster \ --service-principal <appId> \ --client-secret <password> \ --generate-ssh-keys
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ğ alt ağına dağıtmak, Azure Container Registry'ye (ACR) 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.
Önemli
Bir kümeyle ilişkili hizmet sorumlusuna verilen izinlerin yayılması 60 dakika sürebilir.
komutunu kullanarak bir rol ataması
az role assignment create
oluşturun. parametresi içinappId
hizmet sorumlusunun appID değerini sağlayın. Kaynak grubu veya sanal ağ kaynağı gibi rol atamasının kapsamını belirtin. Rol ataması, hizmet sorumlusunun kaynak üzerinde hangi izinlere sahip olduğunu ve hangi kapsamda olduğunu belirler.Örneğin, bir anahtar kasasındaki gizli dizilere erişmek için hizmet sorumlusu izinlerini atamak için aşağıdaki komutu kullanabilirsiniz:
az role assignment create \ --assignee <appId> \ --scope "/subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.KeyVault/vaults/<vault-name>" \ --role "Key Vault Secrets User"
Not
Kaynağın
--scope
tam kaynak kimliği olması gerekir. Örneğin, /subscriptions/guid>/<resourceGroups/myResourceGroup veya /subscriptions/guid>/<resourceGroups/myResourceGroupVnet/providers/Microsoft.Network/virtualNetworks/myVnet.
Aşağıdaki bölümlerde, bir hizmet sorumlusuna atamanız gerekebilecek ortak temsilciler ayrıntılı olarak yer almaktadır.
Azure Container Registry
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 veya az aks update
komutunu kullanmanızı az aks create
öneririz. Ayrıntılı adımlar için bkz . Azure Kubernetes Service'ten Azure Container Registry ile kimlik doğrulaması.
Ağ
Sanal ağın ve alt ağın veya genel IP adreslerinin başka bir kaynak grubunda bulunduğu gelişmiş ağ kullanabilirsiniz. Sanal ağ içindeki alt ağda Ağ Katkıda Bulunanı yerleşik rolünü atayın. 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
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 veya
- Kaynak grubunda Sanal Makine Katılımcısı yerleşik rolünü atayın.
Azure Container Instances
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ırmayı seçerseniz, AKS kümesi hizmet sorumlusuna ACI kaynak grubunda Katkıda Bulunan izinleri verilmelidir.
Dikkat edilecek diğer noktalar
AKS ve Microsoft Entra hizmet sorumlusu kullanırken aşağıdakileri 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.
- Varsayılan olarak, hizmet sorumlusu kimlik bilgileri bir yıl boyunca geçerlidir. Hizmet sorumlusu kimlik bilgilerini istediğiniz zaman güncelleştirebilir veya döndürebilirsiniz.
- 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 İstemci kimliğini belirttiğinizde
appId
değerini kullanın. - Kubernetes kümesindeki aracı düğümü VM'lerinde hizmet sorumlusu kimlik bilgileri dosyada
/etc/kubernetes/azure.json
depolanır. - komutu kullanılarak
az aks create
oluşturulan bir AKS kümesini sildiğinizde, oluşturulan hizmet sorumlusu otomatik olarak silinmez.Hizmet sorumlusunu silmek için kümenizin servicePrincipalProfile.clientId dosyasını sorgulayın ve komutunu kullanarak
az ad sp delete
silin. Kaynak grubu adının parametresinin-g
ve küme adının-n
parametresinin değerlerini değiştirin:az ad sp delete --id $(az aks show \ --resource-group myResourceGroup \ --name myAKSCluster \ --query servicePrincipalProfile.clientId \ --output tsv)
Sorun giderme
Azure CLI, 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. Komutunu çalıştırır az aks create
ve aşağıdakine benzer bir hata iletisi alırsanız, önbelleğe alınmış hizmet sorumlusu kimlik bilgileriyle ilgili bir sorun olduğunu gösterebilir:
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'.
Sorgu ile komutunu "[].endDateTime"
kullanarak hizmet sorumlusu kimlik bilgilerinizin az ad app credential list
sona erme tarihini de kontrol edebilirsiniz.
az ad app credential list \
--id <app-id> \
--query "[].endDateTime" \
--output tsv
Hizmet sorumlusu kimlik bilgileri için varsayılan süre sonu zamanı bir yıldır. Kimlik bilgileriniz bir yıldan eskiyse, mevcut kimlik bilgilerini sıfırlayabilir veya yeni bir hizmet sorumlusu oluşturabilirsiniz.
Genel Azure CLI sorunlarını giderme
Azure CLI çeşitli kabuk ortamlarında çalışabilir, ancak hafif biçim çeşitlemeleriyle. Azure CLI komutlarıyla ilgili beklenmeyen sonuçlara sahipseniz bkz . Azure CLI'yi başarıyla kullanma.
Sonraki adımlar
Microsoft Entra hizmet sorumluları hakkında daha fazla bilgi için bkz . Uygulama ve hizmet sorumlusu nesneleri.
Kimlik bilgilerinin nasıl güncelleştirildiğini öğrenmek için bkz . AKS'de hizmet sorumlusunun kimlik bilgilerini güncelleştirme veya döndürme.
Azure Kubernetes Service