Usare ID dei carichi di lavoro di Microsoft Entra con il servizio Azure Kubernetes

I carichi di lavoro distribuiti in un cluster del servizio Azure Kubernetes richiedono le credenziali dell'applicazione Microsoft Entra o le identità gestite per accedere alle risorse protette di Microsoft Entra, ad esempio Azure Key Vault e Microsoft Graph. L'ID del carico di lavoro Di Microsoft Entra si integra con le funzionalità native di Kubernetes per la federazione con provider di identità esterne, consentendo di assegnare identità del carico di lavoro ai carichi di lavoro per autenticare e accedere ad altri servizi e risorse.

Note

Workload ID copre lo scenario di identità da pod ad Azure in AKS, ovvero come le applicazioni in esecuzione nei pod si autenticano ai servizi protetti da Microsoft Entra. Per gli altri scenari di identità (autenticazione e autorizzazione del piano di controllo e identità gestite dal cluster ad Azure), vedere Opzioni di accesso e identità per AKS.

Il ID dei carichi di lavoro di Microsoft Entra usa la proiezione del volume dei token degli account di servizio (o un account di servizio) per consentire ai pod di usare un'identità Kubernetes. Viene emesso un token Kubernetes e la federazione OIDC (OpenID Connect) consente alle applicazioni Kubernetes di accedere in modo sicuro alle risorse di Azure utilizzando l'ID Microsoft Entra, basandosi su account di servizio annotati.

È possibile usare ID dei carichi di lavoro di Microsoft Entra con le librerie client di Identità di Azure o la raccolta Libreria di Autenticazione Microsoft (MSAL), insieme alla registrazione dell'applicazione, per autenticare e accedere facilmente alle risorse cloud di Azure.

Note

È possibile usare Connettore di servizi per configurare automaticamente alcuni passaggi. Per altre informazioni, vedere Che cos'è Service Connector?

Prerequisiti

  • Il servizio Azure Kubernetes supporta il ID dei carichi di lavoro di Microsoft Entra nella versione 1.22 e successiva.
  • Interfaccia della riga di comando di Azure versione 2.47.0 o successiva. Eseguire az --version per trovare la versione ed eseguire az upgrade per aggiornare la versione. Se è necessario eseguire l'installazione o l'aggiornamento, vedere Installare l'interfaccia della riga di comando di Azure.

Limitazioni

  • È possibile disporre di un massimo di 20 credenziali di identità federate per ogni identità gestita.
  • La propagazione delle credenziali dell'identità federata dopo l'aggiunta iniziale richiede alcuni secondi.
  • Il componente aggiuntivo nodi virtuali , basato sul progetto open source Virtual Kubelet, non è supportato.
  • La creazione di credenziali di identità federate non è supportata nelle identità gestite assegnate dall'utente in queste aree.

Librerie client di Identità di Azure

Nelle librerie client di Identità di Azure scegliere uno degli approcci seguenti:

  • Usare DefaultAzureCredential, che tenta di usare WorkloadIdentityCredential.
  • Creare un'istanza ChainedTokenCredential che include WorkloadIdentityCredential.
  • Usare WorkloadIdentityCredential direttamente.

Quando si richiedono token con WorkloadIdentityCredential, passare gli scope usando il formato <resource>/.default di Microsoft Entra ID v2, ad esempio https://management.azure.com/.default. Un URI di risorsa non elaborato, ad esempio https://management.azure.com/, può avere esito negativo perché l'identità del carico di lavoro usa l'endpoint del token Microsoft Entra v2 anziché il flusso IMDS resource usato dall'identità gestita. Per altre informazioni sul funzionamento degli ambiti nell'endpoint del token v2, vedere Ottenere un token.

La tabella seguente fornisce la versione minima del pacchetto necessaria per ogni libreria client dell'ecosistema linguistico:

