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à che non sono disponibili nello strumento da riga di comando kubectl. Per altre informazioni, consultare l'introduzione a kubelogin e l'introduzione a kubectl.

Questo articolo fornisce una panoramica e alcuni esempi su come usare kubelogin per i metodi di autenticazione di Microsoft Entra supportati e consigliati per AKS.

Limitazioni dell'autenticazione Kubelogin in AKS

  • I gruppi creati in Microsoft Entra 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.
  • Il metodo di autenticazione dell'entità servizio funziona solo con l'integrazione gestita di Microsoft Entra ID, non con l'integrazione legacy di Microsoft Entra ID.
  • L'entità servizio può essere membro di un massimo di 200 gruppi di Microsoft Entra . Se sono presenti più di 200 gruppi, è consigliabile usare i ruoli applicazione .
  • 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 invece l'autenticazione interattiva del Web browser.
  • Il metodo di autenticazione dell'interfaccia della riga di comando di Azure funziona solo con Microsoft Entra.

Come funziona l'autenticazione kubelogin in AKS

I cluster AKS che eseguono Kubernetes versione 1.24 o successiva utilizzano automaticamente il formato del plug-in exec kubelogin. I cluster che eseguono versioni di Kubernetes precedenti alla 1.24 richiedono la conversione manuale in questo formato.

Per la maggior parte delle interazioni con kubelogin, usare il convert-kubeconfig sottocomando. 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. Il comportamento della cache dipende dal metodo di autenticazione. L'autenticazione tramite codice del dispositivo, browser Web interattivo e credenziali password del proprietario della risorsa (ROPC) memorizza i record di autenticazione nella directory della cache di kubelogin. Metodi come interfaccia della riga di comando di Azure e Azure Developer CLI usano la cache gestita dal rispettivo strumento della riga di comando anziché quella di kubelogin.

Autenticazione con codice del dispositivo

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

Note

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 Microsoft Entra, che utilizza un flusso On-Behalf-Of (OBO). Quando si esegue il sottocomando convert-kubeconfig, kubelogin rimuove il prefisso spn: dall'attestazione audience.

Parametri per l'autenticazione del codice del dispositivo

La tabella seguente illustra i parametri che è possibile usare con l'autenticazione del codice del dispositivo:

Parametro Description
-l devicecode (facoltativo) Specifica il metodo di autenticazione kubelogin. Questo parametro è facoltativo perché il codice del dispositivo è il metodo predefinito.
--legacy Usa il comportamento precedente per i cluster configurati con l'integrazione precedente di Microsoft Entra ID. Se il file kubeconfig è per un cluster di questo tipo, kubelogin aggiunge automaticamente il --legacy flag.
--cache-dir Esegue l'override del percorso predefinito della directory della cache dei token, ovvero ${HOME}/.kube/cache/kubelogin.

Autenticazione dell’interfaccia della riga di comando di Azure

Il metodo di autenticazione di interfaccia della riga di comando di Azure (comando: -l azurecli) utilizza il contesto di accesso autenticato stabilito da 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é l'interfaccia della riga di comando di Azure li gestisce già.

Parametri per l'autenticazione dell'interfaccia della riga di comando di Azure

La tabella seguente illustra i parametri che è possibile usare con l'autenticazione dell'interfaccia della riga di comando di Azure:

Parametro Description
-l azurecli Specifica il metodo di autenticazione kubelogin.
--azure-config-dir Specifica la directory di configurazione della CLI di Azure. La directory predefinita è ${HOME}/.azure.

Accedere ad Azure

Accedere a Azure usando il az login comando .

az login

Autenticazione interattiva del Web browser

Il metodo di autenticazione interattiva del browser web (comando: -l interactive) apre automaticamente un browser web per autenticare l'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.

Puoi usare un token bearer o un token di conferma del possesso (PoP) con questo metodo di autenticazione.

Parametri per l'autenticazione con bearer token

La tabella seguente illustra i parametri che è possibile usare con l'autenticazione del token di connessione:

Parametro Description
-l interactive Specifica il metodo di autenticazione kubelogin.
--cache-dir Esegue l'override del percorso predefinito della directory della cache dei token, ovvero ${HOME}/.kube/cache/kubelogin.

Parametri per l'autenticazione del token PoP

La tabella seguente illustra i parametri che è possibile usare con l'autenticazione token PoP:

Parametro Description
-l interactive Specifica il metodo di autenticazione kubelogin.
--pop-enabled Abilita l'autenticazione token PoP.
--pop-claims Specifica le attestazioni del token PoP in un formato di coppia chiave-valore. Ad esempio, u=/ARM/ID/OF/CLUSTER.

Autenticazione di un'entità servizio

Il metodo di autenticazione dell'entità servizio (comando: -l spn) utilizza un'entità servizio per autenticare l'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).

Parametri per l'autenticazione dell'entità servizio

La tabella seguente illustra i parametri che è possibile usare con l'autenticazione dell'entità servizio:

Parametro Description
-l spn Specifica il metodo di autenticazione kubelogin.
--client-id ID applicazione (ID client) del principale del servizio.
--client-secret Il segreto client dell'entità servizio.

Autenticazione identità gestita

Usare il metodo di autenticazione dell'identità gestita (comando: -l msi) per le applicazioni che si connettono alle risorse che supportano l'autenticazione di Microsoft Entra. Ad esempio, l'accesso a risorse Azure come una macchina virtuale (VM), set di scalabilità di macchine virtuali o Azure Cloud Shell di Azure.

È possibile usare l'identità gestita predefinita assegnata alla risorsa o un'identità gestita assegnata dall'utente specifica.

Parametri per l'autenticazione dell'identità gestita

La tabella seguente illustra i parametri che è possibile usare con l'autenticazione dell'identità gestita:

Parametro Description
-l msi Specifica il metodo di autenticazione kubelogin.
--client-id L'ID applicazione (ID client) dell'identità gestita assegnata dall'utente. Se non si specifica questo parametro, viene usata l'identità gestita predefinita.

Autenticazione dell'identità del carico di lavoro

Il metodo di autenticazione di Workload Identity (comando: -l workloadidentity) usa le credenziali di identità federate con Microsoft Entra ID per autenticare l'accesso ai cluster AKS. Il metodo usa l'autenticazione integrata di Microsoft Entra. Funziona impostando le variabili di ambiente seguenti:

Variable Description
AZURE_CLIENT_ID L'ID dell'applicazione Microsoft Entra che è federato con l'identità del carico di lavoro.
AZURE_TENANT_ID ID tenant di Microsoft Entra.
AZURE_FEDERATED_TOKEN_FILE Il file che contiene un'asserzione firmata dell'identità del carico di lavoro, come un token JWT di un account di servizio proiettato di Kubernetes.
AZURE_AUTHORITY_HOST URL di base dell'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 Argo CD senza archiviare le credenziali dell'entità servizio nei sistemi esterni. Per configurare la federazione OIDC (OpenID Connect) da GitHub, consultare l'esempio di federazione OIDC .

Parametri per l'autenticazione dell'identità associata a un carico di lavoro

La tabella seguente illustra i parametri che è possibile usare con l'autenticazione dell'identità del carico di lavoro:

Parametro Description
-l workloadidentity Specifica il metodo di autenticazione kubelogin.

Autenticazione di Azure Developer CLI

Il metodo di autenticazione di Azure Developer CLI (comando: -l azd) usa il contesto di accesso stabilito da Azure Developer CLI per ottenere il token di accesso. Il token viene emesso nello stesso tenant di Microsoft Entra di azd auth login. kubelogin non scrive i token nella cache dei token perché l'interfaccia della riga di comando di Azure developer li gestisce.

Questo metodo di autenticazione funziona solo con Microsoft Entra gestito in AKS. Per altre informazioni, vedere la panoramica dell'interfaccia della riga di comando per sviluppatori di Azure.

Autenticazione di Azure Pipelines

Il metodo di autenticazione Azure Pipelines (comando: -l azurepipelines) usa una connessione al servizio Azure Resource Manager e il token di accesso al sistema della pipeline per l'autenticazione. Questo metodo funziona solo in Azure Pipelines. La pipeline deve avere una connessione al servizio Azure Resource Manager e consentire agli script di accedere al token OAuth.

Quando si usa un'attività AzureCLI@2 con una connessione al servizio Azure Resource Manager, kubelogin può usare l'ID tenant, l'ID client e l'ID connessione al servizio forniti Azure Pipelines come variabili di ambiente. Per altre informazioni, vedi connessioni di servizio di Azure Pipelines.

