Microsoft Entra Workload-ID gebruiken met Azure Kubernetes Service (AKS)

Voor workloads die zijn geïmplementeerd op een AKS-cluster, zijn microsoft Entra-toepassingsreferenties of beheerde identiteiten vereist voor toegang tot met Microsoft Entra beveiligde resources, zoals Azure Key Vault en Microsoft Graph. De Microsoft Entra Workload-id kan worden geïntegreerd met de mogelijkheden die systeemeigen zijn voor Kubernetes om te federeren met externe id-providers, zodat u workloadidentiteiten kunt toewijzen aan uw workloads om andere services en resources te verifiëren en te openen.

Notitie

Workload-id omvat het scenario voor pod-naar-Azure-identiteit in AKS: hoe toepassingen die in pods worden uitgevoerd, worden geverifieerd bij Microsoft Entra beveiligde services. Op AKS Automatic zijn workloadidentiteit met Microsoft Entra Workload-id en de OIDC-clusteruitgever standaard vooraf geconfigureerd. Er is geen installatie op clusterniveau vereist. Op AKS Standard schakelt u de workloadidentiteit afzonderlijk in en configureert u deze. Zie Toegangs- en identiteitsopties voor AKS voor de andere identiteitsscenario's (verificatie en autorisatie op besturingsvlak en cluster-naar-Azure beheerde identiteiten).

Tip

Als u een AKS Automatic-cluster gebruikt, zijn workload-id met de Microsoft Entra Workload-id en de OIDC-clusterissuer standaard vooraf geconfigureerd. U kunt het instellen op clusterniveau overslaan en rechtstreeks naar de configuratie van uw toepassing gaan om een workloadidentiteit te gebruiken. Zie Wat is Azure Kubernetes Service Automatic voor meer informatie over de standaardinstellingen voor beveiliging van AKS Automatic?

Microsoft Entra Workload-id gebruikt Service Account Token Volume Projection zodat pods een Kubernetes-identiteit kunnen gebruiken. Er wordt een Kubernetes-token uitgegeven en de OIDC-federatie (OpenID Connect) stelt Kubernetes-toepassingen in staat om veilig toegang te krijgen tot Azure-resources met Microsoft Entra ID, op basis van geannoteerde serviceaccounts.

U kunt Microsoft Entra Workload-id gebruiken met Azure Identity-clientbibliotheken of de MSAL-verzameling (Microsoft Authentication Library), samen met toepassingsregistratie, om naadloos Azure-cloudresources te verifiëren en te openen.

Notitie

U kunt serviceconnector gebruiken om bepaalde stappen automatisch te configureren. Zie Wat is Service Connector? voor meer informatie.

Vereiste voorwaarden

Automatische AKS-clusters

Op automatische AKS-clusters worden de workloadidentiteit en de OIDC-clusterverlener vooraf geconfigureerd als onderdeel van de standaardinstellingen voor beveiliging van het cluster. Er is geen configuratie op clusterniveau vereist voordat u de workloadidentiteit in uw pods gebruikt. Ga rechtstreeks verder met het instellen van uw toepassing.

AKS Standard-clusters

  • AKS ondersteunt Microsoft Entra Workload-ID op versie 1.22 en hoger.
  • Azure CLI versie 2.47.0 of hoger. Voer az --version deze uit om de versie te vinden en voer deze uit az upgrade om de versie te upgraden. Als u Azure CLI 2.0 wilt installeren of upgraden, raadpleegt u Azure CLI 2.0 installeren.
  • U moet de workload-identiteit en de OIDC-uitgever op uw cluster inschakelen voordat uw pods workload-identiteit kunnen gebruiken. Zie Workloadidentiteit implementeren en configureren op een AKS-cluster.

Beperkingen

  • U kunt maximaal 20 federatieve identiteitsreferenties per beheerde identiteit hebben.
  • Het duurt enkele seconden voordat het federatieve identiteitsbewijs is verspreid nadat dit in eerste instantie is toegevoegd.
  • De invoegtoepassing voor virtuele knooppunten , op basis van het opensource-project Virtual Kubelet, wordt niet ondersteund.
  • Het maken van federatieve identiteitsreferenties wordt niet ondersteund voor door de gebruiker toegewezen beheerde identiteiten in deze regio's.

Azure Identity-clientbibliotheken

