Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Questo articolo spiega come abilitare un'identità gestita assegnata dall'utente in un cluster di Azure Kubernetes Service (AKS) nuovo o esistente, ottenere l'ID principale dell'identità gestita assegnata dall'utente, e aggiungere un'assegnazione di ruolo per la medesima identità.
Prerequisiti
Leggere Panoramica delle identità gestite in Servizio Azure Kubernetes (AKS) per comprendere i diversi tipi di identità gestite disponibili nel servizio Azure Kubernetes e come usarle per accedere in modo sicuro alle risorse Azure.
Imposta l'abbonamento come abbonamento attivo corrente usando il comando
az account set.az account set --subscription <subscription-id>
Gruppo di risorse Azure esistente. Se non è disponibile, è possibile crearne uno usando il
az group createcomando .az group create \ --name <resource-group-name> \ --location <location>
- interfaccia della riga di comando di Azure versione 2.23.0 o successiva installata. Eseguire
az --versionper trovare la versione. Se è necessario installare o aggiornare, vedere Installare interfaccia della riga di comando di Azure. - Per aggiornare un cluster esistente per l'uso di un'identità gestita assegnata dall'utente<
>, è necessario interfaccia della riga di comando di Azure versione 2.49.0 o successiva installata.
- Terraform installato localmente. Per istruzioni di installazione, vedere Installare Terraform.
Limitazioni
- Dopo aver creato un cluster con un'identità gestita, non è possibile tornare all'uso di un'entità servizio.
- Lo spostamento o la migrazione di un cluster abilitato per l'identità gestita a un tenant diverso non è supportato.
- Se il cluster dispone di Microsoft Entra identità gestita da pod (
aad-pod-identity) abilitata, i pod NMI (Node-Managed Identity) dei nodi modificano le tabelle iptables per intercettare le chiamate all'endpoint IMDS (Instance Metadata) di Azure. Questa configurazione implica che qualsiasi richiesta inviata all'endpoint IMDS venga intercettata da NMI, anche se un particolare pod non utilizzaaad-pod-identity.- È possibile configurare la definizione di risorsa personalizzata (CRD) di AzurePodIdentityException per specificare che le richieste all'endpoint IMDS provenienti da un pod che corrispondono a etichette definite nel CRD devono essere inoltrate tramite proxy senza alcuna elaborazione in NMI. Escludere i pod di sistema con l'etichetta
kubernetes.azure.com/managedby: aksnello spazio dei nomi kube-system inaad-pod-identityconfigurando il CRD AzurePodIdentityException. Per altre informazioni, vedere Usa le identità pod gestite di Microsoft Entra in Servizio Azure Kubernetes (AKS). - Per configurare un'eccezione, installare mic-exception YAML.
- È possibile configurare la definizione di risorsa personalizzata (CRD) di AzurePodIdentityException per specificare che le richieste all'endpoint IMDS provenienti da un pod che corrispondono a etichette definite nel CRD devono essere inoltrate tramite proxy senza alcuna elaborazione in NMI. Escludere i pod di sistema con l'etichetta
- Le aree USDOD Central, USDOD East e USGov Iowa in Azure Governo Statunitense cloud non supportano la creazione di un cluster con un'identità gestita assegnata dall'utente.
Considerazioni sull'aggiornamento del cluster
Quando si aggiorna un cluster, prendere in considerazione le informazioni seguenti:
- Un aggiornamento funziona solo se è disponibile un aggiornamento VHD da utilizzare. Se si esegue l'ultimo VHD, è necessario attendere che il prossimo VHD sia disponibile per effettuare l'aggiornamento.
- Il interfaccia della riga di comando di Azure assicura che l'autorizzazione del componente aggiuntivo sia impostata correttamente dopo la migrazione. Se non si usa il interfaccia della riga di comando di Azure per eseguire l'operazione di migrazione, è necessario gestire manualmente l'autorizzazione dell'identità del componente aggiuntivo. Per un esempio relativo all'uso di un modello di Azure Resource Manager (ARM), vedere Assign Azure roles using ARM templates.
- Se il cluster usava
--attach-acrper eseguire il pull da immagini da Registro Azure Container (ACR), è necessario eseguire il comandoaz aks update --resource-group <resource-group-name> --name <aks-cluster-name> --attach-acr <acr-resource-id>dopo aver aggiornato il cluster per consentire al kubelet appena creato usato per l'identità gestita di ottenere l'autorizzazione per eseguire il pull da Registro Azure Container. In caso contrario, non sarà possibile prelevare da Azure Container Registry dopo l'aggiornamento.
Creare un'identità gestita assegnata dall'utente
Se non si ha ancora una risorsa di identità gestita assegnata dall'utente, crearne una usando il comando az identity create.
az identity create \
--name <identity-name> \
--resource-group <resource-group-name>
L'output dovrebbe essere simile all'output di esempio seguente:
{
"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"
}
Ottenere l'ID principale dell'identità gestita assegnata dall'utente
Ottenere l'ID principale dell'identità gestita assegnata dall'utente usando il comando az identity show.
CLIENT_ID=$(az identity show \
--name <identity-name> \
--resource-group <resource-group-name> \
--query principalId \
--output tsv)
Ottenere l'ID risorsa dell'identità gestita assegnata dall'utente
Ottenere l'ID risorsa dell'identità gestita assegnata dall'utente usando il comando az identity show.
RESOURCE_ID=$(az identity show \
--name <identity-name> \
--resource-group <resource-group-name> \
--query id \
--output tsv)
Abilitare un'Identità gestita assegnata dall'utente in un nuovo cluster AKS
Creare un cluster AKS con un'identità gestita assegnata dall'utente usando il comando az aks create e il parametro --assign-identity impostato sull'ID risorsa dell'identità gestita assegnata dall'utente.
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
Aggiornare un cluster esistente per usare un'identità gestita assegnata dall'utente
Aggiornare un cluster esistente per usare un'identità gestita assegnata dall'utente usando il az aks update comando e il --assign-identity parametro impostato sull'ID risorsa dell'identità gestita assegnata dall'utente.
az aks update \
--resource-group <resource-group-name> \
--name <cluster-name> \
--enable-managed-identity \
--assign-identity $RESOURCE_ID
L'output per un aggiornamento corretto del cluster per l'uso di un'identità gestita assegnata dall'utente dovrebbe essere simile all'output di esempio seguente:
...
"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>"
}
}
},
...
Dopo aver aggiornato il cluster per usare un'identità gestita assegnata dall'utente anziché un'entità servizio, il piano di controllo e i pod usano l'identità gestita assegnata dall'utente per l'autorizzazione quando accedono ad altri servizi in Azure. Kubelet continua a usare un'entità servizio fino a quando non si aggiorna anche il pool di nodi. Un aggiornamento del pool di nodi causa tempi di inattività per il cluster AKS poiché i nodi nei pool di nodi vengono bloccati, svuotati e reimmaginati. È possibile usare il comando nei nodi per eseguire l'aggiornamento a un'identità gestita assegnata dall'utente.
az aks nodepool upgrade \
--resource-group <resource-group-name> \
--cluster-name <aks-cluster-name> \
--name <node-pool-name> \
--node-image-only
Annotazioni
La migrazione di un'identità gestita per il piano di controllo, da assegnata dal sistema a assegnata dall'utente, non comporta tempi di inattività per il piano di controllo e i pool di agenti. I componenti del piano di controllo continuano con l'identità assegnata dal sistema precedente fino a diverse ore fino al successivo aggiornamento del token.
Assegnare un ruolo di Azure RBAC all'identità gestita assegnata dall'utente
Aggiungere un'assegnazione di ruolo per l'identità gestita assegnata dall'utente usando il az role assignment create comando . Nell'esempio seguente viene assegnato il ruolo Key Vault Secrets User all'identità gestita assegnata dall'utente per concedere le autorizzazioni per accedere ai segreti in un key vault. L'assegnazione di ruolo è limitata alla risorsa dell'insieme di credenziali delle chiavi.
az role assignment create \
--assignee <client-id> \
--role "Key Vault Secrets User" \
--scope "<key-vault-resource-id>"
Annotazioni
La propagazione delle autorizzazioni concesse all'identità gestita del cluster può richiedere fino a 60 minuti.
Creare il file di configurazione terraform
I file di configurazione terraform definiscono l'infrastruttura creata e gestita da Terraform.
Creare un file denominato
main.tfe aggiungere il codice seguente per definire la versione di Terraform e specificare il provider Azure:terraform { required_version = ">= 1.0" required_providers { azurerm = { source = "hashicorp/azurerm" version = "~> 4.0" } } } provider "azurerm" { features {} }Aggiungere il codice seguente a
main.tfper creare un gruppo di risorse Azure. È possibile modificare il nome e la posizione del gruppo di risorse in base alle esigenze.resource "azurerm_resource_group" "example" { name = "aks-rg" location = "East US" }
Creare un cluster AKS con identità gestita assegnata dall'utente usando Terraform
Aggiungere il codice seguente a main.tf per creare un'identità gestita assegnata dall'utente e un cluster AKS che usa l'identità:
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"
}
}
Aggiungere un'assegnazione di ruolo per un'identità gestita assegnata dall'utente usando Terraform
Aggiungere il codice seguente a main.tf per creare un'assegnazione di ruolo per l'identità gestita assegnata dall'utente. In questo esempio viene assegnato il ruolo Key Vault Secrets User all'identità gestita assegnata dall'utente per concedergli le autorizzazioni per accedere ai segreti in un key vault. L'assegnazione di ruolo è limitata alla risorsa dell'insieme di credenziali delle chiavi.
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
}
Inizializzare Terraform
Inizializzare Terraform nella directory contenente il main.tf file usando il terraform init comando . Questo comando scarica il provider di Azure necessario per gestire le risorse Azure con Terraform.
terraform init
Crea un piano di esecuzione di Terraform
Creare un piano di esecuzione terraform usando il comando terraform plan. Questo comando mostra le risorse che Terraform creerà o modificherà nella sottoscrizione Azure.
terraform plan
Applicare la configurazione di Terraform
Dopo aver esaminato e confermato il piano di esecuzione, applicare la configurazione di Terraform usando il terraform apply comando . Questo comando crea o modifica le risorse definite nel file main.tf nella sottoscrizione Azure.
terraform apply
Verificare la distribuzione di Terraform
Dopo aver applicato la configurazione di Terraform, è possibile verificare la distribuzione usando il comando [az aks show][az-aks-show] con il --query parametro per filtrare l'output e visualizzare le informazioni sull'identità. Per esempio:
az aks show \
--name <cluster-name> \
--resource-group <resource-group> \
--query identity.type \
--output tsv
Contenuti correlati
Per ulteriori informazioni sulle identità gestite nel servizio Azure Kubernetes Service (AKS), vedere gli articoli seguenti: