Použití spravované identity přiřazené uživatelem v Azure Kubernetes Service (AKS)

Tento článek vysvětluje, jak povolit spravovanou identitu přiřazenou uživatelem v novém nebo stávajícím clusteru AKS, získat ID objektu této identity a přidat přiřazení role pro tuto spravovanou identitu.

Předpoklady

  • Existující skupina prostředků Azure. Pokud ho nemáte, můžete ho vytvořit pomocí příkazu az group create.

    az group create \
        --name <resource-group-name> \
        --location <location>
    
  • Azure CLI nainstalovaná verze 2.23.0 nebo novější. Verzi zjistíte spuštěním příkazu az --version. Pokud potřebujete nainstalovat nebo upgradovat, přečtěte si téma Instalace Azure CLI.
  • Pokud chcete aktualizovat existující cluster tak, aby používal spravovanou identitu přiřazenou uživatelem , musíte mít nainstalovanou Azure CLI verzi 2.49.0 nebo novější.

Omezení

  • Jakmile vytvoříte cluster se spravovanou identitou, nemůžete se přepnout zpět na použití služebního principálu.
  • Přesun nebo migrace clusteru s podporou spravované identity do jiného tenanta se nepodporuje.
  • Pokud je v clusteru povolena identita spravovaná podem Microsoft Entra (aad-pod-identity), pody Node-Managed Identity (NMI) upraví iptables uzlů pro zachycení volání na koncový bod metadat instance Azure (IMDS). Tato konfigurace znamená, že NMI zachytí všechny požadavky na koncový bod IMDS, a to i v případě, že konkrétní pod nepoužívá aad-pod-identity.
    • Vlastní definici prostředku (CRD) AzurePodIdentityException můžete nakonfigurovat tak, aby určovala, že požadavky na koncový bod IMDS, které pocházejí z podů s popisky odpovídajícími těm, které jsou definovány v CRD, by se měly proxyovat bez jakéhokoli zpracování v NMI. Vylučte systémové pody s kubernetes.azure.com/managedby: aks popiskem v prostoru názvů kube-system nakonfigurováním CRD AzurePodIdentityException aad-pod-identity. Další informace najdete v tématu Použití Microsoft Entra spravovaných identit pomocí podu v Azure Kubernetes Service (AKS).
    • Pokud chcete nakonfigurovat výjimku, nainstalujte YAML mic-exception.
  • Oblasti USDOD střed, USDOD východ a USGov Iowa v cloudu Azure pro vládu USA nepodporují vytváření clusteru s uživatelsky přiřazenou spravovanou identitou.

Úvahy při aktualizaci clusteru

Při aktualizaci clusteru zvažte následující informace:

  • Aktualizace funguje jenom v případě, že je k dispozici aktualizace pro virtuální pevný disk. Pokud používáte nejnovější virtuální pevný disk, musíte počkat, až bude k dispozici další virtuální pevný disk, abyste mohli provést aktualizaci.
  • Azure CLI zajistí správné nastavení oprávnění doplňku po migraci. Pokud k provedení operace migrace nepoužíváte Azure CLI, musíte oprávnění identity doplňku spravovat sami. Příklad použití šablony Azure Resource Manager (ARM) najdete v tématu Assign Azure role pomocí šablon ARM.
  • Pokud váš cluster používal --attach-acr k načtení imagí z Azure Container Registry (ACR), musíte po aktualizaci clusteru spustit příkaz az aks update --resource-group <resource-group-name> --name <aks-cluster-name> --attach-acr <acr-resource-id>, aby nově vytvořený kubelet použitý pro spravovanou identitu získal oprávnění k vyžádání z ACR. Jinak po aktualizaci nebudete moct načíst z ACR.

Vytvořit uživatelsky přiřazenou spravovanou identitu

Pokud ještě nemáte prostředek spravované identity přiřazený uživatelem, vytvořte ho pomocí příkazu az identity create.

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

Výstup by měl vypadat podobně jako v následujícím příkladu výstupu:

{                                  
    "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"
}

Získejte hlavní ID uživatelsky přiřazené spravované identity

Pomocí příkazu az identity show získejte hlavní ID spravované identity přiřazené uživatelem.

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

Získání ID prostředku spravované identity přiřazené uživatelem

Pomocí příkazu az identity show získejte ID prostředku uživatelsky přiřazené spravované identity.

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

Povolit uživatelsky přiřazenou spravovanou identitu v novém clusteru AKS

Pomocí příkazu az aks create a parametru --assign-identity nastaveném na ID prostředku uživatelsky přiřazené spravované identity vytvořte cluster AKS.

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

Aktualizace existujícího clusteru tak, aby používal spravovanou identitu přiřazenou uživatelem

Aktualizujte existující cluster tak, aby používal spravovanou identitu přiřazenou uživatelem pomocí az aks update příkazu a --assign-identity parametru nastaveného na ID prostředku spravované identity přiřazené uživatelem.

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

Výstup úspěšné aktualizace clusteru pro použití spravované identity přiřazené uživatelem by měl vypadat podobně jako v následujícím příkladu výstupu:

...
    "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>"
        }
    }
    },
...

Po aktualizaci clusteru tak, aby používal spravovanou identitu přiřazenou uživatelem místo instančního objektu, řídicí rovina a pody používají spravovanou identitu přiřazenou uživatelem k autorizaci při přístupu k jiným službám v Azure. Kubelet nadále používá služební principál, dokud neupgradujete fond uzlů. Upgrade fondu uzlů způsobí prostoje clusteru AKS, protože uzly ve fondech uzlů jsou izolovány, vyprázdněny a přeinstalovány. Pomocí příkazu na uzlech můžete aktualizovat spravovanou identitu přiřazenou uživatelem.

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

Poznámka:

Migrace spravované identity pro řídicí rovinu ze systému přiřazeného uživateli nemá za následek žádný výpadek řídicí roviny a fondů agentů. Komponenty řídicí roviny pokračují ve staré identitě přiřazené systémem až po několik hodin až do další aktualizace tokenu.

Přiřazení role RBAC Azure spravované identitě přiřazené uživatelem

Přidejte přiřazení role pro uživatelskou spravovanou identitu pomocí příkazu az role assignment create. Následující příklad přiřadí roli Key Vault Secrets User spravované identitě přiřazené uživatelem, aby jí udělila oprávnění pro přístup k tajným kódům v key vault. Přiřazení role je vymezeno na prostředek úložiště klíčů.

az role assignment create \
    --assignee <client-id> \
    --role "Key Vault Secrets User" \
    --scope "<key-vault-resource-id>"

Poznámka:

Proces zavedení oprávnění udělených spravované identitě clusteru může trvat až 60 minut.

Vytvoření konfiguračního souboru Terraformu

Konfigurační soubory Terraformu definují infrastrukturu, kterou Terraform vytváří a spravuje.

  1. Vytvořte soubor s názvem main.tf a přidejte následující kód, který definuje verzi Terraformu a určí zprostředkovatele Azure:

    terraform {
    required_version = ">= 1.0"
    required_providers {
      azurerm = {
        source  = "hashicorp/azurerm"
        version = "~> 4.0"
      }
     }
    }
    provider "azurerm" {
     features {}
    }
    
  2. Přidáním následujícího kódu do main.tf vytvořte skupinu prostředků Azure. Neváhejte dle potřeby změnit název a umístění skupiny prostředků.

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

Vytvoření clusteru AKS se spravovanou identitou přiřazenou uživatelem pomocí Terraformu

Přidáním následujícího kódu main.tf vytvořte spravovanou identitu přiřazenou uživatelem a cluster AKS, který identitu používá:

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"
 }
}

Přidání přiřazení role pro uživatelsky spravovanou identitu pomocí Terraform

Přidáním následujícího kódu main.tf vytvořte přiřazení role pro spravovanou identitu přiřazenou uživatelem. Tento příklad přiřadí roli Key Vault Secrets User spravované identitě přiřazené uživatelem, aby jí udělila oprávnění pro přístup k tajným kódům v key vault. Přiřazení role je vymezeno na prostředek úložiště klíčů.

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
}

Inicializujte Terraform

Inicializace Terraformu v adresáři obsahujícím váš main.tf soubor pomocí terraform init příkazu Tento příkaz stáhne poskytovatele Azure potřebného ke správě Azure prostředků pomocí Terraformu.

terraform init

Vytvoření plánu provádění Terraformu

Pomocí příkazu vytvořte plán provádění Terraformu terraform plan . Tento příkaz ukazuje prostředky, které Terraform vytvoří nebo upraví ve vašem předplatném Azure.

terraform plan

Aplikujte konfiguraci Terraformu

Po kontrole a potvrzení plánu provádění aplikujte konfiguraci Terraformu pomocí příkazu terraform apply. Tento příkaz vytvoří nebo upraví prostředky definované v souboru main.tf ve vašem předplatném Azure.

terraform apply

Ověření nasazení Terraformu

Po použití konfigurace Terraformu můžete nasazení ověřit pomocí příkazu [az aks show][az-aks-show] s parametrem --query pro filtrování výstupu a zobrazení informací o identitě. Například:

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

Další informace o spravovaných identitách v AKS najdete v následujících článcích: