Condividi tramite


Distribuire e configurare la federazione delle identità del carico di lavoro in Kubernetes abilitato per Azure Arc (anteprima)

È possibile abilitare la funzionalità di identità del carico di lavoro in un cluster Kubernetes abilitato per Azure Arc usando l'interfaccia della riga di comando di Azure. Il processo segue questi passaggi generali:

  1. Abilitare la funzionalità di identità del carico di lavoro in un cluster Kubernetes nuovo o esistente abilitato per Arc.
  2. Creare un'identità gestita (o una registrazione dell'app) e un account del servizio Kubernetes.
  3. Configurare l'identità gestita per la federazione dei token.
  4. Configurare le annotazioni dell'account del servizio e le etichette dei pod dell'applicazione per l'uso dell'identità del carico di lavoro.
  5. Configurare le impostazioni di identità del carico di lavoro nel cluster Kubernetes.
  6. Disabilitare l'identità del carico di lavoro nel cluster.

Per una panoramica di questa funzionalità, vedere Federazione delle identità del carico di lavoro in Kubernetes abilitato per Azure Arc (anteprima).

Importante

La funzionalità di federazione dell'identità del carico di lavoro di Azure Arc è attualmente disponibile in ANTEPRIMA. Vedere le condizioni per l'utilizzo supplementari per le anteprime di Microsoft Azure per termini legali aggiuntivi che si applicano a funzionalità di Azure in versione beta, in anteprima o in altro modo non ancora disponibili a livello generale.

Suggerimento

Questo articolo descrive i passaggi necessari per distribuire e configurare l'identità del carico di lavoro in un cluster Kubernetes abilitato per Arc. Per informazioni su come abilitare l'identità del carico di lavoro in altri tipi di cluster, vedere gli articoli seguenti:

Prerequisiti

  • L'identità del carico di lavoro per i cluster Kubernetes abilitati per Azure Arc (anteprima) è supportata nelle distribuzioni Kubernetes seguenti:
    • Cluster Ubuntu Linux che esegue K3s
    • Servizio Azure Kubernetes in Edge Essentials
    • Servizio Azure Kubernetes in HCI 23H2

Per usare la funzionalità di identità del carico di lavoro, è necessario avere l'interfaccia della riga di comando di Azure versione 2.64 o successiva e az connectedk8s la versione 1.10.0 o successiva. Assicurarsi di aggiornare la versione dell'interfaccia della riga di comando di Azure prima di aggiornare la az connectedk8s versione. Se si usa Azure Cloud Shell, verrà installata la versione più recente dell'interfaccia della riga di comando di Azure.

Abilitare l'identità del carico di lavoro nel cluster

Seguire i passaggi appropriati per abilitare la funzionalità di identità del carico di lavoro per un nuovo cluster Kubernetes abilitato per Arc o per uno esistente. In entrambi i casi, assicurarsi di sostituire il nome e il gruppo di risorse con i valori e configurare i parametri in base alle esigenze.

Parametro Descrizione Richiesto
--enable-oidc-issuer Genera e ospita l'URL dell'autorità emittente OIDC che è un URL accessibile pubblicamente che consente al server API di trovare le chiavi di firma pubbliche per la verifica dei token.  Richiesto
--enable-workload-identity Installa un webhook di ammissione di modifica che proietta un token di account del servizio firmato in un percorso noto e inserisce le variabili di ambiente correlate all'autenticazione ai pod dell'applicazione in base alle impostazioni dell'account del servizio con annotazioni. Per un nuovo cluster, se questo parametro non è abilitato, è necessario montare un volume proiettato in un percorso noto che espone il token dell'account del servizio firmato al percorso. Facoltativo

Impostare le variabili di ambiente

Per praticità, le variabili di ambiente definite di seguito sono riportate negli esempi di questo articolo. Sostituire questi valori con i propri valori:

export RESOURCE_GROUP="myRG"
export LOCATION="eastus"
export CLUSTER_NAME="mycluster"
export SERVICE_ACCOUNT_NAMESPACE="myKubernetesnamespace"
export SERVICE_ACCOUNT_NAME="mysa"
export SUBSCRIPTION="$(az account show --query id --output tsv)"
export USER_ASSIGNED_IDENTITY_NAME="myIdentity"
export FEDERATED_IDENTITY_CREDENTIAL_NAME="myFedIdentity"

