Usare kubelogin per autenticare gli utenti nel servizio Azure Kubernetes

Il plug-in kubelogin in Azure è un plugin di credenziali client-go che implementa l'autenticazione di Microsoft Entra. Il plug-in kubelogin offre funzionalità non disponibili nello strumento da riga di comando kubectl.

I cluster del servizio Azure Kubernetes integrati con Microsoft Entra ID e che eseguono Kubernetes versione 1.24 o successiva usano automaticamente il formato kubelogin.

Questo articolo offre una panoramica ed esempi di come usare kubelogin per tutti i metodi di autenticazione di Microsoft Entra supportati nel servizio Azure Kubernetes.

Limiti

  • È possibile includere un massimo di 200 gruppi in un'attestazione JWT (Microsoft Entra JSON Web Token). Se sono presenti più di 200 gruppi, è consigliabile usare i ruoli applicazione .
  • I gruppi creati in Microsoft Entra ID sono inclusi solo dal valore ObjectID e non dal nome visualizzato. Il comando sAMAccountName è disponibile solo per i gruppi sincronizzati da Windows Server Active Directory locale.
  • Nel servizio Azure Kubernetes il metodo di autenticazione dell'entità servizio funziona solo con l'ID Microsoft Entra gestito e non con la versione precedente di Azure Active Directory.
  • Il metodo di autenticazione del codice del dispositivo non funziona quando i criteri di accesso condizionale di Microsoft Entra vengono impostati in un tenant di Microsoft Entra. In questo scenario, usare l'autenticazione interattiva del Web browser.

Funzionamento dell'autenticazione

Per la maggior parte delle interazioni con kubelogin, usare il sottocomando convert-kubeconfig. Il sottocomando usa il file kubeconfig specificato in --kubeconfig o nella KUBECONFIG variabile di ambiente per convertire il file kubeconfig finale in formato exec in base al metodo di autenticazione specificato.

I metodi di autenticazione implementati da kubelogin sono i flussi di token grant Microsoft Entra OAuth 2.0. I flag di parametri seguenti sono comuni da usare nei sottocomandi kubelogin. In generale, questi flag sono pronti per l'uso quando si ottiene il file kubeconfig dal servizio Azure Kubernetes.

  • --tenant-id: ID tenant di Microsoft Entra.
  • --client-id: ID applicazione dell'applicazione client pubblica. Questa app client viene usata solo nel codice del dispositivo, nel Web browser interattivo e nei metodi di accesso di OAuth 2.0 Resource Owner Password Credentials (ROPC) (identità del flusso di lavoro).
  • --server-id: ID applicazione dell'app Web o del server di risorse. Il token viene rilasciato a questa risorsa.

Nota

In ogni metodo di autenticazione il token non viene memorizzato nella cache nel file system.

Metodi di autenticazione

Le sezioni successive descrivono i metodi di autenticazione supportati e come usarli:

  • Codice del dispositivo
  • Interfaccia della riga di comando di Azure
  • Web browser interattivo
  • Entità servizio
  • Identità gestita
  • Identità del carico di lavoro

Codice del dispositivo

Il codice del dispositivo è il metodo di autenticazione predefinito per il sottocomando convert-kubeconfig. -l devicecode è facoltativo. Questo metodo di autenticazione richiede all'utente di accedere da una sessione del browser al codice del dispositivo.

Prima dell'introduzione dei plug-in kubelogin ed exec, il metodo di autenticazione di Azure in kubectl supportava solo il flusso del codice del dispositivo. È stata usata una versione precedente di una libreria che produce un token con l'attestazione audience con un prefisso spn:. Non è compatibile con l'ID Microsoft Entra gestito del servizio Azure Kubernetes, che usa un flusso OBO (On-Behalf-of). Quando si esegue il sottocomando convert-kubeconfig, kubelogin rimuove il prefisso spn: dall'attestazione audience.

Se i requisiti includono l'uso delle funzionalità delle versioni precedenti, aggiungere l'argomento --legacy. Se si usa il file kubeconfig in una versione precedente del cluster di Azure Active Directory, kubelogin aggiunge automaticamente il flag --legacy.

In questo metodo di accesso, il token di accesso e il token di aggiornamento vengono memorizzati nella cache nella directory ${HOME}/.kube/cache/kubelogin. Per eseguire l'override di questo percorso, includere il parametro --token-cache-dir.

Se il cluster integrato di Microsoft Entra del servizio Azure Kubernetes usa Kubernetes 1.24 o versioni precedenti, è necessario convertire manualmente il formato di file kubeconfig eseguendo i comandi seguenti:

export KUBECONFIG=/path/to/kubeconfig
kubelogin convert-kubeconfig

Eseguire questo comando kubectl per ottenere informazioni sul nodo:

kubectl get nodes

Per pulire i token memorizzati nella cache, eseguire il comando seguente:

kubelogin remove-tokens

Nota

Il metodo di accesso al codice del dispositivo non funziona quando un criterio di accesso condizionale è configurato in un tenant di Microsoft Entra. In questo scenario, usare il metodo interattivo del Web browser .

Interfaccia della riga di comando di Azure

Il metodo di autenticazione dell'interfaccia della riga di comando di Azure usa il contesto connesso stabilito dall'interfaccia della riga di comando di Azure per ottenere il token di accesso. Il token viene emesso nello stesso tenant di Microsoft Entra di az login. kubelogin non scrive i token nel file della cache dei token perché sono già gestiti dall'interfaccia della riga di comando di Azure.

Nota

Questo metodo di autenticazione funziona solo con l'ID Microsoft Entra gestito dal servizio Azure Kubernetes.

L'esempio seguente illustra come usare il metodo dell'interfaccia della riga di comando di Azure per l'autenticazione:

az login

export KUBECONFIG=/path/to/kubeconfig

kubelogin convert-kubeconfig -l azurecli

Eseguire questo comando kubectl per ottenere informazioni sul nodo:

kubectl get nodes

Se la directory di configurazione dell'interfaccia della riga di comando di Azure si trova all'esterno della directory ${HOME}, usare il parametro --azure-config-dir con il sottocomando convert-kubeconfig. Il comando genera il file kubeconfig con la variabile di ambiente configurata. È possibile ottenere la stessa configurazione impostando la AZURE_CONFIG_DIR variabile di ambiente su questa directory quando si esegue un comando kubectl.

Web browser interattivo

Il metodo interattivo del Web browser per l'autenticazione apre automaticamente un Web browser per accedere all'utente. Dopo l'autenticazione dell'utente, il browser reindirizza al server Web locale usando le credenziali verificate. Questo metodo di autenticazione è conforme ai criteri di accesso condizionale.

Quando si esegue l'autenticazione usando questo metodo, il token di accesso viene memorizzato nella cache nella directory ${HOME}/.kube/cache/kubelogin. È possibile eseguire l'override di questo percorso usando il parametro --token-cache-dir.

Token di connessione

L'esempio seguente illustra come usare un token di connessione con il flusso interattivo del Web browser:

export KUBECONFIG=/path/to/kubeconfig

kubelogin convert-kubeconfig -l interactive

Eseguire questo comando kubectl per ottenere informazioni sul nodo:

kubectl get nodes

Token di verifica del possesso

L'esempio seguente illustra come usare un token PoP (Proof-of-Possession) con il flusso interattivo del Web browser:

export KUBECONFIG=/path/to/kubeconfig

kubelogin convert-kubeconfig -l interactive --pop-enabled --pop-claims "u=/ARM/ID/OF/CLUSTER"

Eseguire questo comando kubectl per ottenere informazioni sul nodo:

kubectl get nodes

Entità servizio

Questo metodo di autenticazione usa un'entità servizio per accedere all'utente. È possibile fornire le credenziali impostando una variabile di ambiente o usando le credenziali in un argomento della riga di comando. Le credenziali supportate che è possibile usare sono una password o un certificato client PFX (Personal Information Exchange).

Prima di usare questo metodo, considerare le limitazioni seguenti:

  • Questo metodo funziona solo con l'ID Microsoft Entra gestito.
  • L'entità servizio può essere membro di un massimo di 200 gruppi di Microsoft Entra .

Variabili di ambiente

L'esempio seguente illustra come configurare un segreto client usando le variabili di ambiente:

export KUBECONFIG=/path/to/kubeconfig

kubelogin convert-kubeconfig -l spn

export AAD_SERVICE_PRINCIPAL_CLIENT_ID=<Service Principal Name (SPN) client ID>
export AAD_SERVICE_PRINCIPAL_CLIENT_SECRET=<SPN secret>

Eseguire questo comando kubectl per ottenere informazioni sul nodo:

kubectl get nodes

Eseguire quindi questo comando:

export KUBECONFIG=/path/to/kubeconfig

kubelogin convert-kubeconfig -l spn

export AZURE_CLIENT_ID=<SPN client ID>
export AZURE_CLIENT_SECRET=<SPN secret>

Eseguire questo comando kubectl per ottenere informazioni sul nodo:

kubectl get nodes

Argomento della riga di comando

L'esempio seguente illustra come configurare un segreto client in un argomento della riga di comando:

export KUBECONFIG=/path/to/kubeconfig

kubelogin convert-kubeconfig -l spn --client-id <SPN client ID> --client-secret <SPN client secret>

Eseguire questo comando kubectl per ottenere informazioni sul nodo:

kubectl get nodes

Avviso

Il metodo dell'argomento della riga di comando archivia il segreto nel file kubeconfig.

Certificato client

L'esempio seguente illustra come configurare un segreto client usando un certificato client:

export KUBECONFIG=/path/to/kubeconfig

kubelogin convert-kubeconfig -l spn

export AAD_SERVICE_PRINCIPAL_CLIENT_ID=<SPN client ID>
export AAD_SERVICE_PRINCIPAL_CLIENT_CERTIFICATE=/path/to/cert.pfx
export AAD_SERVICE_PRINCIPAL_CLIENT_CERTIFICATE_PASSWORD=<PFX password>

Eseguire questo comando kubectl per ottenere informazioni sul nodo:

kubectl get nodes

Eseguire quindi questo comando:

export KUBECONFIG=/path/to/kubeconfig

kubelogin convert-kubeconfig -l spn

export AZURE_CLIENT_ID=<SPN client ID>
export AZURE_CLIENT_CERTIFICATE_PATH=/path/to/cert.pfx
export AZURE_CLIENT_CERTIFICATE_PASSWORD=<PFX password>

Eseguire questo comando kubectl per ottenere informazioni sul nodo:

kubectl get nodes

Token poP e variabili di ambiente

L'esempio seguente illustra come configurare un token PoP che usa un segreto client ottenuto dalle variabili di ambiente:

export KUBECONFIG=/path/to/kubeconfig

kubelogin convert-kubeconfig -l spn --pop-enabled --pop-claims "u=/ARM/ID/OF/CLUSTER"

export AAD_SERVICE_PRINCIPAL_CLIENT_ID=<SPN client ID>
export AAD_SERVICE_PRINCIPAL_CLIENT_SECRET=<SPN secret>

Eseguire questo comando kubectl per ottenere informazioni sul nodo:

kubectl get nodes

Identità gestita

Usare il metodo di autenticazione dell'identità gestita per le applicazioni che si connettono alle risorse che supportano l'autenticazione di Microsoft Entra. Ad esempio, l'accesso alle risorse di Azure, ad esempio una macchina virtuale, un set di scalabilità di macchine virtuali o Azure Cloud Shell.

Identità gestita predefinita

L'esempio seguente illustra come usare l'identità gestita predefinita:

export KUBECONFIG=/path/to/kubeconfig

kubelogin convert-kubeconfig -l msi

Eseguire questo comando kubectl per ottenere informazioni sul nodo:

kubectl get nodes

Identità specifica

L'esempio seguente illustra come usare un'identità gestita con un'identità specifica:

export KUBECONFIG=/path/to/kubeconfig

kubelogin convert-kubeconfig -l msi --client-id <msi-client-id>

Eseguire questo comando kubectl per ottenere informazioni sul nodo:

kubectl get nodes

Identità del carico di lavoro

Il metodo di autenticazione dell'identità del carico di lavoro usa le credenziali di identità federate con Microsoft Entra per autenticare l'accesso ai cluster del servizio Azure Kubernetes. Il metodo usa l'autenticazione integrata di Microsoft Entra. Funziona impostando le variabili di ambiente seguenti:

  • AZURE_CLIENT_ID: ID applicazione Microsoft Entra federato con l'identità del carico di lavoro.
  • AZURE_TENANT_ID: ID tenant di Microsoft Entra.
  • AZURE_FEDERATED_TOKEN_FILE: file che contiene un'asserzione firmata dell'identità del carico di lavoro, ad esempio un token JWT (ProjectEd Service Account) di Kubernetes.
  • AZURE_AUTHORITY_HOST: URL di base di un'autorità Microsoft Entra. Ad esempio, https://login.microsoftonline.com/.

È possibile usare un'identità del carico di lavoro per accedere ai cluster Kubernetes da sistemi CI/CD come GitHub o ArgoCD senza archiviare le credenziali dell'entità servizio nei sistemi esterni. Per configurare la federazione OIDC (OpenID Connect) da GitHub, vedere l'esempio di federazione OIDC .

L'esempio seguente illustra come usare un'identità del carico di lavoro:

export KUBECONFIG=/path/to/kubeconfig

kubelogin convert-kubeconfig -l workloadidentity

Eseguire questo comando kubectl per ottenere informazioni sul nodo:

kubectl get nodes

Come usare kubelogin con il servizio Azure Kubernetes

Il servizio Azure Kubernetes usa una coppia di applicazioni Microsoft Entra di prima parte. Questi ID applicazione sono gli stessi in tutti gli ambienti.

L'ID applicazione del server Microsoft Entra del servizio Azure Kubernetes usato dal lato server è 6dae42f8-4368-4678-94ff-3960e28e3630. Il token di accesso che accede ai cluster del servizio Azure Kubernetes deve essere rilasciato per questa applicazione. Nella maggior parte dei metodi di autenticazione kubelogin è necessario usare --server-id con kubelogin get-token.

L'ID applicazione client Microsoft Entra del servizio Azure Kubernetes usato da kubelogin per eseguire l'autenticazione client pubblica per conto dell'utente è 80faf920-1908-4b52-b5ef-a8e7bedfc67a. L'ID applicazione client viene usato nel codice del dispositivo e nei metodi di autenticazione interattiva del Web browser.