Ecosistema Libreria Versione minima
.NET Azure.Identity 1.9.0
C++ azure-identity-cpp 1.6.0
Go azidentity 1.3.0
Java azure-identity 1.9.0
Node.js @azure/identity 3.2.0
Python azure-identity 1.13.0

Esempi di codice della libreria client di Identità di Azure

Gli esempi di codice seguenti usano .DefaultAzureCredential Questo tipo di credenziale utilizza le variabili d'ambiente iniettate dal webhook di mutazione dell'identità del carico di lavoro per autenticarsi con Azure Key Vault. Per visualizzare gli esempi che usano uno degli altri approcci, vedere le librerie client specifiche dell'ecosistema.

using Azure.Identity;
using Azure.Security.KeyVault.Secrets;

string keyVaultUrl = Environment.GetEnvironmentVariable("<key-vault-url>");
string secretName = Environment.GetEnvironmentVariable("<secret-name>");

var client = new SecretClient(
    new Uri(keyVaultUrl),
    new DefaultAzureCredential());

KeyVaultSecret secret = await client.GetSecretAsync(secretName);

Libreria di Autenticazione Microsoft (MSAL)

Le librerie client seguenti sono la versione minima necessaria:

Ecosistema Libreria Immagine Esempio Dispone di Windows
.NET Microsoft Libreria di Autenticazione per .NET ghcr.io/azure/azure-workload-identity/msal-net:latest Collegamento
Go Libreria di Autenticazione Microsoft for Go ghcr.io/azure/azure-workload-identity/msal-go:latest Collegamento
Java Libreria di Autenticazione Microsoft-for-java ghcr.io/azure/azure-workload-identity/msal-java:latest Collegamento No
JavaScript Libreria di Autenticazione Microsoft-for-js ghcr.io/azure/azure-workload-identity/msal-node:latest Collegamento No
Python Libreria di Autenticazione Microsoft-for-python ghcr.io/azure/azure-workload-identity/msal-python:latest Collegamento No

Funzionamento

In questo modello di sicurezza il cluster del servizio Azure Kubernetes funge da emittente del token. Microsoft Entra ID usa OIDC per individuare le chiavi di firma pubbliche e verificare l'autenticità del token dell'account del servizio prima di scambiarlo per un token Microsoft Entra. Il carico di lavoro può scambiare un token dell'account del servizio iniettato nel suo volume per un token Microsoft Entra utilizzando la libreria client di Identità di Azure o MSAL (Microsoft Authentication Library).

Diagramma del modello di sicurezza del ID dei carichi di lavoro di Microsoft Entra di AKS.

La tabella seguente descrive gli endpoint dell'autorità emittente OIDC necessari per il ID dei carichi di lavoro di Microsoft Entra:

Endpoint Descrizione
{IssuerURL}/.well-known/openid-configuration Noto anche come documento di individuazione OIDC. Contiene i metadati relativi alle configurazioni dell'autorità emittente.
{IssuerURL}/openid/v1/jwks Contiene le chiavi di firma pubbliche usate da Microsoft Entra ID per verificare l'autenticità del token dell'account del servizio.

Il diagramma seguente riepiloga la sequenza di autenticazione usando OIDC:

Diagramma della sequenza di autenticazione OIDC di ID dei carichi di lavoro di Microsoft Entra di AKS.

Rotazione automatica del certificato di webhook

Analogamente ad altri componenti aggiuntivi webhook, l'operazione di rotazione automatica del certificato del cluster ruota il certificato.

Etichette e annotazioni dell'account del servizio

ID dei carichi di lavoro di Microsoft Entra supporta i mapping seguenti correlati a un account del servizio:

  • Uno-a-uno, in cui un account di servizio fa riferimento a un oggetto Microsoft Entra.
  • Molti-a-uno, in cui più account di servizio fanno riferimento allo stesso oggetto Microsoft Entra.
  • Uno-a-molti, in cui un account di servizio fa riferimento a più oggetti Microsoft Entra modificando l'annotazione dell'ID del client. Per altre informazioni, vedere Come eseguire la federazione di più identità con un account del servizio Kubernetes.