Per creare un cluster abilitato per Azure Arc con l'identità del carico di lavoro abilitata, usare il comando seguente:

az connectedk8s connect --name "${CLUSTER_NAME}" --resource-group "${RESOURCE_GROUP}" --enable-oidc-issuer –-enable-workload-identity

Per abilitare l'identità del carico di lavoro in un cluster Kubernetes abilitato per Arc esistente, usare il update comando .

az connectedk8s update --name "${CLUSTER_NAME}" --resource-group "${RESOURCE_GROUP}" --enable-oidc-issuer --enable-workload-identity

Recuperare l'URL dell'autorità di certificazione OIDC

Recuperare l'URL dell'autorità emittente OIDC e salvarlo in una variabile di ambiente. Questo URL dell'autorità emittente verrà usato nel passaggio seguente.

export OIDC_ISSUER="$(az connectk8s show --name "${CLUSTER_NAME}" --resource-group "${RESOURCE_GROUP}" \ 
    --query "oidcIssuerProfile.issuerUrl" \  
    --output tsv)"

Per visualizzare la variabile di ambiente, immettere echo ${OIDC_ISSUER}. La variabile di ambiente deve contenere l'URL dell'autorità di certificazione, in modo simile all'esempio seguente:

https://northamerica.oic.prod-arc.azure.com/00000000-0000-0000-0000-000000000000/12345678-1234-1234-1234-123456789123/

Per impostazione predefinita, l'autorità emittente è impostata per usare l'URL https://{region}.oic.prod-arc.azure.com/{tenant_id}/{uuid}di base , dove il valore per {region} corrisponde alla posizione in cui viene creato il cluster Kubernetes abilitato per Arc. Il valore {uuid} rappresenta la chiave OIDC (OpenID Connect), che è un GUID non modificabile generato in modo casuale per ogni cluster.

Creare un'identità gestita

Usare il az identity create comando per creare un'identità gestita assegnata dall'utente. Con l'identità del carico di lavoro, viene stabilita una relazione di trust tra il token dell'identità di gestione assegnata dall'utente e il token dell'account del servizio del cluster Kubernetes.

az identity create \ 
    --name "${USER_ASSIGNED_IDENTITY_NAME}" \
    --resource-group "${RESOURCE_GROUP}" \
    --location "${LOCATION}" \
    --subscription "${SUBSCRIPTION}"

Recuperare l'ID client dell'identità gestita e archiviare in una variabile di ambiente.

export USER_ASSIGNED_CLIENT_ID="$(az identity show \ 
    --resource-group "${RESOURCE_GROUP}" \
    --name "${USER_ASSIGNED_IDENTITY_NAME}" \
    --query 'clientId' \
    --output tsv)"

Creare un account del servizio Kubernetes

Creare un account del servizio Kubernetes e annotarlo con l'ID client dell'identità gestita creata nel passaggio precedente. I token firmati associati all'account del servizio Kubernetes verranno scambiati per un token ID Microsoft Entra dopo che la relazione di trust viene stabilita tra i due.

Applicare il frammento YAML seguente per creare un account del servizio con l'annotazione identity del carico di lavoro aggiunta.

apiVersion: v1 
kind: ServiceAccount 
metadata: 
  annotations: 
    azure.workload.identity/client-id: "${USER_ASSIGNED_CLIENT_ID}" 
  name: "${SERVICE_ACCOUNT_NAME}" 
  namespace: "${SERVICE_ACCOUNT_NAMESPACE}" 

Creare le credenziali dell'identità federata

Usare il az identity federated-credential create comando per creare le credenziali di identità federate tra l'identità gestita, l'emittente dell'account del servizio e l'oggetto. Questo passaggio stabilisce la relazione di trust tra il cluster Kubernetes e Microsoft Entra per lo scambio di token. Per altre informazioni sulle credenziali di identità federate in Microsoft Entra, vedere Panoramica delle credenziali di identità federate in Microsoft Entra ID.