Avvertimento

kubelogin supporta anche il metodo di autenticazione ROPC (Resource Owner Password Credential). Microsoft consiglia di non usare ROPC perché non è compatibile con l'autenticazione a più fattori e alcuni scenari di identità ibrida. Per altre informazioni, vedere le linee guida Microsoft Identity Platform ROPC.

Esportare il percorso del file kubeconfig

Prima di eseguire il convert-kubeconfig sottocomando, esportare il percorso del file kubeconfig nella KUBECONFIG variabile di ambiente. Per esempio:

export KUBECONFIG=/path/to/kubeconfig

Convertire il file kubeconfig

Eseguire il convert-kubeconfig sottocomando per convertire il file kubeconfig per usare il plug-in exec per il metodo di autenticazione scelto.

kubelogin convert-kubeconfig
kubelogin convert-kubeconfig -l azurecli
# Bearer token authentication
kubelogin convert-kubeconfig -l interactive

# Proof-of-Possession (PoP) token authentication
kubelogin convert-kubeconfig -l interactive --pop-enabled --pop-claims "u=/ARM/ID/OF/CLUSTER"
  1. Eseguire il convert-kubeconfig sottocomando per convertire il file kubeconfig per usare il plug-in exec.

    kubelogin convert-kubeconfig -l spn
    
  2. Impostare le variabili di ambiente per l'ID client e il segreto client o il certificato client. Per esempio:

    export AZURE_CLIENT_ID=<service-principal-client-id>
    export AZURE_CLIENT_SECRET=<service-principal-client-secret>
    
# Default managed identity authentication
kubelogin convert-kubeconfig -l msi

# Specific managed identity authentication
kubelogin convert-kubeconfig -l msi --client-id <managed-identity-client-id>
kubelogin convert-kubeconfig -l workloadidentity

Convertire il file kubeconfig usando l'interfaccia della riga di comando di Azure Developer

  1. Accedere usando l'interfaccia della riga di comando per sviluppatori di Azure.

    azd auth login
    
  2. Convertire il file kubeconfig per usare il metodo di autenticazione dell'interfaccia della riga di comando per sviluppatori Azure.

    kubelogin convert-kubeconfig -l azd
    

Convertire il file kubeconfig in Azure Pipelines

In un'attività AzureCLI@2 che usa una connessione del servizio Azure Resource Manager, converti il file kubeconfig in modo che usi l'autenticazione di Azure Pipelines.

kubelogin convert-kubeconfig -l azurepipelines

Rimuovere i token memorizzati nella cache

Rimuovere i token memorizzati nella cache usando il kubelogin remove-cache-dir comando .

kubelogin remove-cache-dir

Ottenere informazioni sul nodo

Ottenere informazioni sui nodi usando il kubectl get comando .

kubectl get nodes

Come usare gli ID applicazione di kubelogin con AKS

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

Application ID applicazione (GUID) Campo di utilizzo
Applicazione server AKS (--server-id) 6dae42f8-4368-4678-94ff-3960e28e3630 Destinatario del token per tutti i metodi di autenticazione kubelogin supportati quando si accede ad AKS.
Applicazione client pubblica di AKS (--client-id) 80faf920-1908-4b52-b5ef-a8e7bedfc67a Codice del dispositivo, web browser interattivo e autenticazione ROPC.

Quando chiami kubelogin get-token direttamente per AKS, specifica l'ID dell'applicazione server di AKS con --server-id. Per i parametri specifici della modalità, vedere le informazioni di riferimento su kubeloginget-token.

Note

L'ID applicazione client pubblico del servizio Azure Kubernetes in questa sezione è il valore --client-id per l'autenticazione tramite codice dispositivo, interattiva tramite browser Web e ROPC. Per l'autenticazione con entità servizio e identità gestita, --client-id identifica invece l'entità servizio o l'identità gestita assegnata dall'utente.

Ad esempio, ottieni un token usando l'autenticazione tramite codice del dispositivo e gli ID applicazione di AKS:

kubelogin get-token \
    --login devicecode \
    --server-id 6dae42f8-4368-4678-94ff-3960e28e3630 \
    --client-id 80faf920-1908-4b52-b5ef-a8e7bedfc67a \
    --tenant-id <microsoft-entra-tenant-id>