Azure Kubernetes Service'te (AKS) sistem tarafından atanan yönetilen kimliği kullanma

Bu makalede, yeni veya mevcut bir AKS kümesinde sistem tarafından atanan yönetilen kimliği etkinleştirme, sistem tarafından atanan yönetilen kimliğin asıl kimliğini alma ve sistem tarafından atanan yönetilen kimlik için rol ataması ekleme işlemleri açıklanır.

Önkoşullar

  • AKS'de kullanılabilen farklı yönetilen kimlik türlerini ve Azure kaynaklarına güvenli bir şekilde erişmek için bunları nasıl kullanabileceğinizi anlamak için Azure Kubernetes Service'te (AKS) yönetilen kimliklere genel bakış'ı okuyun.

  • komutunu kullanarak az account set aboneliğinizi geçerli etkin abonelik olarak ayarlayın.

    az account set --subscription <subscription-id>
    
  • Mevcut bir Azure kaynak grubu. Eğer biriniz yoksa, az group create komutunu kullanarak bir tane oluşturabilirsiniz.

    az group create \
        --name <resource-group-name> \
        --location <location>
    

Sınırlamalar

  • Yönetilen kimlikle küme oluşturduktan sonra hizmet sorumlusu kullanmaya geri dönemezsiniz.
  • Yönetilen kimlik özellikli bir kümenin farklı bir kiracıya taşınması veya geçirilmesi desteklenmez.
  • Kümede Microsoft Entra pod yönetimli kimlik (aad-pod-identity) etkinleştirildiyse, Node-Managed Identity (NMI) pod'ları, Azure Örnek Meta Verileri (IMDS) uç noktasına yapılan çağrıları durdurmak için düğümlerin iptables ayarlarını değiştirir. Bu yapılandırma, IMDS uç noktasına yapılan herhangi bir isteğin, belirli bir pod aad-pod-identity kullanmasa bile, NMI tarafından kesilip durdurulması anlamına gelir.
    • AzurePodIdentityException özel kaynak tanımını (CRD), CRD'de tanımlanan pod eşleştirme etiketlerinden kaynaklanan IMDS uç noktasına yapılan isteklerin NMI'de herhangi bir işlem yapılmadan proksid edilmesi gerektiğini belirtmek için yapılandırabilirsiniz. AzurePodIdentityException CRD'sini yapılandırarak kubernetes.azure.com/managedby: aks ad alanındaki etiketine sahip sistem podlarını aad-pod-identity dışında tutun. Daha fazla bilgi için bkz. Azure Kubernetes Service'te (AKS) Microsoft Entra pod ile yönetilen kimlikleri kullanma.
    • Özel durum yapılandırmak için mic-exception YAML yükleyin.
  • AKS, özel bir özel DNS bölgesi kullanılırken sistem tarafından atanan yönetilen kimlik kullanımını desteklemez.

Kümeyi güncelleştirme konusunda dikkat edilmesi gerekenler

Bir kümeyi güncelleştirirken aşağıdaki bilgileri göz önünde bulundurun:

  • Güncelleştirme yalnızca uygulanacak bir VHD güncellemesi varsa çalışır. En son VHD'yi çalıştırıyorsanız güncelleştirmeyi gerçekleştirmek için bir sonraki VHD kullanılabilir olana kadar beklemeniz gerekir.
  • Azure CLI, geçiş sonrasında eklentinizin izninin doğru şekilde ayarlanmasını sağlar. Geçiş işlemini gerçekleştirmek için Azure CLI kullanmıyorsanız, eklenti kimliğinin iznini kendiniz işlemeniz gerekir. Azure Resource Manager (ARM) şablonu kullanan bir örnek için bkz. ARM şablonlarını kullanarak Azure rolleri atama.
  • Kümeniz Azure Container Registry (ACR) görüntülerinden çekmek için --attach-acr kullanıyorsa, yönetilen kimlik için kullanılan yeni oluşturulan kubelet'in ACR'den çekme izni almasına izin verecek şekilde kümenizi güncelleştirdikten sonra az aks update --resource-group <resource-group-name> --name <aks-cluster-name> --attach-acr <acr-resource-id> komutunu çalıştırmanız gerekir. Aksi takdirde, güncelleştirmeden sonra ACR'den çekemezsiniz.

Yeni aks kümesinde sistem tarafından atanan yönetilen kimliği etkinleştirme

Sistem tarafından atanan yönetilen kimlik, yeni bir AKS kümesi oluşturduğunuzda varsayılan olarak etkinleştirilir.

az aks create komutunu kullanarak bir AKS kümesi oluşturun.

az aks create \
    --resource-group <resource-group-name> \
    --name <aks-cluster-name> \
    --generate-ssh-keys

Sistem tarafından atanan yönetilen kimliği kullanmak için mevcut kümeyi güncelleştirme

az aks update komutunu ve --enable-managed-identity parametresini kullanarak bir hizmet sorumlusundan mevcut bir AKS kümesini sistem tarafından atanan yönetilen kimliğe güncelleyin.

az aks update \
    --resource-group <resource-group-name> \
    --name <aks-cluster-name> \
    --enable-managed-identity

