Freigeben über


Verwenden der Microsoft Entra-Workload-ID mit Azure Kubernetes Service (AKS)

Workloads, die auf einem AKS-Cluster bereitgestellt werden, erfordern Microsoft Entra-Anwendungsanmeldeinformationen oder verwaltete Identitäten für den Zugriff auf geschützte Microsoft Entra-Ressourcen, z. B. Azure Key Vault und Microsoft Graph. Die Microsoft Entra Workload-ID ist in die funktionen integriert, die für Kubernetes nativ sind, um mit externen Identitätsanbietern zu verbinden, sodass Sie Ihren Workloads Arbeitsauslastungsidentitäten zuweisen können, um andere Dienste und Ressourcen zu authentifizieren und darauf zuzugreifen.

Microsoft Entra Workload ID verwendet die Dienstkontotoken-Volumenprojektion (oder ein Dienstkonto), um Pods die Nutzung einer Kubernetes-Identität zu ermöglichen. Ein Kubernetes-Token wird ausgegeben, und der OpenID Connect (OIDC)-Partnerverbund ermöglicht Kubernetes-Anwendungen den sicheren Zugriff auf Azure-Ressourcen mit Microsoft Entra-ID basierend auf kommentierten Dienstkonten.

Sie können microsoft Entra Workload ID mit Azure Identity-Clientbibliotheken oder der MsAL-Sammlung ( Microsoft Authentication Library ) zusammen mit der Anwendungsregistrierung verwenden, um Azure Cloud-Ressourcen nahtlos zu authentifizieren und darauf zuzugreifen.

Hinweis

Sie können den Dienstconnector verwenden, um einige Schritte automatisch zu konfigurieren. Weitere Informationen finden Sie unter Was ist Service Connector?

Voraussetzungen

  • AKS unterstützt Microsoft Entra-Workload-IDs ab Version 1.22.
  • Azure CLI-Version 2.47.0 oder höher. Führen Sie az --version aus, um die Version zu finden, und führen Sie az upgrade aus, um ein Upgrade für die Version durchzuführen. Informationen zum Durchführen einer Installation oder eines Upgrades finden Sie bei Bedarf unter Installieren der Azure CLI.

Einschränkungen

Azure Identity-Clientbibliotheken

Wählen Sie in den Azure Identity-Clientbibliotheken einen der folgenden Ansätze aus:

  • Verwenden Sie DefaultAzureCredential, die versucht, die WorkloadIdentityCredential zu verwenden.
  • Erstellen Sie eine ChainedTokenCredential-Instanz, die WorkloadIdentityCredential enthält.
  • Verwenden Sie WorkloadIdentityCredential direkt.

Die folgende Tabelle enthält die Mindestpaketversion , die für die Clientbibliothek jedes Sprachökosystems erforderlich ist:

Ökosystem Bibliothek Mindestversion
.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

Codebeispiele für die Azure Identity-Clientbibliothek

Die folgenden Codebeispiele verwenden die DefaultAzureCredential. Dieser Typ von Anmeldeinformationen verwendet die Umgebungsvariablen, die von der Workload-Identitätsmutation Webhook injiziert werden, um sich mit Azure Key Vault zu authentifizieren. Um Beispiele mit einem der anderen Ansätze zu sehen, konsultieren Sie die ökosystemspezifischen Clientbibliotheken.

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)

Die folgenden Clientbibliotheken sind die Mindestversion erforderlich:

Ökosystem Bibliothek Abbildung Beispiel Verfügt über Windows
.NET microsoft-authentication-library-for-dotnet ghcr.io/azure/azure-workload-identity/msal-net:latest Link Ja
Go microsoft-authentication-library-for-go ghcr.io/azure/azure-workload-identity/msal-go:latest Link Ja
Java Microsoft-Authentifizierungsbibliothek für Java ghcr.io/azure/azure-workload-identity/msal-java:latest Link Nein
JavaScript microsoft-authentication-library-for-js ghcr.io/azure/azure-workload-identity/msal-node:latest Link Nein
Python Microsoft Authentication Library-for-python ghcr.io/azure/azure-workload-identity/msal-python:latest Link Nein

Funktionsweise

