Azure Kubernetes Service (AKS) için kullanıcı tarafından atanan bir yönetilen kimliği kullanın

Bu makalede, yeni veya mevcut aks kümesinde kullanıcı tarafından atanan yönetilen kimliği etkinleştirme, kullanıcı tarafından atanan yönetilen kimliğin asıl kimliğini alma ve kullanıcı 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 (AKS) içindeki yönetilen kimliklerin Genel bakışını 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 bir tane yoksa, az group create komutunu kullanarak bir tane oluşturabilirsiniz.

    az group create \
        --name <resource-group-name> \
        --location <location>
    
  • Azure CLI sürüm 2.23.0 veya üzeri yüklü. Sürümü bulmak için az --version komutunu çalıştırın. Yüklemeniz veya yükseltmeniz gerekiyorsa bkz. Azure CLI yükleme.
  • Mevcut bir kümeyi user tarafından atanan yönetilen kimliği kullanacak şekilde güncelleştirmek için Azure CLI sürüm 2.49.0 veya üzerinin yüklü olması gerekir.

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 tarafından yönetilen kimlik (aad-pod-identity) etkinleştirildiyse, Node-Managed Identity (NMI) podları, düğümlerin iptable'larını değiştirerek Azure Örnek Meta Verileri (IMDS) uç noktasına yapılan çağrıları engeller. 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 (AKS) içinde Microsoft Entra kullanarak pod ile yönetilen kimlikleri kullanma.
    • Özel durum yapılandırmak için mic-exception YAML yükleyin.
  • Azure ABD Kamu buluttaki USDOD Central, USDOD East ve USGov Iowa bölgeleri, kullanıcı tarafından atanan yönetilen kimlikle küme oluşturmayı 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.

Kullanıcının atadığı yönetilen kimliği oluşturun

Henüz kullanıcı tarafından atanan yönetilen kimlik kaynağınız yoksa, az identity create komutunu kullanarak bir tane oluşturun.

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

Çıkışınız aşağıdaki örnek çıkışa benzemelidir:

{                                  
    "clientId": "<client-id>",
    "clientSecretUrl": "<clientSecretUrl>",
    "id": "/subscriptions/<subscription-id>/resourcegroups/<resource-group-name>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<identity-name>",
    "location": "<location>",
    "name": "<identity-name>",
    "principalId": "<principal-id>",
    "resourceGroup": "<resource-group-name>",
    "tags": {},
    "tenantId": "<tenant-id>",
    "type": "Microsoft.ManagedIdentity/userAssignedIdentities"
}

Kullanıcı tarafından atanan yönetilen kimliğin asıl kimliğini elde etme

az identity show komutunu kullanarak kullanıcı tarafından atanan yönetilen kimliğin asıl kimliğini edinin.

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

Kullanıcı tarafından atanan yönetilen kimliğin kaynak kimliğini alma

komutunu kullanarak kullanıcı tarafından atanan yönetilen kimliğin az identity show kaynak kimliğini alın.

RESOURCE_ID=$(az identity show \
    --name <identity-name> \
    --resource-group <resource-group-name> \
    --query id \
    --output tsv)

Kullanıcı tarafından atanan yönetilen kimliği yeni bir AKS kümesinde etkinleştirme

Kullanıcı tarafından atanan yönetilen kimliğin az aks create ayarlanmış --assign-identity parametresini kullanarak, komutu ile bir AKS kümesi oluşturun.

az aks create \
    --resource-group <resource-group-name> \
    --name <cluster-name> \
    --network-plugin azure \
    --vnet-subnet-id <vnet-subnet-id> \
    --dns-service-ip 10.2.0.10 \
    --service-cidr 10.2.0.0/24 \
    --assign-identity $RESOURCE_ID \
    --generate-ssh-keys

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

komutunu ve parametresini kullanıcı tarafından atanan yönetilen kimliğin kaynak tanıtıcısına ayarlayarak mevcut bir kümeyi kullanıcı tarafından atanan yönetilen kimliği kullanacak şekilde güncelleştirin.

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

Başarılı bir küme güncelleştirmesinin kullanıcı tarafından atanan yönetilen kimliği kullanma çıktısı aşağıdaki örnek çıktıya benzemelidir:

...
    "identity": {
    "principalId": null,
    "tenantId": null,
    "type": "UserAssigned",
    "userAssignedIdentities": {
        "/subscriptions/<subscription-id>/resourcegroups/<resource-group-name>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<identity-name>": {
        "clientId": "<client-id>",
        "principalId": "<principal-id>"
        }
    }
    },
...

Kümeyi hizmet sorumlusu yerine kullanıcı tarafından atanan yönetilen kimliği kullanacak şekilde güncelleştirdikten sonra, denetim düzlemi ve podlar Azure'deki diğer hizmetlere erişirken yetkilendirme için kullanıcı tarafından atanan yönetilen kimliği kullanır. Kubelet, düğüm havuzunuzu da yükseltene kadar hizmet ilkesi kullanmaya devam eder. AKS kümenizin düğüm havuzlarının yükseltilmesi, düğüm havuzlarındaki düğümler kordonlanıp, boşaltılıp ve yeniden imajlanırken kesinti süresine neden olur. Kullanıcı tarafından atanan yönetilen kimliğe güncelleştirmek için düğümlerinizdeki komutunu kullanabilirsiniz.

az aks nodepool upgrade \
  --resource-group <resource-group-name> \
  --cluster-name <aks-cluster-name> \
  --name <node-pool-name> \
  --node-image-only

Uyarı

Denetim düzlemi için yönetilen kimliğin sistem tarafından atanandan kullanıcı tarafından atanana geçirilmesi, denetim düzlemi ve aracı havuzları için kapalı kalma süresine neden olmaz. Denetim düzlemi bileşenleri, bir sonraki belirteç yenileme işlemi gerçekleşene kadar birkaç saat boyunca sistem tarafından atanmış eski kimliği kullanmaya devam eder.

Azure RBAC rolünü kullanıcı atamalı yönetilen kimliğe atayın

az role assignment create komutunu kullanarak kullanıcı tarafından atanan yönetilen kimlik için bir rol ataması ekleyin. Aşağıdaki örnek, kullanıcı tarafından atanan yönetilen kimliğe Key Vault Sırlar Kullanıcısı rolünü atayarak bu kimliğe bir key vault'taki sırları erişme izni verir. Rol ataması, anahtar kasası kaynağıyla sınırlıdır.

az role assignment create \
    --assignee <client-id> \
    --role "Key Vault Secrets User" \
    --scope "<key-vault-resource-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. main.tf adlı 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 kullanıcı tarafından atanan yönetilen kimlikle AKS kümesi oluşturma

Kullanıcı tarafından atanan yönetilen kimliği ve kimliği kullanan bir AKS kümesini oluşturmak için aşağıdaki kodu main.tf ekleyin:

resource "azurerm_user_assigned_identity" "uai" {
 name                = "aks-user-identity"
 resource_group_name = azurerm_resource_group.example.name
 location            = azurerm_resource_group.example.location
}
resource "azurerm_kubernetes_cluster" "user_assigned" {
 name                = "aks-user"
 location            = azurerm_resource_group.example.location
 resource_group_name = azurerm_resource_group.example.name
 dns_prefix          = "aksuser"
 identity {
   type         = "UserAssigned"
   identity_ids = [azurerm_user_assigned_identity.uai.id]
 }
 default_node_pool {
   name       = "system"
   node_count = 1
   vm_size    = "Standard_DS2_v2"
 }
}

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

Kullanıcı tarafından atanan yönetilen kimlik için rol ataması oluşturmak üzere aşağıdaki kodu main.tf ekleyin. Bu örnek, Key Vault Gizli Dizi Kullanıcısı rolünü kullanıcı tarafından atanan yönetilen kimliğe atayarak key vault gizli dizilere erişim izinleri verir. Rol ataması, anahtar kasası kaynağıyla sınırlıdır.

resource "azurerm_role_assignment" "user_assigned_key_vault_secrets_user" {
 scope                = azurerm_resource_group.example.id
 role_definition_name = "Key Vault Secrets User"
 principal_id         = azurerm_user_assigned_identity.uai.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ı 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 main.tf dosyanızda 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 çıkışı filtrelemek ve kimlik bilgilerini görüntülemek için [az aks show][az-aks-show] komutunu kullanarak dağıtımı parametresiyle --query doğrulayabilirsiniz. Ö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: