Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Configurare le associazioni di identità nei cluster di Azure Kubernetes Service per mappare un'identità gestita assegnata dall'utente (UAMI) in più cluster usando una singola credenziale FIC (Federated Identity Credential). Questa configurazione consente di ridimensionare l'autenticazione di Microsoft Entra per i carichi di lavoro senza raggiungere i limiti FIC.
Prerequisiti
- Esaminare i concetti relativi alle associazioni di identità per comprendere il funzionamento delle associazioni di identità.
- Interfaccia della riga di comando di Azure versione 2.73.0 o successiva. Per controllare la versione, usare il
az versioncomando . Per installare o aggiornare l'interfaccia della riga di comando di Azure, vedere Installare l'interfaccia della riga di comando di Azure. - Estensione dell'interfaccia della riga di comando di Azure
aks-previewversione18.0.0b26o successiva installata. - Flag di funzionalità
IdentityBindingPreviewabilitato per la sottoscrizione. - Sono necessarie le autorizzazioni di Azure seguenti per l'ambito di identità e cluster:
Microsoft.ManagedIdentity/userAssignedIdentities/federatedIdentityCredentials/writeeMicrosoft.ContainerService/managedClusters/write. - Per creare
ClusterRoleeClusterRoleBindingrisorse sono necessarie autorizzazioni di amministratore del cluster Kubernetes (o equivalente).
Installare o aggiornare l'estensione aks-preview
Installare o aggiornare l'estensione del CLI di Azure
aks-previewall'ultima versione utilizzando il comandoaz extension addoaz extension update.# Install the aks-preview extension az extension add --name aks-preview # Update to the latest version if already installed az extension update --name aks-preview
Abilitare il flag di funzionalità IdentityBindingPreview
Registrare il flag di funzionalità
IdentityBindingPreviewnella sottoscrizione di Azure con il comandoaz feature register.az feature register --namespace Microsoft.ContainerService --name IdentityBindingPreviewIl completamento della registrazione delle funzionalità può richiedere fino a 15 minuti.
Attendere il completamento della registrazione della funzionalità usando il
az feature showcomando .az feature show --namespace Microsoft.ContainerService --name IdentityBindingPreviewQuando la funzionalità appare come
Registered, aggiorna la registrazione del provider usando il comandoaz provider register.az provider register --namespace Microsoft.ContainerService
Limitazioni
- Le associazioni di identità non sono ancora supportate nei cluster configurati con l'integrazione della rete virtuale del server API.
Creare risorse di test
Creare un gruppo di risorse di Azure usando il comando
az group create.export RESOURCE_GROUP="ib-test" export LOCATION="westus2" az group create --name $RESOURCE_GROUP --location $LOCATIONCreare un cluster del servizio Azure Kubernetes con l'identità dei carichi di lavoro e l'autorità emittente OIDC abilitata con il comando
az aks createcon i flag--enable-workload-identitye--enable-oidc-issuer.export CLUSTER_NAME="ib-test-cluster" az aks create --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --location $LOCATION --no-ssh-key --enable-workload-identity --enable-oidc-issuerCreare un'Identità Gestita Assegnata dall'Utente usando il comando
az identity create.export MI_NAME="ib-test-mi" az identity create --resource-group $RESOURCE_GROUP --name $MI_NAME
Verificare la versione del webhook per l'identità dei carichi di lavoro
L'associazione di identità richiede la versione di anteprima del webhook per l'identità dei carichi di lavoro. Verificare la versione del webhook installato usando il comando seguente
kubectl get pods:kubectl -n kube-system get pods -l azure-workload-identity.io/system=true -o yaml | grep v1.6.0L'output dovrebbe mostrare
v1.6.0-alpha.1nel tag immagine, confermando l'installazione della versione corretta.
Ottenere gli ID UAMI
Ottieni gli ID risorsa, principale, client e tenant di UAMI e impostali come variabili di ambiente usando i seguenti comandi
az identity show:export MI_RESOURCE_ID=$(az identity show --resource-group $RESOURCE_GROUP --name $MI_NAME --query id --output tsv) export MI_PRINCIPAL_ID=$(az identity show --resource-group $RESOURCE_GROUP --name $MI_NAME --query principalId --output tsv) export MI_CLIENT_ID=$(az identity show --resource-group $RESOURCE_GROUP --name $MI_NAME --query clientId --output tsv) export MI_TENANT_ID=$(az identity show --resource-group $RESOURCE_GROUP --name $MI_NAME --query tenantId --output tsv)
Creare un collegamento d'identità
Eseguire il mapping dell'identità gestita assegnata dall'utente al cluster del servizio Kubernetes con un'associazione di identità usando il comando
az aks identity-binding create.az aks identity-binding create --resource-group $RESOURCE_GROUP --cluster-name $CLUSTER_NAME --name "${MI_NAME}-ib" --managed-identity-resource-id $MI_RESOURCE_IDAnnotazioni
Quando si crea un'associazione di identità, il servizio Azure Kubernetes crea automaticamente una credenziale di identità federata denominata
aks-identity-bindingnell'identità gestita assegnata dall'utente. Questa credenziale è gestita da AKS (Azure Kubernetes Service). Non modificarlo o eliminarlo mentre le associazioni di identità sono in uso. Il FIC creato per i binding di identità viene condiviso da tutti i binding di identità che fanno riferimento allo stesso UAMI.
Ottieni l'URL dell'autorità emittente OIDC per UAMI
Ottenere l'URL dell'emittente OIDC associato all'UAMI esaminando l'associazione di identità usando il comando
az aks identity-binding show.az aks identity-binding show --resource-group $RESOURCE_GROUP --cluster-name $CLUSTER_NAME --name "${MI_NAME}-ib"Output di esempio condensato:
{ "oidcIssuer": { "oidcIssuerUrl": "https://ib.oic.prod-aks.azure.com/<MI-tenant-id>/<MI-client-id>" } }
Connettersi al cluster AKS
Ottenere le credenziali del cluster del servizio Azure Kubernetes usando il
az aks get-credentialscomando e salvarle in un file kubeconfig separato:az aks get-credentials --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME -a -f "${CLUSTER_NAME}.kubeconfig"Impostare la
KUBECONFIGvariabile di ambiente in modo che punti al nuovo file kubeconfig:export KUBECONFIG="$(pwd)/${CLUSTER_NAME}.kubeconfig"
Autorizzare namespace e account di servizio
Configurare il controllo degli accessi in base al ruolo per concedere a soggetti specifici l'autorizzazione a usare l'identità gestita tramite l'associazione di identità, applicando il file manifesto seguente con il comando
kubectl apply.Annotazioni
L'esempio seguente fa riferimento in modo esplicito all'account di servizio
demonello spazio dei nomidemo. Anche se fare esplicito riferimento a un account di servizio specifico è un'opzione, è anche possibile riferirsi a una raccolta di account di servizio sottosubjects. Per altre informazioni, vedere Riferimenti a soggetti nella documentazione di Kubernetes.kubectl apply -f - <<EOF apiVersion: v1 kind: Namespace metadata: name: demo --- apiVersion: v1 kind: ServiceAccount metadata: name: demo namespace: demo --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: use-mi-${MI_CLIENT_ID} rules: - verbs: ["use-managed-identity"] apiGroups: ["cid.wi.aks.azure.com"] resources: ["${MI_CLIENT_ID}"] --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: use-mi-${MI_CLIENT_ID} roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: use-mi-${MI_CLIENT_ID} subjects: - kind: ServiceAccount name: demo namespace: demo EOF
Creare un Key Vault di Azure con protezione dalla cancellazione e autorizzazione tramite Azure RBAC
Creare un insieme di credenziali delle chiavi con protezione dall'eliminazione e autorizzazione di Controllo degli accessi in base al ruolo di Azure abilitata con il comando
az keyvault createe con i flag--enable-purge-protectione--enable-rbac-authorization. È anche possibile usare un key vault esistente se è configurato sia per la protezione dalla rimozione che per l'autorizzazione di Azure RBAC.export KEY_VAULT_NAME="ib-test" az keyvault create \ --name $KEY_VAULT_NAME \ --resource-group $RESOURCE_GROUP \ --location $LOCATION \ --enable-purge-protection \ --enable-rbac-authorization
Ottenere l'ID risorsa e l'URL dell'insieme di credenziali delle chiavi
Ottenere il resource ID del Key Vault usando il comando
az keyvault showe impostarlo come variabile di ambiente:export KEY_VAULT_RESOURCE_ID=$(az keyvault show --resource-group $RESOURCE_GROUP \ --name $KEY_VAULT_NAME \ --query id \ --output tsv)Ottenere l'URL del Key Vault usando il comando
az keyvault showe impostarlo come variabile di ambiente.export KEYVAULT_URL="$(az keyvault show \ --resource-group $RESOURCE_GROUP \ --name $KEY_VAULT_NAME \ --query properties.vaultUri \ --output tsv)"
Configurare l'accesso al Key Vault e creare un segreto
I passaggi seguenti illustrano come accedere a segreti, chiavi o certificati in Azure Key Vault dal pod. Gli esempi in questa sezione configurano l'accesso ai segreti in Key Vault per l'identità del carico di lavoro, ma è possibile eseguire passaggi simili per configurare l'accesso a chiavi o certificati.
L'esempio seguente illustra come usare il modello di autorizzazione RBAC di Azure per concedere al pod l'accesso al Key Vault. Per ulteriori informazioni sul modello di autorizzazione RBAC di Azure per Azure Key Vault, vedere Concedere l'autorizzazione alle applicazioni per accedere ad Azure Key Vault usando Azure RBAC.
Ottenere l'ID oggetto dell'utente connesso usando il
az ad signed-in-user showcomando e impostarlo come variabile di ambiente:export CALLER_OBJECT_ID=$(az ad signed-in-user show --query id --output tsv)Assegnare a se stessi il ruolo di Controllo degli accessi in base al ruolo di Azure Responsabile dei segreti di Key Vault nell'insieme di credenziali delle chiavi con il comando
az role assignment create.az role assignment create --assignee $CALLER_OBJECT_ID \ --role "Key Vault Secrets Officer" \ --scope $KEY_VAULT_RESOURCE_IDCreare un segreto nell'insieme di credenziali delle chiavi usando il comando
az keyvault secret set.export KEY_VAULT_SECRET_NAME="my-secret" az keyvault secret set \ --vault-name $KEY_VAULT_NAME \ --name $KEY_VAULT_SECRET_NAME \ --value "Hello\!"Assegnare il ruolo Key Vault Secrets User all'UAMI usando il comando
az role assignment create.az role assignment create \ --assignee-object-id $MI_PRINCIPAL_ID \ --role "Key Vault Secrets User" \ --scope $KEY_VAULT_RESOURCE_ID \ --assignee-principal-type ServicePrincipal
Annotare l'account del servizio
Annotare l'account di servizio con l'ID tenant dell'identità gestita usando il comando
kubectl annotate.kubectl annotate sa demo -n demo azure.workload.identity/tenant-id=$MI_TENANT_IDAnnotare l'account di servizio con l'ID client dell'identità gestita usando il comando
kubectl annotate.kubectl annotate sa demo -n demo azure.workload.identity/client-id=$MI_CLIENT_ID
Distribuire l'applicazione di esempio
Distribuire il pod di esempio che usa l'associazione di identità per ottenere un token di accesso per l'identità gestita per accedere ad Azure Key Vault usando il comando seguente
kubectl apply:kubectl apply -f - <<EOF apiVersion: v1 kind: Pod metadata: name: demo namespace: demo labels: azure.workload.identity/use: "true" annotations: azure.workload.identity/use-identity-binding: "true" spec: serviceAccount: demo containers: - name: azure-sdk # source code: https://github.com/Azure/azure-workload-identity/blob/feature/custom-token-endpoint/examples/identitybinding-msal-go/main.go image: ghcr.io/bahe-msft/azure-workload-identity/identitybinding-msal-go:latest-linux-amd64 env: - name: KEYVAULT_URL value: ${KEYVAULT_URL} - name: SECRET_NAME value: ${KEY_VAULT_SECRET_NAME} restartPolicy: Never EOF
Verificare l'accesso al Key Vault dall'applicazione di esempio
Descrivere il pod e verificare che le variabili di ambiente e i montaggi dei volumi di token previsti siano presenti usando il comando
kubectl describe pod.kubectl describe pod demo -n demoL'output previsto deve contenere valori per
AZURE_CLIENT_ID,AZURE_TENANT_IDAZURE_FEDERATED_TOKEN_FILE, ,AZURE_AUTHORITY_HOST,AZURE_KUBERNETES_TOKEN_PROXY.AZURE_KUBERNETES_SNI_NAMEeAZURE_KUBERNETES_CA_FILE.Verificare che il pod possa ottenere un token e accedere alla risorsa usando il
kubectl logscomando .kubectl logs demo -n demoIn caso di esito positivo, l'output dovrebbe essere simile all'esempio seguente:
I1107 20:03:42.865180 1 main.go:77] "successfully got secret" secret="Hello!"
Scalare le associazioni di identità tra più cluster
I binding di identità consentono di mappare più cluster del servizio Azure Kubernetes (AKS) allo stesso UAMI mentre si utilizza ancora un singolo FIC. Per ridimensionare le associazioni di identità tra più cluster, è possibile ripetere i passaggi da Creare un'associazione di identità fino a Verificare l'accesso a Key Vault dall'applicazione di esempio per ogni cluster aggiuntivo che si desidera mappare allo stesso UAMI (creando un nuovo binding di identità per ciascun cluster).
Pulire le risorse
Se non sono più necessarie le risorse create in questo articolo, è possibile pulirle per evitare di incorrere in costi futuri.
Eliminare il pod usando il comando
kubectl delete pod.kubectl delete pod demo -n demoEliminare il namespace usando il comando
kubectl delete ns.kubectl delete ns demoEliminare il gruppo di risorse e tutte le risorse correlate usando il
az group deletecomando .az group delete --name $RESOURCE_GROUP --yes --no-wait