Note

Quando si aggiornano le annotazioni dell'account di servizio, è necessario riavviare il pod affinché le modifiche abbiano effetto.

Se è stata usata l’identità gestita da pod di Microsoft Entra, si consideri un account del servizio come un'entità di sicurezza di Azure, a meno che un account del servizio faccia parte dell'API Kubernetes di base, anziché una definizione di risorsa personalizzata (CRD). Le sezioni seguenti descrivono un elenco di etichette e annotazioni disponibili che è possibile usare per configurare il comportamento durante lo scambio del token dell'account del servizio per un token di accesso Microsoft Entra.

Annotazioni dell'account del servizio

Tutte le annotazioni sono facoltative. Se l'annotazione non viene specificata, viene usato il valore predefinito.

Annotazione Descrizione Predefinito
azure.workload.identity/client-id Rappresenta l'applicazione Microsoft Entra
ID client da usare con il pod.
azure.workload.identity/tenant-id Rappresenta l'ID tenant di Azure in cui
l'applicazione Microsoft Entra è registrata.
Variabile di ambiente AZURE_TENANT_ID estratta
da ConfigMap azure-wi-webhook-config.
azure.workload.identity/service-account-token-expiration Rappresenta il campo expirationSeconds per il token dell'account del servizio proiettato. Si tratta di un campo facoltativo configurato per evitare tempi di inattività causati da errori durante l'aggiornamento del token dell'account del servizio. La scadenza del token dell'account del servizio Kubernetes non è correlata ai token di Microsoft Entra. I token di Microsoft Entra scadono entro 24 ore dall'emissione. 3600
L'intervallo supportato è 3600-86400.

Etichette dei pod

Note

Per le applicazioni che usano ID dei carichi di lavoro di Microsoft Entra, è necessario aggiungere l'etichetta azure.workload.identity/use: "true" alla specifica del pod per AKS per spostare l'identità del workload in uno scenario di Fail Close per fornire un comportamento coerente e affidabile per i pod che devono usare l'identità del carico di lavoro. Altrimenti, i pod falliscono quando vengono riavviati.

Etichetta Descrizione Valore consigliato Obbligatoria
azure.workload.identity/use Questa etichetta è necessaria nella specifica del modello di pod. Solo i pod con questa etichetta vengono modificati dal webhook azure-workload-identity che modifica l'ammissione per inserire le variabili di ambiente specifiche di Azure e il volume del token dell'account del servizio proiettato. true

Annotazioni dei pod

Tutte le annotazioni sono facoltative. Se l'annotazione non viene specificata, viene usato il valore predefinito.

Annotazione Descrizione Predefinito
azure.workload.identity/service-account-token-expiration Per informazioni dettagliate, vedere Annotazioni dell'account di servizio. Le annotazioni dei pod hanno la precedenza sulle annotazioni dell'account di servizio. 3600
L'intervallo supportato è 3600-86400.
azure.workload.identity/skip-containers Rappresenta un elenco delimitato da punti e virgola dei contenitori per ignorare l'aggiunta del volume di token dell'account del servizio proiettato. Ad esempio, container1;container2. Per impostazione predefinita, il volume del token dell'account del servizio proiettato viene aggiunto a tutti i contenitori se il pod è etichettato con azure.workload.identity/use: true.
azure.workload.identity/inject-proxy-sidecar Inserisce un contenitore init proxy e un sidecar proxy nel pod. Il sidecar proxy viene usato per intercettare le richieste di token a IMDS e acquisire un token Microsoft Entra per conto dell'utente con credenziali di identità federate. falso
azure.workload.identity/proxy-sidecar-port Rappresenta la porta del sidecar proxy. 8000

Usare le associazioni delle identità e la federazione diretta nello stesso carico di lavoro

Un token di account di servizio proiettato ha un solo destinatario. Quando le associazioni di identità sono abilitate, il webhook di associazione di identità imposta il token predefinito a cui AZURE_FEDERATED_TOKEN_FILE fa riferimento il gruppo di destinatari api://AKSIdentityBinding, usato dal proxy di associazione di identità.

La federazione diretta ID dei carichi di lavoro di Microsoft Entra (senza associazioni di identità) richiede un token con il gruppo di destinatari api://AzureADTokenExchange. Il riutilizzo del file del token di associazione di identità per la federazione diretta ha esito negativo perché AADSTS700212 il gruppo di destinatari delle credenziali delle identità federate non corrisponde al gruppo di destinatari del token.

Per usare le associazioni di identità per un'identità gestita e la federazione diretta per un'altra nello stesso carico di lavoro, proiettare un secondo token dell'account del servizio con il api://AzureADTokenExchange gruppo di destinatari e puntare il codice federativo diretto in tale file:

apiVersion: v1
kind: Pod
metadata:
  name: workload-with-ib-and-direct-fic
  labels:
    azure.workload.identity/use: "true"
spec:
  serviceAccountName: workload-sa
  containers:
  - name: app
    image: <image>
    volumeMounts:
    - name: direct-fic-token
      mountPath: /var/run/secrets/direct-fic
      readOnly: true
    env:
    - name: DIRECT_FIC_TOKEN_FILE
      value: /var/run/secrets/direct-fic/token
  volumes:
  - name: direct-fic-token
    projected:
      sources:
      - serviceAccountToken:
          path: token
          audience: api://AzureADTokenExchange
          expirationSeconds: 3600

Usare AZURE_FEDERATED_TOKEN_FILE per il flusso di associazione di identità e il file di token personalizzato, ad esempio DIRECT_FIC_TOKEN_FILE, per il flusso diretto delle credenziali delle identità federate.

Eseguire la migrazione a ID dei carichi di lavoro di Microsoft Entra

È possibile configurare i cluster che eseguono già un'identità gestita da pod per usare l'ID del carico di lavoro Microsoft Entra usando uno dei due modi seguenti:

  • Usare la stessa configurazione implementata per l'identità gestita da pod. È possibile annotare l'account del servizio all'interno dello spazio dei nomi con l'identità per abilitare ID dei carichi di lavoro di Microsoft Entra e inserire le annotazioni nei pod.
  • Riscrivere l'applicazione per usare la versione più recente della libreria client di Identità di Azure.

Per facilitare e ottimizzare il processo di migrazione, abbiamo sviluppato uno strumento di supporto che converte le transazioni del servizio di metadati delle istanze (IMDS) effettuate dall'applicazione in OIDC. Il sidecar di migrazione non è progettato per essere una soluzione a lungo termine, ma è un modo per iniziare rapidamente a usare il ID dei carichi di lavoro di Microsoft Entra. L'esecuzione del sidecar di migrazione all'interno del proxy dell'applicazione esegue le transazioni IMDS dell'applicazione in OIDC. L'approccio alternativo consiste nell'eseguire l'aggiornamento a una versione supportata della libreria client di Azure Identity, che supporta l'autenticazione OIDC.

La tabella seguente riepiloga le raccomandazioni relative alla migrazione o alla distribuzione per il cluster del servizio Azure Kubernetes:

Scenario Descrizione
La distribuzione di cluster nuova o esistente esegue una versione supportata della libreria client di Identità di Azure Non sono necessari passaggi di migrazione.
Risorse di distribuzione di esempio: distribuire e configurare l'ID del carico di lavoro Microsoft Entra in un nuovo cluster
La distribuzione di cluster nuova o esistente esegue una versione non supportata della libreria client di Identità di Azure Aggiornare l'immagine del contenitore per usare una versione supportata di Azure Identity SDK o usare il sidecar di migrazione.

Passaggi successivi