Usare un entità servizio con il servizio Azure Kubernetes (AKS)

Un cluster del servizio Azure Kubernetes richiede un’entità servizio di Microsoft Entra o un'identità gestita per creare e gestire in modo dinamico altre risorse di Azure, ad esempio Azure Load Balancer o Registro Azure Container.

Per sicurezza e facilità d'uso ottimali, Microsoft consiglia di usare le identità gestite anziché le entità servizio per autorizzare l'accesso da un cluster del servizio Azure Kubernetes ad altre risorse in Azure. Un'identità gestita è un tipo speciale di entità servizio che può essere usata per ottenere le credenziali di Microsoft Entra senza la necessità di gestire e proteggere le credenziali. Per altre informazioni sull'uso di un'identità gestita con il cluster, vedere Usare un'identità gestita nel servizio Azure Kubernetes.

Questo articolo illustra come creare e usare un'entità servizio con i cluster del servizio Azure Kubernetes.

Operazioni preliminari

Per creare un'entità servizio Microsoft Entra, è necessario disporre delle autorizzazioni necessarie per registrare un'applicazione con il tenant di Microsoft Entra e per assegnare l'applicazione a un ruolo nella sottoscrizione. Se non sono disponibili le autorizzazioni necessarie, è necessario chiedere all'amministratore di Microsoft Entra ID o della sottoscrizione di assegnare le autorizzazioni necessarie o creare anticipatamente un'entità servizio da usare con il cluster del servizio Azure Kubernetes.

Se si usa un'entità servizio da un tenant Microsoft Entra diverso, sono disponibili altre considerazioni sulle autorizzazioni disponibili quando si distribuisce il cluster. È possibile che non si disponga delle autorizzazioni appropriate per leggere e scrivere informazioni sulla directory. Per altre informazioni, vedere Che cosa sono le autorizzazioni utente predefinite in Microsoft Entra ID?

Prerequisiti

  • Se si usa l'interfaccia della riga di comando di Azure, è necessaria la versione 2.0.59 o successiva dell'interfaccia della riga di comando di Azure. Eseguire az --version per trovare la versione. Se è necessario eseguire l'installazione o l'aggiornamento, vedere Installare l'interfaccia della riga di comando di Azure.
  • Se si usa Azure PowerShell, è necessario Azure PowerShell versione 5.0.0 o successiva. Eseguire Get-InstalledModule -Name Az per trovare la versione. Se è necessario installare o aggiornare, vedere Installare il modulo Azure Az PowerShell.

Creare un'entità servizio

Creare un'entità servizio prima di creare il cluster.

  1. Creare un'entità servizio usando il comando az ad sp create-for-rbac.

    az ad sp create-for-rbac --name myAKSClusterServicePrincipal
    

    L'output dovrebbe essere simile all'output di esempio seguente:

    {
      "appId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
      "displayName": "myAKSClusterServicePrincipal",
      "name": "http://myAKSClusterServicePrincipal",
      "password": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
      "tenant": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
    }
    
  2. Copiare i valori per appId e password dall'output. Questi vengono usati durante la creazione di un cluster del servizio Azure Kubernetes nella sezione successiva.

Specificare un'entità servizio per un cluster servizio Azure Kubernetes

  • Usare un'entità servizio esistente per un nuovo cluster del servizio Azure Kubernetes usando il comando az aks create, e usare i parametri --service-principal e --client-secret per specificare il appId e password dall'output ricevuto nella sezione precedente.

    az aks create \
        --resource-group myResourceGroup \
        --name myAKSCluster \
        --service-principal <appId> \
        --client-secret <password> \
        --generate-ssh-keys
    

    Nota

    Se si usa un'entità servizio esistente con segreto personalizzato, assicurarsi che il segreto non sia più lungo di 190 byte.

Delegare l'accesso ad altre risorse di Azure

È possibile usare l'entità servizio per il cluster del servizio Azure Kubernetes per accedere ad altre risorse. Ad esempio, se si vuole distribuire il cluster del servizio Azure Kubernetes in una subnet di rete virtuale di Azure esistente, connettersi a Registro Azure Container o accedere a chiavi o segreti in un insieme di credenziali delle chiavi dal cluster, è necessario delegare l'accesso a tali risorse all'entità servizio. Per delegare l'accesso, assegnare un ruolo di Controllo degli accessi in base al ruolo di Azure all'entità servizio.

Importante

La propagazione delle autorizzazioni concesse a un'entità servizio associata a un cluster può richiedere fino a 60 minuti.

  • Creare un'assegnazione di ruolo usando il comando az role assignment create. Specificare il valore dell'ID app dell'entità servizio per il parametro appId. Specificare l'ambito per l'assegnazione di ruolo, ad esempio un gruppo di risorse o una risorsa di rete virtuale. L'assegnazione di ruolo determina quali autorizzazioni sono disponibili per l'entità servizio per la risorsa e in quale ambito.

    Ad esempio, per assegnare all'entità servizio le autorizzazioni per accedere ai segreti in un insieme di credenziali delle chiavi, è possibile usare il comando seguente:

    az role assignment create \
        --assignee <appId> \
        --scope "/subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.KeyVault/vaults/<vault-name>" \
        --role "Key Vault Secrets User"
    

    Nota

    L'oggetto --scope per una risorsa deve essere un ID risorsa completo, ad esempio /subscriptions/<guid>/resourceGroups/myResourceGroup o /subscriptions/<guid >/resourceGroups/myResourceGroupVnet/providers/Microsoft.Network/virtualNetworks/myVnet.

Le sezioni seguenti illustrano in dettaglio le deleghe comuni che potrebbe essere necessario assegnare a un'entità servizio.

Registro Azure Container

Se si usa Registro Azure Container come archivio immagini del contenitore, è necessario concedere autorizzazioni all'entità servizio per il cluster del servizio Azure Kubernetes per leggere ed eseguire il pull delle immagini. È consigliabile usare il comando az aks create o az aks update per l'integrazione con un registro e assegnare il ruolo appropriato per l'entità servizio. Per i passaggi dettagliati, vedere Eseguire l'autenticazione con Registro Azure Container dal servizio Azure Kubernetes.

Rete

È possibile usare le funzionalità di rete avanzate in cui la rete virtuale e la subnet o gli indirizzi IP pubblici sono in un altro gruppo di risorse. Assegnare il ruolo predefinito Collaboratore rete nella subnet all'interno della rete virtuale. In alternativa, è possibile creare un ruolo personalizzato con autorizzazioni per accedere alle risorse di rete in tale gruppo di risorse. Per altre informazioni, vedere Autorizzazioni del servizio Azure Kubernetes.

Storage

Se è necessario accedere alle risorse disco esistenti in un altro gruppo di risorse, assegnare uno dei set di autorizzazioni di ruolo seguenti:

Istanze di Azure Container

Se si usa Virtual Kubelet per l’integrazione con il servizio Azure Kubernetes e si sceglie di eseguire Istanze di Azure Container nel gruppo di risorse separato dal cluster del servizio Azure Kubernetes, è necessario concedere all'entità servizio del cluster Azure Kubernetes le autorizzazioni da collaboratore per il gruppo di risorse di Istanze di Azure Container.

Altre considerazioni

Quando si usa il servizio Azure Kubernetes e un'entità servizio Microsoft Entra, tenere presente quanto segue:

  • L'entità servizio per Kubernetes fa parte della configurazione del cluster, ma non usa questa identità per distribuire il cluster.
  • Per impostazione predefinita, le credenziali dell'entità servizio sono valide per un anno. È possibile aggiornare o ruotare le credenziali dell'entità servizio in qualsiasi momento.
  • Ogni entità servizio è associata a un'applicazione Microsoft Entra. È possibile associare l'entità servizio per un cluster Kubernetes a qualsiasi nome dell'applicazione Microsoft Entra valido( ad esempio: https://www.contoso.org/example). L'URL per l'applicazione non deve essere necessariamente un endpoint reale.
  • Quando si specifica l'ID client dell'entità servizio, usare il valore di appId.
  • Nelle macchine virtuali del nodo agente nel cluster Kubernetes le credenziali dell'entità servizio vengono archiviate nel file /etc/kubernetes/azure.json.
  • Quando si elimina un cluster del servizio Azure Kubernetes creato usando il comando az aks create, l'entità servizio creata non viene eliminata automaticamente.
    • Per eliminare l'entità servizio, eseguire una query per servicePrincipalProfile.clientId del cluster ed eliminarla usando il comando az ad sp delete. Sostituire i valori per il parametro -g per il nome del gruppo di risorse e -n parametro per il nome del cluster:

      az ad sp delete --id $(az aks show \
        --resource-group myResourceGroup \
        --name myAKSCluster \
        --query servicePrincipalProfile.clientId \
        --output tsv)
      

Risoluzione dei problemi

L'interfaccia della riga di comando di Azure memorizza nella cache le credenziali dell'entità servizio per i cluster del servizio Azure Kubernetes. Se queste credenziali scadono, è possibile che si verifichino errori durante la distribuzione del cluster del servizio Azure Kubernetes. Se si esegue il comando az aks create e si riceve un messaggio di errore simile al seguente, potrebbe indicare un problema con le credenziali dell'entità servizio memorizzate nella cache:

Operation failed with status: 'Bad Request'.
Details: The credentials in ServicePrincipalProfile were invalid. Please see https://aka.ms/aks-sp-help for more details.
(Details: adal: Refresh request failed. Status Code = '401'.

È possibile controllare la data di scadenza delle credenziali dell'entità servizio usando il comando az ad app credential list con la query "[].endDateTime".

az ad app credential list \
    --id <app-id> \
    --query "[].endDateTime" \
    --output tsv

La scadenza predefinita per le credenziali dell'entità servizio è di un anno. Se le credenziali sono precedenti a un anno, è possibile reimpostare le credenziali esistenti o creare una nuova entità servizio.

Risoluzione dei problemi generali dell'interfaccia della riga di comando di Azure

L'interfaccia della riga di comando di Azure può essere eseguita in diversi ambienti della shell, ma con lievi variazioni di formato. Se si hanno risultati imprevisti con i comandi dell'interfaccia della riga di comando di Azure, vedere Come usare correttamente l'interfaccia della riga di comando di Azure.

Passaggi successivi

Per altre informazioni sulle entità servizio Microsoft Entra, vedere oggetti applicazione e entità servizio.

Per informazioni su come aggiornare le credenziali, vedere Aggiornare o ruotare le credenziali per un'entità servizio nel servizio Azure Kubernetes.