Använda Microsoft Entra-arbetsbelastnings-ID med Azure Kubernetes Service (AKS)

Arbetsbelastningar som distribueras i ett AKS-kluster kräver autentiseringsuppgifter för Microsoft Entra-program eller hanterade identiteter för åtkomst till Microsoft Entra-skyddade resurser, till exempel Azure Key Vault och Microsoft Graph. Microsoft Entra-arbetsbelastnings-ID integreras med funktioner som är inbyggda i Kubernetes för att federera med externa identitetsprovidrar, så att du kan tilldela arbetsbelastningsidentiteter till dina arbetsbelastningar för att autentisera och komma åt andra tjänster och resurser.

Anteckning

Workload ID omfattar identitetsscenariot pod-to-Azure i AKS – hur applikationer som körs i poddar autentiserar sig mot tjänster som skyddas av Microsoft Entra. På AKS Automatic är arbetsbelastningsidentiteten med Microsoft Entra Workload ID och OIDC-klusterutfärdaren förkonfigurerad som standard – ingen konfiguration på klusternivå krävs. På AKS Standard aktiverar och konfigurerar du arbetsbelastningsidentitet separat. De andra identitetsscenarierna (kontrollplansautentisering och auktorisering samt kluster-till-Azure-hanterade identiteter) finns i Åtkomst- och identitetsalternativ för AKS.

Tip

Om du använder ett AKS-automatiskt kluster förkonfigureras arbetsbelastningsidentiteten med Microsoft Entra Workload ID och OIDC-klusterutfärdaren som standard. Du kan hoppa över konfigurationen på klusternivå och gå direkt till att konfigurera ditt program för att använda en arbetsbelastningsidentitet. Mer information om säkerhetsstandarder för AKS Automatic finns i Vad är Azure Kubernetes Service Automatisk?

Microsoft Entra Workload ID använder volymprojektion för tjänstkontotoken för att göra det möjligt för poddar att använda en Kubernetes-identitet. En Kubernetes-token utfärdas och OIDC-federationen (OpenID Connect) gör det möjligt för Kubernetes-program att komma åt Azure-resurser på ett säkert sätt med Microsoft Entra-ID, baserat på kommenterade tjänstkonton.

Du kan använda Microsoft Entra-arbetsbelastnings-ID med Azure Identity-klientbibliotek eller MSAL-samlingen ( Microsofts autentiseringsbibliotek ) tillsammans med programregistrering för att smidigt autentisera och komma åt Azure-molnresurser.

Anteckning

Du kan använda Service Connector för att konfigurera vissa steg automatiskt. Mer information finns i Vad är Service Connector?

Förutsättningar

AKS automatiska kluster

I AKS Automatic-kluster är arbetsbelastningsidentitet och OIDC-utfärdaren för klustret förkonfigurerade som en del av klustrets standardsäkerhetsinställningar. Ingen konfiguration på klusternivå krävs innan du använder workload-identitet i dina poddar. Fortsätt direkt till att konfigurera ditt program.

AKS-standardkluster

  • AKS stöder Microsoft Entra-arbetsbelastnings-ID på version 1.22 och senare.
  • Azure CLI version 2.47.0 eller senare. Kör az --version för att hitta versionen och kör az upgrade för att uppgradera versionen. Om du behöver installera eller uppgradera kan du läsa Installera Azure CLI.
  • Du måste aktivera arbetsbelastningsidentiteten och OIDC-utfärdaren i klustret innan dina poddar kan använda arbetsbelastningsidentitet. Se Distribuera och konfigurera arbetsbelastningsidentitet i ett AKS-kluster.

Begränsningar

  • Du kan ha högst 20 federerade identitetsuppgifter per hanterad identitet.
  • Det tar några sekunder innan den federerade identitetsautentiseringsuppgiften sprids efter att den först har lagts till.
  • Tillägget virtuella noder , baserat på projektet Virtual Kubelet med öppen källkod, stöds inte.
  • Skapande av federerade identitetsuppgifter stöds inte för användartilldelade hanterade identiteter i dessa regioner.

Azure Identity-klientbibliotek

I Azure Identity-klientbiblioteken väljer du någon av följande metoder:

  • Använd DefaultAzureCredential, som försöker använda WorkloadIdentityCredential.
  • Skapa en ChainedTokenCredential instans som innehåller WorkloadIdentityCredential.
  • Använd WorkloadIdentityCredential direkt.

När du begär token med WorkloadIdentityCredential, anger du omfång i Microsoft Entra ID v2-formatet <resource>/.default till exempel https://management.azure.com/.default. En rå resurs-URI, till exempel https://management.azure.com/, kan misslyckas eftersom workloadidentitet använder Microsoft Entra v2-token-slutpunkten i stället för IMDS-resourceflödet som används av hanterad identitet. Mer information om hur scope fungerar i v2-slutpunkten för token finns i Hämta en token.

Följande tabell innehåller den lägsta paketversion som krävs för varje språkekosystems klientbibliotek:

Ekosystem Bibliotek Minimiversion
.NÄT Azure.Identity 1.9.0
C++ azure-identity-cpp 1.6.0
azidentity 1.3.0
Java azure-identity 1.9.0
Node.js @azure/identity 3.2.0
Python azure-identity 1.13.0

Kodexempel för Azure Identity-klientbibliotek

Följande kodexempel använder DefaultAzureCredential. Den här typen av autentiseringsuppgifter använder miljövariablerna som injiceras av arbetsbelastningsidentitetens muterande webhook för att autentisera med Azure Key Vault. Om du vill se exempel med någon av de andra metoderna kan du läsa de ekosystemspecifika klientbiblioteken.

Ersätt <key-vault-url> och <secret-name> med lämpliga värden för din Key Vault och hemlighet.

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);

Microsofts autentiseringsbibliotek (MSAL)

Följande klientbibliotek är den lägsta version som krävs:

Ekosystem Bibliotek Bild Exempel Har Windows
.NÄT Microsofts autentiseringsbibliotek-for-dotnet ghcr.io/azure/azure-workload-identity/msal-net:latest Länk Ja
Microsofts autentiseringsbibliotek for Go ghcr.io/azure/azure-workload-identity/msal-go:latest Länk Ja
Java Microsofts autentiseringsbibliotek-for-java ghcr.io/azure/azure-workload-identity/msal-java:latest Länk Nej
JavaScript Microsofts autentiseringsbibliotek-for-js ghcr.io/azure/azure-workload-identity/msal-node:latest Länk Nej
Python Microsofts autentiseringsbibliotek-for-python ghcr.io/azure/azure-workload-identity/msal-python:latest Länk Nej

Hur det fungerar

I den här säkerhetsmodellen fungerar AKS-klustret som tokenutfärdare. Microsoft Entra ID använder OIDC för att identifiera offentliga signeringsnycklar och verifiera autenticiteten för tjänstkontotoken innan du utbyter den mot en Microsoft Entra-token. Ditt arbetsflöde kan byta ut en tjänstkontotoken som används i dess volym mot en Microsoft Entra-token med hjälp av Azure Identity client library eller MSAL.

Diagram över säkerhetsmodellen för AKS Microsoft Entra-arbetsbelastnings-ID.

I följande tabell beskrivs de nödvändiga OIDC-utfärdarslutpunkterna för Microsoft Entra-arbetsbelastnings-ID:

Slutpunkt beskrivning
{IssuerURL}/.well-known/openid-configuration Kallas även för OIDC-identifieringsdokumentet. Detta innehåller metadata om utfärdarens konfigurationer.
{IssuerURL}/openid/v1/jwks Detta innehåller de offentliga signeringsnycklar som Microsoft Entra-ID använder för att verifiera autenticiteten för tjänstkontotoken.

Följande diagram sammanfattar autentiseringssekvensen med OIDC:

Diagram över AKS Microsoft Entra-arbetsbelastnings-ID OIDC-autentiseringssekvensen.

Automatisk rotation av Webhook-certifikat

På samma sätt som andra webhook-tillägg roterar åtgärden automatisk rotation av klustercertifikatet certifikatet för workload identity-webhooken.

Tjänstkontoetiketter och anteckningar

Microsoft Entra-arbetsbelastnings-ID stöder följande mappningar relaterade till ett tjänstkonto:

  • En-till-en, där ett tjänstkonto refererar till ett Microsoft Entra-objekt.
  • Många-till-en, där flera tjänstkonton refererar till samma Microsoft Entra-objekt.
  • En-till-många, där ett tjänstkonto refererar till flera Microsoft Entra-objekt genom att ändra klient-ID-annoteringen. Mer information finns i Så här federerar du flera identiteter med ett Kubernetes-tjänstkonto.

Anteckning

Om du uppdaterar anteckningarna för tjänstkontot måste du starta om podden för att ändringarna ska börja gälla.

Om du har använt Microsoft Entra-poddhanterad identitet bör du tänka på ett tjänstkonto som ett Azure-säkerhetsobjekt, men ett tjänstkonto är en del av Kubernetes-kärn-API:et i stället för en anpassad resursdefinition (CRD). I följande avsnitt beskrivs en lista över tillgängliga etiketter och anteckningar som du kan använda för att konfigurera beteendet när du utbyter tjänstkontotoken mot en Microsoft Entra-åtkomsttoken.

Anteckningar för tjänstkonto

Alla anteckningar är valfria. Om anteckningen inte har angetts används standardvärdet.

Anteckning beskrivning Standard
azure.workload.identity/client-id Representerar Microsoft Entra-programmet
klient-ID som ska användas med podden.
azure.workload.identity/tenant-id Representerar Azure-klientorganisations-ID:t där
Microsoft Entra-programmet är registrerat.
Miljövariabeln AZURE_TENANT_ID har extraherats
från azure-wi-webhook-config ConfigMap.
azure.workload.identity/service-account-token-expiration Representerar fältet expirationSeconds för den projicerade tjänstkontotoken. Det är ett valfritt fält som du konfigurerar för att förhindra avbrott som orsakas av fel vid uppdatering av tjänstkontotoken. Förfallodatum för Kubernetes-tjänstkontotoken korreleras inte med Microsoft Entra-token. Microsoft Entra-token upphör att gälla om 24 timmar efter att de har utfärdats. 3600
Intervallet som stöds är 3600-86400.

Poddetiketter

Anteckning

För applikationer som använder Microsoft Entra Workload ID måste du lägga till etiketten azure.workload.identity/use: "true" i poddspecifikationen för AKS för att flytta arbetsbelastningsidentiteten till ett Fail Close-scenario för att tillhandahålla ett konsekvent och tillförlitligt beteende för poddar som behöver använda workload identity. Annars misslyckas poddarna när de har startats om.

Etikett beskrivning Rekommenderat värde Obligatoriskt
azure.workload.identity/use Den här etiketten krävs i poddmallsspecifikationen. Endast poddar med den här etiketten muteras av den azure-workload-identity som muterar webhooken för antagning för att mata in azure-specifika miljövariabler och den beräknade volymen för tjänstkontotoken. true Ja

Pod-anmärkningar

Alla anteckningar är valfria. Om anteckningen inte har angetts används standardvärdet.

Anteckning beskrivning Standard
azure.workload.identity/service-account-token-expiration Mer information finns i Anteckningar för tjänstkonto . Pod-anteckningar har företräde framför anteckningar för tjänstekonton. 3600
Intervallet som stöds är 3600-86400.
azure.workload.identity/skip-containers Representerar en semikolonavgränsad lista över containrar för att hoppa över att lägga till den beräknade tokenvolymen för tjänstkontot. Exempel: container1;container2 Som standard läggs den beräknade tokenvolymen för tjänstkontot till i alla containrar om podden är märkt med azure.workload.identity/use: true.
azure.workload.identity/inject-proxy-sidecar Infogar en proxy-init-container och en proxy-sidecar i podden. Proxy-sidovagnen används för att fånga upp tokenbegäranden till IMDS och hämta en Microsoft Entra-token åt användaren med federerade identitetsautentiseringsuppgifter. falskt
azure.workload.identity/proxy-sidecar-port Representerar porten för proxy-sidovagnen. 8000

Använda identitetsbindningar och direkt federation i samma arbetsbelastning

Identitetskopplingar är en funktion i förhandsversion som utökar stödet för arbetsbelastningsidentitet för att stödja storskaliga AKS-miljöer. I stället för att skapa en federerad identitetsautentiseringsuppgift (FIC) för varje kluster låter identitetsbindningar flera kluster dela en enda användartilldelad hanterad identitet via en FIC. När det är aktiverat dirigerar AKS poddtokenbegäranden via en webbhook för identitetsbindningsproxy som hanterar tokenutbyte för arbetsbelastningens räkning.

En projicerad token för tjänstkonto har en enda målgrupp. När identitetsbindningar är aktiverade anger webhooken för identitetsbindning standardtoken som refereras av AZURE_FEDERATED_TOKEN_FILE till målgruppen api://AKSIdentityBinding, som identitetsbindningsproxyn använder.

Direkt Microsoft Entra Workload ID-federering (utan identitetsbindningar) kräver en token med målgruppen api://AzureADTokenExchange. Det går AADSTS700212 inte att återanvända tokenfilen för identitetsbindning för direkt federation eftersom målgruppen för federerade identitetsautentiseringsuppgifter inte matchar tokenpubliken.

Om du vill använda identitetsbindningar för en hanterad identitet och direkt federation för en annan i samma arbetsbelastning, projicerar du en andra tjänstkontotoken med målgruppen api://AzureADTokenExchange och pekar den direkta federationskoden på filen:

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

Används AZURE_FEDERATED_TOKEN_FILE för identitetsbindningsflödet och den anpassade tokenfilen, till exempel DIRECT_FIC_TOKEN_FILE, för flödet för direkt federerade identitetsautentiseringsuppgifter.

Migrera till Microsoft Entra-arbetsbelastnings-ID

Du kan konfigurera kluster som redan kör en poddhanterad identitet för att använda Microsoft Entra-arbetsbelastnings-ID på något av två sätt:

  • Använd samma konfiguration som du implementerade för podhanterad identitet. Du kan annotera tjänstkontot inom namnområdet med identiteten för att aktivera Microsoft Entra Workload-ID och injicera annotationerna i poddarna.
  • Skriv om programmet så att det använder den senaste versionen av Azure Identity-klientbiblioteket.

För att effektivisera och underlätta migreringsprocessen har vi utvecklat en sidovagn för migrering som konverterar imds-transaktionerna (Instance Metadata Service) som ditt program gör till OIDC. Migreringssidovagn är inte avsedd att vara en långsiktig lösning, utan ett sätt att komma igång snabbt med Microsoft Entra Workload ID. Genom att köra sidovagnen för migrering inom applikationen förmedlas applikationens IMDS-transaktioner till OIDC. Den alternativa metoden är att uppgradera till en version som stöds av Azure Identity-klientbiblioteket , som stöder OIDC-autentisering.

I följande tabell sammanfattas våra migrerings- eller distributionsrekommendationer för ditt AKS-kluster:

Scenario beskrivning
Nytt AKS-automatiskt kluster Workloadidentiteten och OIDC-utfärdaren är förkonfigurerade. Det krävs inga migrerings- eller konfigurationssteg på klusternivå. Konfigurera programmets tjänstkonto och federerade autentiseringsuppgifter och använd sedan klientbiblioteket Azure Identity.
Nytt eller befintligt AKS Standard-kluster som kör en version av klientbiblioteket Azure Identity som stöds Inga migreringssteg krävs.
Exempel på distributionsresurser: Distribuera och konfigurera Microsoft Entra-arbetsbelastnings-ID i ett nytt kluster
Ny eller befintlig klusterdistribution kör en version av Azure Identity-klientbiblioteket som inte stöds Uppdatera containeravbildningen så att den använder en stödd version av klientbiblioteket Azure Identity, eller använd sidecar-komponenten för migrering.