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.

  1. 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"
    }
    
  2. Çıkış için ve password değerlerini appId 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 ve password 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çin appId 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ı.

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:

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.