Kies in de Azure Identity-clientbibliotheken een van de volgende methoden:

  • Gebruik DefaultAzureCredential, dat probeert de WorkloadIdentityCredential te gebruiken.
  • Maak een ChainedTokenCredential exemplaar met WorkloadIdentityCredential.
  • Rechtstreeks gebruiken WorkloadIdentityCredential .

Wanneer u tokens aanvraagt met WorkloadIdentityCredential, geeft u bereiken op in de Microsoft Entra ID v2-indeling <resource>/.default, zoals https://management.azure.com/.default. Een onbewerkte resource-URI, zoals https://management.azure.com/, kan mislukken omdat de workloadidentiteit gebruikmaakt van het Microsoft Entra v2-tokeneindpunt in plaats van de IMDS-stroom resource die wordt gebruikt door beheerde identiteit. Zie Een token ophalen voor meer informatie over hoe scopes werken in het v2-tokeneindpunt.

De volgende tabel bevat de minimale pakketversie die is vereist voor de clientbibliotheek van elk taalecosysteem:

Ecosysteem Bibliotheek Minimumversie
.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/identiteit 3.2.0
Python azure-identity 1.13.0

Codevoorbeelden voor Azure Identity-clientbibliotheek

De volgende codevoorbeelden gebruiken de DefaultAzureCredential. Dit referentietype maakt gebruik van de omgevingsvariabelen die worden geïnjecteerd door de muterende workloadidentiteit webhook om authenticatie met Azure Key Vault uit te voeren. Raadpleeg de ecosysteemspecifieke clientbibliotheken om voorbeelden te bekijken met een van de andere benaderingen.

Vervang <key-vault-url> en <secret-name> door de juiste waarden voor uw Key Vault en geheim.

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

Microsoft Authentication Library (MSAL)

De volgende clientbibliotheken zijn de minimale versie die vereist is:

Ecosysteem Bibliotheek Afbeelding Voorbeeld Heeft Windows
.NET Microsoft Authentication Library for .NET ghcr.io/azure/azure-workload-identity/msal-net:latest Koppeling Ja
Go Microsoft Authentication Library for Go ghcr.io/azure/azure-workload-identity/msal-go:latest Koppeling Ja
Java Microsoft Authentication Library-for-java ghcr.io/azure/azure-workload-identity/msal-java:latest Koppeling Nee
JavaScript Microsoft Authentication Library-for-js ghcr.io/azure/azure-workload-identity/msal-node:latest Koppeling Nee
Python Microsoft Authentication Library-for-python ghcr.io/azure/azure-workload-identity/msal-python:latest Koppeling Nee

Hoe het werkt

In dit beveiligingsmodel fungeert het AKS-cluster als de tokenverlener. Microsoft Entra ID maakt gebruik van OIDC om sleutels voor openbare ondertekening te detecteren en de echtheid van het serviceaccounttoken te verifiëren voordat het wordt uitgewisseld voor een Microsoft Entra-token. Uw workload kan een serviceaccounttoken uitwisselen dat is geprojecteerd naar het volume voor een Microsoft Entra-token met behulp van de Azure Identity-clientbibliotheek of de MSAL.

Diagram van het AKS Microsoft Entra Workload-id-beveiligingsmodel.

In de volgende tabel worden de vereiste eindpunten voor OIDC-verleners voor Microsoft Entra Workload-ID beschreven:

Eindpunt Beschrijving
{IssuerURL}/.well-known/openid-configuration Ook wel bekend als het OIDC-detectiedocument. Dit bevat de metadata over de configuraties van de uitgever.
{IssuerURL}/openid/v1/jwks Dit bevat de openbare ondertekeningssleutel(s) die door Microsoft Entra ID worden gebruikt om de echtheid van het serviceaccounttoken te verifiëren.

In het volgende diagram wordt de verificatiereeks samengevat met behulp van OIDC:

Diagram van de AKS Microsoft Entra Workload-id OIDC-verificatiereeks.

Automatische rotatie van Webhook-certificaat

Net als andere webhook-add-ons roteert de bewerking voor automatische rotatie van het clustercertificaat het webhookcertificaat van de workload-identiteit.

Serviceaccountlabels en aantekeningen

Microsoft Entra Workload-ID ondersteunt de volgende toewijzingen met betrekking tot een serviceaccount:

  • Een-op-een, waarbij een serviceaccount verwijst naar een Microsoft Entra-object.
  • Veel-op-een, waarbij meerdere serviceaccounts verwijzen naar hetzelfde Microsoft Entra-object.
  • Een-op-veel, waarbij een serviceaccount verwijst naar meerdere Microsoft Entra-objecten door de annotatie van de client-id te wijzigen. Zie Meerdere identiteiten federeren met een Kubernetes-serviceaccount voor meer informatie.

Notitie

Als u de aantekeningen van het serviceaccount bijwerkt, moet u de pod opnieuw starten om de wijzigingen van kracht te laten worden.

Als u een door Microsoft Entra-pod beheerde identiteit hebt gebruikt, kunt u een serviceaccount beschouwen als een Azure-beveiligingsprincipaal, behalve dat een serviceaccount deel uitmaakt van de Kubernetes-kern-API in plaats van een AANGEPASTe resourcedefinitie (CRD). In de volgende secties wordt een lijst met beschikbare labels en aantekeningen beschreven die u kunt gebruiken om het gedrag te configureren bij het uitwisselen van het serviceaccounttoken voor een Microsoft Entra-toegangstoken.

Aantekeningen voor serviceaccounts

Alle aantekeningen zijn optioneel. Als de aantekening niet is opgegeven, wordt de standaardwaarde gebruikt.

Annotatie Beschrijving Standaard
azure.workload.identity/client-id Vertegenwoordigt de Microsoft Entra-toepassing
client-ID die moet worden gebruikt met de pod.
azure.workload.identity/tenant-id Vertegenwoordigt de Azure-tenant-id waar de
De Microsoft Entra-toepassing is geregistreerd.
AZURE_TENANT_ID omgevingsvariabele geëxtraheerd
van azure-wi-webhook-config ConfigMap.
azure.workload.identity/service-account-token-expiration Vertegenwoordigt het expirationSeconds-veld voor het serviceaccount-token dat geprojecteerd is. Het is een optioneel veld dat u configureert om downtime te voorkomen die wordt veroorzaakt door fouten tijdens het vernieuwen van het serviceaccounttoken. Het verlopen van het token van het Kubernetes-serviceaccount is niet gecorreleerd met Microsoft Entra-tokens. Microsoft Entra-tokens verlopen binnen 24 uur nadat ze zijn uitgegeven. 3600
Ondersteund bereik is 3600-86400.

Podlabels

Notitie

Voor toepassingen die microsoft Entra Workload-id gebruiken, is het vereist om het label azure.workload.identity/use: "true" toe te voegen aan de podspecificatie voor AKS om de workloadidentiteit te verplaatsen naar een scenario met fail close om een consistent en betrouwbaar gedrag te bieden voor pods die workloadidentiteit moeten gebruiken. Anders mislukken de pods nadat ze opnieuw zijn opgestart.

Etiket Beschrijving Aanbevolen waarde Vereist
azure.workload.identity/use Dit label is vereist in de sjabloonspecificatie voor pods. Alleen pods met dit label worden gemuteerd door de azure-workload-identity muterende toelatingswebhook om de specifieke omgevingsvariabelen van Azure en het geprojecteerde tokenvolume van het serviceaccount te injecteren. true Ja

Pod-aantekeningen

Alle aantekeningen zijn optioneel. Als de aantekening niet is opgegeven, wordt de standaardwaarde gebruikt.

Annotatie Beschrijving Standaard
azure.workload.identity/service-account-token-expiration Zie Aantekeningen voor serviceaccounts voor meer informatie. Pod-annotaties hebben voorrang op annotaties van serviceaccounts 3600
Ondersteund bereik is 3600-86400.
azure.workload.identity/skip-containers Vertegenwoordigt een door puntkomma's gescheiden lijst met containers om het toevoegen van een geprojecteerde serviceaccount-tokenvolume over te slaan. Bijvoorbeeld: container1;container2. Standaard wordt het tokenvolume van het geprojecteerde serviceaccount toegevoegd aan alle containers als de pod is gelabeld met azure.workload.identity/use: true.
azure.workload.identity/inject-proxy-sidecar Er wordt een proxy-initcontainer en een proxy-sidecar in de pod geïnjecteerd. De proxy-sidecar wordt gebruikt voor het onderscheppen van tokenaanvragen voor IMDS en het verkrijgen van een Microsoft Entra-token namens de gebruiker met federatieve identiteitsreferenties. onwaar
azure.workload.identity/proxy-sidecar-port Vertegenwoordigt de poort van de proxy-sidecar. 8000

Identiteitsbindingen en directe federatie gebruiken in dezelfde workload

Identiteitsbindingen zijn een preview-functie die de workloadidentiteit uitbreidt ter ondersteuning van grootschalige AKS-omgevingen. In plaats van een federatieve identiteitsreferentie (FIC) te maken voor elk cluster, kunnen met identiteitsbindingen meerdere clusters één door de gebruiker toegewezen beheerde identiteit delen via één FIC. Indien ingeschakeld, routeert AKS podtokenaanvragen via een webhook voor de id-bindingsproxy die tokenuitwisseling verwerkt namens de workload.

Een geprojecteerd serviceaccounttoken heeft één doelgroep. Wanneer identiteitsbindingen zijn ingeschakeld, stelt de webhook voor identiteitsbinding het standaardtoken in waarnaar wordt verwezen door AZURE_FEDERATED_TOKEN_FILE de doelgroep api://AKSIdentityBinding, die door de identiteitsbindingsproxy wordt gebruikt.

Directe Microsoft Entra Workload-id federatie (zonder identiteitsbindingen) vereist een token met de doelgroepapi://AzureADTokenExchange. Het hergebruiken van het bestand met het identiteitsbindingstoken voor directe federatie mislukt met AADSTS700212 omdat de doelgroepclaim van de federatieve identiteitsreferentie niet overeenkomt met de doelgroepclaim van het token.

Als u identiteitsbindingen wilt gebruiken voor één beheerde identiteit en directe federatie voor een andere in dezelfde workload, projecteert u een tweede serviceaccounttoken met de api://AzureADTokenExchange doelgroep en wijst u de directe federatiecode aan op dat bestand:

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

Gebruik AZURE_FEDERATED_TOKEN_FILE voor de identiteitskoppelingsstroom en het aangepaste tokenbestand, zoals DIRECT_FIC_TOKEN_FILE, voor de stroom voor direct gefedereerde identiteitsreferenties.

Migreren naar Microsoft Entra Workload-id

U kunt clusters configureren waarop al een door pod beheerde identiteit wordt uitgevoerd om de Workload-id van Microsoft Entra te gebruiken op een van de volgende twee manieren:

  • Gebruik dezelfde configuratie die u hebt geïmplementeerd voor door pods beheerde identiteit. U kunt aantekeningen toevoegen aan het serviceaccount in de naamruimte met de identiteit om Microsoft Entra Workload-ID in te schakelen en de aantekeningen in de pods in te voeren.
  • Herschrijf uw toepassing om de nieuwste versie van de Azure Identity-clientbibliotheek te gebruiken.

Om het migratieproces te stroomlijnen en te vereenvoudigen, hebben we een migratie-sidecar ontwikkeld die de IMDS-transacties (Instance Metadata Service) converteert die uw toepassing uitvoert naar OIDC. De migratie-sidecar is niet bedoeld als een langetermijnoplossing, maar een manier om snel aan de slag te gaan met de Microsoft Entra Workload-id. Door de migratie-sidecar in uw toepassing uit te voeren, worden de IMDS-transacties van de toepassing naar OIDC doorverwezen. U kunt ook upgraden naar een ondersteunde versie van de Azure Identity-clientbibliotheek , die ondersteuning biedt voor OIDC-verificatie.

De volgende tabel bevat een overzicht van onze aanbevelingen voor migratie of implementatie voor uw AKS-cluster:

Scenario Beschrijving
Nieuw automatische AKS-cluster Workloadidentiteit en de OIDC-verlener zijn vooraf geconfigureerd. Er zijn geen migratie- of configuratiestappen op clusterniveau vereist. Configureer het serviceaccount en de federatieve referenties van uw toepassing en gebruik vervolgens de Azure Identity-clientbibliotheek.
Nieuw of bestaand AKS Standard-cluster met een ondersteunde versie van de Azure Identity-clientbibliotheek Er zijn geen migratiestappen vereist.
Voorbeeldimplementatieresources: Workload-id van Microsoft Entra implementeren en configureren op een nieuw cluster
Nieuwe of bestaande clusterimplementatie voert een niet-ondersteunde versie van de Azure Identity-clientbibliotheek uit Werk de containerimages bij zodat ze een ondersteunde versie van de Azure Identity-clientbibliotheek gebruiken, of gebruik de migratie-sidecar.