az identity federated-credential create \ 
    --name ${FEDERATED_IDENTITY_CREDENTIAL_NAME} \ 
    --identity-name "${USER_ASSIGNED_IDENTITY_NAME}" \ 
    --resource-group "${RESOURCE_GROUP}" \ 
    --issuer "${OIDC_ISSUER}" \ 
    --subject system:serviceaccount:"${SERVICE_ACCOUNT_NAMESPACE}":"${SERVICE_ACCOUNT_NAME}" \ 
    --audience api://AzureADTokenExchange 

Nota

Dopo l'aggiunta delle credenziali di identità federali, la propagazione richiede alcuni secondi. Se una richiesta di token viene effettuata immediatamente dopo l'aggiunta della credenziale dell'identità federata, la richiesta potrebbe non riuscire finché non viene aggiornata la cache. Per evitare questo problema, aggiungere un lieve ritardo negli script dopo l'aggiunta delle credenziali dell'identità federata.

Configurare le annotazioni dell'account del servizio e le etichette dei pod

Per la configurazione dell'identità del carico di lavoro in base ai requisiti dell'applicazione, sono disponibili gli account del servizio e le annotazioni dei pod seguenti. L'etichetta pod specificata di seguito è obbligatoria se –-enable-workload-identity è impostata su true.

Annotazioni dell'account del servizio

Tutte le annotazioni dell'account del servizio sono facoltative. Se non viene specificata un'annotazione, verrà usato il valore predefinito.

Annotazione Descrizione Default
azure.workload.identity/client-id ID client dell'applicazione Microsoft Entra da usare con il pod.
azure.workload.identity/tenant-id ID tenant di Azure in cui è registrata l'applicazione Microsoft Entra. AZURE_TENANT_ID variabile di ambiente estratta da azure-wi-webhook-config ConfigMap.
azure.workload.identity/service-account-token-expiration expirationSeconds campo per il token dell'account del servizio proiettato. Configurare 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 Microsoft Entra scadono 24 ore dopo l'emissione. 3600 (intervallo supportato è 3600-86400)

Etichette dei pod

Annotazione Descrizione Valore consigliato Richiesto
azure.workload.identity/use Obbligatorio nella specifica del modello di pod. Se –-enable-workload-identity è impostato su true, solo i pod con questa etichetta vengono modificati dal webhook di ammissione di modifica 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 dei pod sono facoltative. Se non viene specificata un'annotazione, verrà usato il valore predefinito.

Annotazione Descrizione Default
azure.workload.identity/service-account-token-expiration expirationSeconds campo per il token dell'account del servizio proiettato. Configurare 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 Microsoft Entra scadono 24 ore dopo l'emissione. 3600 (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.

Configurare le impostazioni di identità del carico di lavoro nel cluster Kubernetes

Il server API nel cluster Kubernetes deve essere configurato per rilasciare token dell'account del servizio che includono l'URL dell'autorità di certificazione OIDC accessibile pubblicamente (in modo che Entra sappia dove trovare le chiavi pubbliche per convalidare il token).

Per configurare le impostazioni di identità del carico di lavoro in Ubuntu Linux con K3s, seguire questa procedura per completare la configurazione:

  1. Creare il file di configurazione k3s.

  2. Modificare /etc/rancher/k3s/config.yaml per aggiungere queste impostazioni:

       `kube-apiserver-arg:  
         - 'service-account-issuer=${OIDC_ISSUER}'
         - 'service-account-max-token-expiration=24h'`
    
  3. Salvare config.yaml.

  4. Riavviare il server API k3s usando il comando systemctl restart k3s.

    È consigliabile ruotare frequentemente le chiavi dell'account del servizio. Per altre informazioni, vedere Rotazione della chiave dell'autorità di certificazione dell'account del servizio.

Disabilitare l'identità dei carichi di lavoro

Per disabilitare la funzionalità di identità del carico di lavoro in un cluster Kubernetes abilitato per Azure Arc, eseguire il comando seguente:

az connectedk8s update
    --resource-group "${RESOURCE_GROUP}"
    --name "${CLUSTER_NAME}"
    --disable-workload-identity

Passaggi successivi