In diesem Sicherheitsmodell fungiert der AKS-Cluster als Tokenaussteller. Microsoft Entra ID verwendet OIDC, um öffentliche Signierschlüssel zu ermitteln und die Authentizität des Tokens für das Dienstkonto zu überprüfen, bevor es gegen ein Microsoft Entra Token ausgetauscht wird. Ihr Workload kann ein auf sein Volume projiziertes Dienstkonto-Token mit Hilfe der Azure Identity Client-Bibliothek oder der MSAL gegen ein Microsoft Entra-Token austauschen.

Diagramm des Sicherheitsmodells der AKS Microsoft Entra Workload ID.

In der folgenden Tabelle werden die erforderlichen OIDC-Ausstellerendpunkte für die Microsoft Entra-Workload-ID beschrieben:

Endpunkt BESCHREIBUNG
{IssuerURL}/.well-known/openid-configuration Auch als OIDC-Ermittlungsdokument bezeichnet. Es enthält die Metadaten zu den Konfigurationen des Ausstellers.
{IssuerURL}/openid/v1/jwks Es enthält die öffentlichen Signaturschlüssel, die Microsoft Entra ID verwendet, um die Authentizität des Dienstkontotokens zu überprüfen.

Das folgende Diagramm fasst die Authentifizierungssequenz mithilfe von OIDC zusammen:

Diagramm der AKS Microsoft Entra Workload ID OIDC-Authentifizierungssequenz.

Automatische Drehung des Webhook-Zertifikats

Ähnlich wie bei anderen Webhook-Add-Ons dreht der Automatische Drehungsvorgang des Clusterzertifikats das Zertifikat.

Dienstkontobezeichnungen und -anmerkungen

Die Microsoft Entra-Workload-ID unterstützt die folgenden Zuordnungen im Zusammenhang mit einem Dienstkonto:

  • 1:1, wobei ein Dienstkonto auf ein Microsoft Entra-Objekt verweist.
  • Many-to-one, bei dem mehrere Dienstkonten auf das gleiche Microsoft Entra-Objekt verweisen.
  • One-to-many, bei dem ein Dienstkonto auf mehrere Microsoft Entra-Objekte verweist, indem es die Annotation der Client ID ändert. Weitere Informationen finden Sie unter Verbinden mehrerer Identitäten mit einem Kubernetes-Dienstkonto.

Hinweis

Wenn Sie die Dienstkontoanmerkungen aktualisieren, müssen Sie den Pod neu starten, damit die Änderungen wirksam werden.

Wenn Sie eine podseitig verwaltete Microsoft Entra-Identität verwendet haben, können Sie sich das Dienstkonto wie einen Azure-Dienstprinzipal vorstellen, mit dem Unterschied, dass ein Dienstkonto Teil der Kubernetes-Kern-API ist und keine benutzerdefinierte Ressourcendefinition. In den folgenden Abschnitten wird eine Liste der verfügbaren Bezeichnungen und Anmerkungen beschrieben, mit denen Sie das Verhalten beim Austauschen des Dienstkontotokens für ein Microsoft Entra-Zugriffstoken konfigurieren können.

Dienstkontoanmerkungen

Alle Anmerkungen sind optional. Wenn die Anmerkung nicht angegeben ist, wird der Standardwert verwendet.

Anmerkung BESCHREIBUNG Standard
azure.workload.identity/client-id Stellt die Client-ID der Microsoft Entra-Anwendung dar
die mit dem Pod verwendet werden soll.
azure.workload.identity/tenant-id Stellt die Azure-Mandanten-ID dar, in der die
Microsoft Entra-Anwendung registriert ist.
Umgebungsvariable AZURE_TENANT_ID,
aus ConfigMap azure-wi-webhook-config extrahiert
azure.workload.identity/service-account-token-expiration Stellt das expirationSeconds-Feld für das projizierte Dienstkontotoken dar. Es ist ein optionales Feld, das Sie konfigurieren können, um Ausfallzeiten zu verhindern, die durch Fehler während der Aktualisierung des Dienstkontotokens verursacht werden. Ablaufdatum des Kubernetes-Dienstkontotokens korreliert nicht mit Microsoft Entra-Token. Microsoft Entra-Token sind 24 Stunden gültig, nachdem sie ausgestellt wurden. 3600
Der unterstützte Bereich ist 3600-86400.

Podbezeichnungen

Hinweis

Für Anwendungen, die die Microsoft Entra Workload-ID verwenden, ist es erforderlich, die Bezeichnung azure.workload.identity/use: "true" der Podspezifikation für AKS hinzuzufügen, um die Workloadidentität in ein Fail Close-Szenario zu verschieben, um ein konsistentes und zuverlässiges Verhalten für Pods bereitzustellen, die die Workloadidentität verwenden müssen. Andernfalls schlagen die Pods nach einem Neustart fehl.

Bezeichnung BESCHREIBUNG Empfohlener Wert Erforderlich
azure.workload.identity/use Diese Bezeichnung ist in der Podvorlagenspezifikation erforderlich. Nur Pods mit dieser Bezeichnung werden durch den Webhook für mutierende Zulassungen „azure-workload-identity“ verändert, um die Azure-spezifischen Umgebungsvariablen und das angepasste Dienstkontotoken-Volumen einzuschleusen. true Ja

Podanmerkungen

Alle Anmerkungen sind optional. Wenn die Anmerkung nicht angegeben ist, wird der Standardwert verwendet.

Anmerkung BESCHREIBUNG Standard
azure.workload.identity/service-account-token-expiration Details finden Sie unter Dienstkontoanmerkungen . Pod-Anmerkungen haben Vorrang vor Dienstkontoanmerkungen. 3600
Der unterstützte Bereich ist 3600-86400.
azure.workload.identity/skip-containers Stellt eine durch Semikolons getrennte Containerliste dar, um das Hinzufügen von projizierten Dienstkontotokenvolumes zu überspringen. Beispiel: container1;container2. Standardmäßig wird das projizierte Token-Volumen des Dienstkontos zu allen Containern hinzugefügt, wenn der Pod mit azure.workload.identity/use: true gekennzeichnet ist.
azure.workload.identity/inject-proxy-sidecar Fügt einen Proxy-Init-Container und einen Proxy-Sidecar in den Pod ein. Der Proxy-Sidecar wird verwendet, um Tokenanforderungen an IMDS abzufangen und ein Microsoft Entra-Token im Auftrag des Benutzers bzw. der Benutzerin mit Anmeldeinformationen für eine Verbundidentität zu erwerben. Falsch
azure.workload.identity/proxy-sidecar-port Stellt den Port des Proxy-Sidecars dar. 8.000

Migrieren zur Microsoft Entra Workload-ID

Sie können Cluster konfigurieren, die bereits eine podverwaltete Identität ausführen, um die Microsoft Entra Workload-ID auf eine von zwei Arten zu verwenden:

  • Verwenden Sie dieselbe Konfiguration, die Sie für die verwaltete Pod-Identität implementiert haben. Sie können dem Dienstkonto im Namespace eine Anmerkung mit der Identität hinzufügen, um Microsoft Entra Workload ID zu aktivieren und die Anmerkungen in die Pods einzufügen.
  • Schreiben Sie Ihre Anwendung neu, um die neueste Version der Azure Identity-Clientbibliothek zu verwenden.

Um den Migrationsprozess zu optimieren und zu vereinfachen, haben wir ein Migrations-Sidecar entwickelt, mit dem die Transaktionen des Instanzmetadatendiensts (Instance Metadata Service, IMDS) konvertiert werden, die Ihre Anwendung in OIDC übergibt. Der Migrations-Sidecar ist nicht als langfristige Lösung gedacht, sondern als eine Möglichkeit, schnell mit Microsoft Entra Workload ID zu arbeiten. Wenn Sie den Migrations-Sidecar innerhalb Ihrer Anwendung ausführen, werden die IMDS-Transaktionen der Anwendung an OIDC weitergeleitet. Ein anderer Ansatz besteht darin, ein Upgrade einer unterstützten Version der Azure Identity-Clientbibliothek durchzuführen, die die OIDC-Authentifizierung unterstützt.

In der folgenden Tabelle sind unsere Migrations- oder Bereitstellungsempfehlungen für Ihren AKS-Cluster zusammengefasst:

Szenario BESCHREIBUNG
Neue oder vorhandene Clusterbereitstellung führt eine unterstützte Version der Azure Identity-Clientbibliothek aus. Es sind keine Migrationsschritte erforderlich.
Beispielbereitstellungsressourcen: Bereitstellen und Konfigurieren der Microsoft Entra Workload-ID in einem neuen Cluster
Neue oder vorhandene Clusterbereitstellung führt eine nicht unterstützte Version der Azure Identity-Clientbibliothek aus. Aktualisieren Sie das Containerimage, um eine unterstützte Version des Azure Identity SDK zu verwenden, oder verwenden Sie den Migrations-Sidecar.

Nächste Schritte