Kümeyi hizmet sorumlusu yerine sistem tarafından atanan yönetilen kimliği kullanacak şekilde güncelleştirdiğinizde, denetim düzlemi ve podlar Azure'deki diğer hizmetlere erişirken yetkilendirme için sistem tarafından atanan yönetilen kimliği kullanır. Kubelet'in de hemen yönetilen kimlik kullanmaya başlayabilmesi için kümenizdeki tüm düğümler yeniden oluşturulur. Bu yeniden oluşturma işlemi, düğüm havuzlarındaki düğümler cordoned, drained ve reimaged olduğundan AKS kümeniz için kapalı kalma süresine neden olur. Azure Kubernetes Service (AKS) kümenizde düğüm yeniden oluşturma gerektiren işlemlere ne zaman izin verildiğini denetlemek için Düğüm Kesintisi İlkesi'ni (önizleme) yapılandırın.

Sistem tarafından atanan yönetilen kimliğin asıl kimliğini alma

az aks show komutunu kullanarak sistem tarafından atanan kümenin yönetilen kimliğinin asıl kimliğini alın.

CLIENT_ID=$(az aks show \
    --name <aks-cluster-name> \
    --resource-group <resource-group-name> \
    --query identity.principalId \
    --output tsv)

Sistem tarafından atanmış yönetilen kimlik için rol ataması ekleyin

Uyarı

Sanal ağ (VNet), bağlı Azure diski, statik IP adresi veya varsayılan çalışan düğüm kaynak grubunun dışındaki yönlendirme tablosu için rolü özel kaynak grubuna atamanız gerekir Network Contributor.

az role assignment create komutunu kullanarak sistem tarafından atanan yönetilen kimliğe Azure RBAC rolü atayın. Aşağıdaki örnek, ağ katkıda bulunanı rolünü sistem tarafından atanan yönetilen kimliğe atar. Rol atamasının kapsamı sanal ağı içeren kaynak grubuna göre belirlenmiştir.

az role assignment create \
    --assignee <client-id> \
    --role "Network Contributor" \
    --scope <custom-resource-group-id>

Uyarı

Kümenizin yönetilen kimliğine verilen izinlerin yayılması 60 dakika kadar sürebilir.

Terraform yapılandırma dosyasını oluşturma

Terraform yapılandırma dosyaları, Terraform'un oluşturduğu ve yönettiği altyapıyı tanımlar.

  1. adlı main.tf bir dosya oluşturun ve Terraform sürümünü tanımlamak ve Azure sağlayıcısını belirtmek için aşağıdaki kodu ekleyin:

    terraform {
    required_version = ">= 1.0"
    required_providers {
      azurerm = {
        source  = "hashicorp/azurerm"
        version = "~> 4.0"
      }
     }
    }
    provider "azurerm" {
     features {}
    }
    
  2. Azure kaynak grubu oluşturmak için aşağıdaki kodu main.tf ekleyin. Kaynak grubunun adını ve konumunu gerektiği gibi değiştirebilirsiniz.

    resource "azurerm_resource_group" "example" {
     name     = "aks-rg"
     location = "East US"
    }
    

Terraform kullanarak sistem tarafından atanan yönetilen kimlikle AKS kümesi oluşturma

Sistem tarafından atanan yönetilen kimliğe sahip bir AKS kümesi oluşturmak için aşağıdaki kodu main.tf ekleyin:

resource "azurerm_kubernetes_cluster" "system_assigned" {
 name                = "aks-system"
 location            = azurerm_resource_group.example.location
 resource_group_name = azurerm_resource_group.example.name
 dns_prefix          = "akssystem"
 identity {
   type = "SystemAssigned"
 }
 default_node_pool {
   name       = "system"
   node_count = 1
   vm_size    = "Standard_DS2_v2"
 }
}

Terraform kullanarak sistem tarafından atanan yönetilen kimlik için rol ataması ekleme

Sistem tarafından atanan yönetilen kimlik için rol ataması oluşturmak için aşağıdaki kodu main.tf ekleyin. Bu örnek, sistem tarafından atanan yönetilen kimliğe Ağ Katkıda Bulunanı rolünü atar. Rol atamasının kapsamı sanal ağı içeren kaynak grubuna göre belirlenmiştir.

resource "azurerm_role_assignment" "system_assigned_network_contributor" {
 scope                = azurerm_resource_group.example.id
 role_definition_name = "Network Contributor"
 principal_id         = azurerm_kubernetes_cluster.system_assigned.identity[0].principal_id
}

Terraform'u başlatma

main.tf komutunu kullanarak terraform init dosyanızın bulunduğu dizinde Terraform'u başlatın. Bu komut Terraform ile Azure kaynaklarını yönetmek için gereken Azure sağlayıcısını indirir.

terraform init

Terraform için bir yürütme planı oluşturun

terraform plan komutunu kullanarak bir Terraform yürütme planı oluşturun. Bu komut, Terraform'un Azure aboneliğinizde oluşturacağı veya değiştireceği kaynakları gösterir.

terraform plan

Terraform yapılandırmasını uygulama

Yürütme planını gözden geçirip onayladıktan sonra komutunu kullanarak terraform apply Terraform yapılandırmasını uygulayın. Bu komut, Azure aboneliğinizdeki dosyanızda main.tf tanımlanan kaynakları oluşturur veya değiştirir.

terraform apply

Terraform dağıtımını doğrulayın

Terraform yapılandırmasını uyguladıktan sonra, çıktıyı filtrelemek için az aks show parametresiyle --query komutunu kullanarak ve kimlik bilgilerini görüntüleyerek dağıtımın doğruluğunu teyit edebilirsiniz. Örneğin:

az aks show \
 --name <cluster-name> \
 --resource-group <resource-group> \
 --query identity.type \
 --output tsv

AKS'de yönetilen kimlikler hakkında daha fazla bilgi edinmek için aşağıdaki makalelere bakın: