Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Den här artikeln beskriver hur du aktiverar en användartilldelad hanterad identitet i ett nytt eller befintligt AKS-kluster, hämtar huvud-ID:t för den användartilldelade hanterade identiteten och lägger till en rolltilldelning för den användartilldelade hanterade identiteten.
Förutsättningar
Läs Översikt över hanterade identiteter i Azure Kubernetes Service (AKS) för att förstå de olika typerna av hanterade identiteter som är tillgängliga i AKS och hur du kan använda dem för att få säker åtkomst till Azure resurser.
Ange din prenumeration som den aktuella aktiva prenumerationen med hjälp av
az account setkommandot .az account set --subscription <subscription-id>
En befintlig Azure resursgrupp. Om du inte har en kan du skapa en med kommandot
az group create.az group create \ --name <resource-group-name> \ --location <location>
- Azure CLI version 2.23.0 eller senare installerad. Kör
az --versionför att hitta versionen. Om du behöver installera eller uppgradera kan du läsa Installera Azure CLI. - Om du vill uppdatera ett befintligt kluster för att använda en användaretilldelad hanterad identitet behöver du Azure CLI version 2.49.0 eller senare installerad.
- Terraform installerat lokalt. Installationsinstruktioner finns i Installera Terraform.
Begränsningar
- När du har skapat ett kluster med en hanterad identitet kan du inte växla tillbaka till att använda tjänstens huvudnamn.
- Det går inte att flytta eller migrera ett hanterat identitetsaktiverat kluster till en annan klientorganisation.
- Om klustret har Microsoft Entra poddhanterad identitet (
aad-pod-identity) aktiverad, modifierar Node-Managed Identity (NMI)-poddar noderna iptables för att intercepta anrop till IMDS-slutpunkten (Azure Instance Metadata). Den här konfigurationen innebär att alla begäranden som görs till IMDS-slutpunkten fångas upp av NMI, även om en viss podd inte använderaad-pod-identity.- Du kan konfigurera den anpassade resursdefinitionen för AzurePodIdentityException (CRD) för att ange att begäranden till IMDS-slutpunkten som kommer från en podd med etiketter som definierats i CRD ska hanteras som proxy utan någon bearbetning i NMI. Undanta systempoddar i
kubernetes.azure.com/managedby: aks-namnområdet med -etiketten iaad-pod-identitygenom att konfigurera CRD:n AzurePodIdentityException. Mer information finns i Använd Microsoft Entra poddhanterade identiteter i Azure Kubernetes Service (AKS). - Om du vill konfigurera ett undantag installerar du mic-exception YAML.
- Du kan konfigurera den anpassade resursdefinitionen för AzurePodIdentityException (CRD) för att ange att begäranden till IMDS-slutpunkten som kommer från en podd med etiketter som definierats i CRD ska hanteras som proxy utan någon bearbetning i NMI. Undanta systempoddar i
- Regionerna USDOD Central, USDOD East och USGov Iowa i Azure US Government molnet har inte stöd för att skapa ett kluster med en användartilldelad hanterad identitet.
Uppdatera klusteröverväganden
När du uppdaterar ett kluster bör du tänka på följande information:
- En uppdatering fungerar bara om det finns en VHD-uppdatering att använda. Om du kör den senaste virtuella hårddisken måste du vänta tills nästa virtuella hårddisk är tillgänglig för att kunna utföra uppdateringen.
- Azure CLI ser till att tilläggets behörighet har angetts korrekt efter migreringen. Om du inte använder Azure CLI för att utföra migreringsåtgärden måste du hantera tilläggsidentitetens behörighet själv. Ett exempel med hjälp av en Azure Resource Manager-mall (ARM) finns i Tilldela Azure roller med arm-mallar.
- Om klustret använde
--attach-acrför att hämta från avbildningar från Azure Container Registry (ACR) måste du köra kommandotaz aks update --resource-group <resource-group-name> --name <aks-cluster-name> --attach-acr <acr-resource-id>när du har uppdaterat klustret så att den nyligen skapade kubelet som används för hanterad identitet får behörighet att hämta från ACR. Annars kan du inte hämta från ACR efter uppdateringen.
Skapa en användartilldelad hanterad identitet
Om du ännu inte har en användartilldelad hanterad identitetsresurs skapar du en med kommandot az identity create .
az identity create \
--name <identity-name> \
--resource-group <resource-group-name>
Dina utdata bör likna följande exempelutdata:
{
"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"
}
Hämta huvud-ID:t för den användartilldelade hanterade identiteten
Använd kommandot az identity show för att hämta huvud-ID:t för den användartilldelade hanterade identiteten.
CLIENT_ID=$(az identity show \
--name <identity-name> \
--resource-group <resource-group-name> \
--query principalId \
--output tsv)
Hämta resurs-ID för den användartilldelade hanterade identiteten
Använd kommandot az identity show för att hämta resurs-ID:t för den användartilldelade hanterade identiteten.
RESOURCE_ID=$(az identity show \
--name <identity-name> \
--resource-group <resource-group-name> \
--query id \
--output tsv)
Aktivera en användartilldelad hanterad identitet i ett nytt AKS-kluster
Skapa ett AKS-kluster med en användartilldelad hanterad identitet med kommandot az aks create och parametern --assign-identity inställd på resurs-ID för den användartilldelade hanterade identiteten.
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
Uppdatera ett befintligt kluster för att använda en användartilldelad hanterad identitet
Uppdatera ett befintligt kluster för att använda en användartilldelad hanterad identitet med kommandot az aks update och parametern --assign-identity inställd på resurs-ID för den användartilldelade hanterade identiteten.
az aks update \
--resource-group <resource-group-name> \
--name <cluster-name> \
--enable-managed-identity \
--assign-identity $RESOURCE_ID
Utdata för en lyckad klusteruppdatering för att använda en användartilldelad hanterad identitet bör likna följande exempelutdata:
...
"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>"
}
}
},
...
När du har uppdaterat klustret för att använda en användartilldelad hanterad identitet i stället för ett huvudnamn för tjänsten använder kontrollplanet och poddarna den användartilldelade hanterade identiteten för auktorisering vid åtkomst till andra tjänster i Azure. Kubelet fortsätter att använda tjänstens huvudnamn tills du även uppgraderar nodpoolen. En uppgradering av nodpoolen orsakar stilleståndstid för DITT AKS-kluster eftersom noderna i nodpoolerna är avspärrade, tömda och omskapade. Du kan använda kommandot på noderna för att uppdatera till en användartilldelad hanterad identitet.
az aks nodepool upgrade \
--resource-group <resource-group-name> \
--cluster-name <aks-cluster-name> \
--name <node-pool-name> \
--node-image-only
Anmärkning
Migrering av en hanterad identitet för kontrollplanet från systemtilldelad till användartilldelad leder inte till någon stilleståndstid för kontrollplans- och agentpooler. Kontrollplanskomponenterna fortsätter att använda den gamla systemtilldelade identiteten i upp till flera timmar tills nästa token uppdateras.
Tilldela en Azure RBAC-roll till den användartilldelade hanterade identiteten
Lägg till en rolltilldelning för den användartilldelade hanterade identiteten med kommandot az role assignment create. I följande exempel tilldelas den hanterade användaridentiteten rollen Key Vault Secrets User för att ge den behörighet att komma åt hemligheter i ett nyckelvalv. Rolltilldelningen är begränsad till nyckelvalvsresursen.
az role assignment create \
--assignee <client-id> \
--role "Key Vault Secrets User" \
--scope "<key-vault-resource-id>"
Anmärkning
Det kan ta upp till 60 minuter innan de behörigheter som beviljas till klustrets hanterade identitet sprids.
Skapa Terraform-konfigurationsfilen
Terraform-konfigurationsfiler definierar infrastrukturen som Terraform skapar och hanterar.
Skapa en fil med namnet
main.tfoch lägg till följande kod för att definiera Terraform-versionen och ange Azure provider:terraform { required_version = ">= 1.0" required_providers { azurerm = { source = "hashicorp/azurerm" version = "~> 4.0" } } } provider "azurerm" { features {} }Lägg till följande kod i
main.tfför att skapa en Azure resursgrupp. Ändra gärna namn och plats för resursgruppen efter behov.resource "azurerm_resource_group" "example" { name = "aks-rg" location = "East US" }
Skapa ett AKS-kluster med en användartilldelad hanterad identitet med Terraform
Lägg till följande kod för att main.tf skapa en användartilldelad hanterad identitet och ett AKS-kluster som använder identiteten:
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"
}
}
Lägga till en rolltilldelning för en användartilldelad hanterad identitet med Terraform
Lägg till följande kod i main.tf för att skapa en rolltilldelning för den hanterade identitet som är användartilldelad. I det här exemplet tilldelas rollen Key Vault Secrets User till den hanterade identiteten som tilldelats användaren för att ge den behörighet att komma åt hemligheter i ett nyckelvalv. Rolltilldelningen är begränsad till nyckelvalvsresursen.
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
}
Initiera Terraform
Initiera Terraform i katalogen som innehåller main.tf filen med hjälp av terraform init kommandot . Det här kommandot laddar ned den Azure provider som krävs för att hantera Azure resurser med Terraform.
terraform init
Skapa en Terraform-utförandeplan
Skapa en Terraform-körningsplan med kommandot terraform plan . Det här kommandot visar de resurser som Terraform skapar eller ändrar i din Azure-prenumeration.
terraform plan
Applicera Terraform-konfigurationen
När du har granskat och bekräftat körningsplanen, verkställer du Terraform-konfigurationen med kommandot terraform apply. Det här kommandot skapar eller ändrar de resurser som definierats i filen main.tf i din Azure-prenumeration.
terraform apply
Verifiera Terraform-driftsättningen
När du har tillämpat Terraform-konfigurationen kan du verifiera distributionen med kommandot [az aks show][az-aks-show] med parametern --query för att filtrera utdata och visa identitetsinformationen. Som exempel:
az aks show \
--name <cluster-name> \
--resource-group <resource-group> \
--query identity.type \
--output tsv
Relaterat innehåll
Mer information om hanterade identiteter i AKS finns i följande artiklar: