Verwenden von kubelogin zur Authentifizierung von Benutzerinnen und Benutzern in Azure Kubernetes Service
Das kubelogin-Plug-In in Azure ist ein Plug-In für Client-Go-Anmeldeinformationen, das die Microsoft Entra ID-Authentifizierung implementiert. Das kubelogin-Plug-In bietet Features, die im kubectl-Befehlszeilentool nicht verfügbar sind.
Azure Kubernetes Service(AKS)-Cluster, die in Microsoft Entra ID integriert sind und Kubernetes-Version 1.24 und höher ausführen, verwenden automatisch das kubelogin-Format.
Dieser Artikel enthält eine Übersicht und Beispiele dafür, wie Sie kubelogin für alle unterstützten Microsoft Entra-Authentifizierungsmethoden in AKS verwenden.
Begrenzungen
- Sie können maximal 200 Gruppen in einem JSON Web Token (JWT)-Anspruch von Microsoft Entra ID einschließen. Wenn Sie mehr als 200 Gruppen haben, sollten Sie die Verwendung von Anwendungsrollen in Erwägung ziehen.
- Gruppen, die in Microsoft Entra ID erstellt wurden, werden nur durch den Wert ihrer ObjectID und nicht durch ihren Anzeigenamen eingeschlossen. Der Befehl
sAMAccountName
ist nur für Gruppen verfügbar, die über lokales Windows Server Active Directory synchronisiert werden. - Bei AKS funktioniert die Dienstprinzipal-Authentifizierungsmethode nur mit verwaltetem Microsoft Entra ID und nicht mit der früheren Version Azure Active Directory.
- Die Gerätecode-Authentifizierungsmethode funktioniert nicht, wenn eine Richtlinie für bedingten Zugriff von Microsoft Entra auf einen Microsoft Entra-Mandanten festgelegt ist. Verwenden Sie in diesem Szenario die Authentifizierung mit dem interaktiven Webbrowser.
Funktionsweise der Authentifizierung
Für die meisten Interaktionen mit kubelogin verwenden Sie den Unterbefehl convert-kubeconfig
. Der Unterbefehl verwendet die kubeconfig-Datei, die in --kubeconfig
oder in der Umgebungsvariable KUBECONFIG
angegeben ist, um die endgültige kubeconfig-Datei basierend auf der angegebenen Authentifizierungsmethode in das exec-Format zu konvertieren.
Die Authentifizierungsmethoden, die kubelogin implementiert, sind OAuth 2.0-Tokenzuteilungs-Flows von Microsoft Entra. Die folgenden Parameterkennzeichnungen werden häufig in kubelogin-Unterbefehlen verwendet. Im Allgemeinen sind diese Flags bereit zur Benutzung, wenn Sie die kubeconfig-Datei über AKS abrufen.
--tenant-id
: Die Microsoft Entra Mandanten-ID.--client-id
: Die Anwendungs-ID der öffentlichen Clientanwendung. Diese Client-App wird nur bei den Anmeldemethoden Gerätecode, Webbrowser interaktiv und OAuth 2.0 Resource Owner Password Credentials (ROPC) (Workflow-Identität) verwendet.--server-id
: Die Anwendungs-ID der Web-App oder des Ressourcenservers. Das Token wird für diese Ressource ausgegeben.
Hinweis
Das Token wird bei keiner Authentifizierungsmethode im Dateisystem zwischengespeichert.
Authentifizierungsmethoden
In den nächsten Abschnitten werden unterstützte Authentifizierungsmethoden und deren Verwendung beschrieben:
- Gerätecode
- Azure CLI
- Webbrowser interaktiv
- Dienstprinzipal
- Verwaltete Identität
- Workloadidentität
Gerätecode
Der Gerätecode ist die Standardauthentifizierungsmethode für den Unterbefehl convert-kubeconfig
. Das -l devicecode
ist optional. Bei dieser Authentifizierungsmethode wird der Gerätecode abgefragt, damit sich die Benutzerinnen und Benutzer über eine Browsersitzung anmelden können.
Bevor die kubelogin- und exec-Plug-Ins eingeführt wurden, unterstützte die Azure-Authentifizierungsmethode in kubectl nur den Gerätecode-Flow. Es wurde eine frühere Version einer Bibliothek verwendet, die ein Token erzeugt, das den audience
-Anspruch mit einem spn:
-Präfix aufweist. Es ist nicht kompatibel mit von AKS verwaltetem Microsoft Entra ID, das einen im Auftrag von (on-behalf-of, OBO) Fluss verwendet. Wenn Sie den Unterbefehl convert-kubeconfig
ausführen, entfernt kubelogin das Präfix spn:
vom Zielgruppenanspruch.
Wenn Ihre Anforderungen die Verwendung von Funktionen aus früheren Versionen beinhalten, fügen Sie das Argument --legacy
hinzu. Wenn Sie die kubeconfig-Datei in einem früheren Azure Active Directory-Cluster verwenden, fügt kubelogin automatisch das Flag --legacy
hinzu.
Bei dieser Anmeldemethode werden das Zugriffstoken und das Aktualisierungstoken im Verzeichnis ${HOME}/.kube/cache/kubelogin zwischengespeichert. Verwenden Sie den Parameter --token-cache-dir
, um diese Einstellung zu überschreiben.
Wenn Ihr integrierter AKS Microsoft Entra-Cluster Kubernetes 1.24 oder früher verwendet, müssen Sie das kubeconfig-Dateiformat manuell konvertieren, indem Sie die folgenden Befehle ausführen:
export KUBECONFIG=/path/to/kubeconfig
kubelogin convert-kubeconfig
Führen Sie diesen kubectl-Befehl aus, um Knoteninformationen abzurufen:
kubectl get nodes
Führen Sie zum Bereinigen der zwischengespeicherten Token den folgenden Befehl aus:
kubelogin remove-tokens
Hinweis
Die Gerätecode-Anmeldemethode funktioniert nicht, wenn die Richtlinie für bedingten Zugriff in einem Microsoft Entra-Mandanten konfiguriert ist. Verwenden Sie in diesem Szenario die Methode Webbrowser interaktiv.
Azure CLI
Die Azure CLI-Authentifizierungsmethode verwendet den angemeldeten Kontext, den die Azure CLI zum Abrufen des Zugriffstokens herstellt. Das Token wird im selben Microsoft Entra-Mandanten wie az login
ausgegeben. Kubelogin schreibt keine Token in die Tokencachedatei, da sie bereits von der Azure CLI verwaltet werden.
Hinweis
Diese Authentifizierungsmethode funktioniert nur mit dem von AKS verwalteten Microsoft Entra ID.
Das folgende Beispiel zeigt, wie Sie die Azure CLI-Methode verwenden, um sich zu authentifizieren:
az login
export KUBECONFIG=/path/to/kubeconfig
kubelogin convert-kubeconfig -l azurecli
Führen Sie diesen kubectl-Befehl aus, um Knoteninformationen abzurufen:
kubectl get nodes
Wenn sich das Azure CLI-Konfigurationsverzeichnis außerhalb des Verzeichnisses ${HOME} befindet, geben Sie den Parameter --azure-config-dir
mit dem Unterbefehl convert-kubeconfig
an. Der Befehl generiert die kubeconfig-Datei mit der konfigurierten Umgebungsvariable. Sie können dieselbe Konfiguration erhalten, indem Sie die Umgebungsvariable AZURE_CONFIG_DIR
auf dieses Verzeichnis festlegen, wenn Sie den kubectl-Befehl ausführen.
Webbrowser interaktiv
Die Authentifizierungsmethode Webbrowser interaktiv öffnet automatisch einen Webbrowser zur Anmeldung der Benutzerin bzw. des Benutzers. Nachdem die Benutzerin bzw. der Benutzer authentifiziert wurde, leitet der Browser mithilfe der überprüften Anmeldeinformationen an den lokalen Webserver um. Diese Authentifizierungsmethode entspricht der Richtlinie für bedingten Zugriff.
Wenn Sie sich mithilfe dieser Methode authentifizieren, wird das Zugriffstoken im Verzeichnis ${HOME}/.kube/cache/kubelogin zwischengespeichert. Sie können diesen Pfad mit dem Parameter --token-cache-dir
überschreiben.
Bearer token
Das folgende Beispiel zeigt, wie Sie ein Bearertoken mit interaktivem Flow des Webbrowsers verwenden:
export KUBECONFIG=/path/to/kubeconfig
kubelogin convert-kubeconfig -l interactive
Führen Sie diesen kubectl-Befehl aus, um Knoteninformationen abzurufen:
kubectl get nodes
Besitznachweistoken (Proof-of-Possession, PoP)
Das folgende Beispiel zeigt, wie Sie ein PoP-Token mit interaktivem Flow verwenden:
export KUBECONFIG=/path/to/kubeconfig
kubelogin convert-kubeconfig -l interactive --pop-enabled --pop-claims "u=/ARM/ID/OF/CLUSTER"
Führen Sie diesen kubectl-Befehl aus, um Knoteninformationen abzurufen:
kubectl get nodes
Dienstprinzipal
Diese Authentifizierungsmethode verwendet einen Dienstprinzipal, um eine Benutzerin oder einen Benutzer anzumelden. Sie können die Anmeldeinformationen bereitstellen, indem Sie eine Umgebungsvariable festlegen oder die Anmeldeinformationen in einem Befehlszeilenargument verwenden. Die unterstützten Anmeldeinformationen, die Sie verwenden können, sind ein Kennwort oder ein PFX-Clientzertifikat (Personal Information Exchange).
Bevor Sie diese Methode verwenden, sollten Sie folgende Einschränkungen beachten:
- Diese Methode funktioniert nur mit verwaltetem Microsoft Entra ID.
- Der Dienstprinzipal darf ein Mitglied von maximal 200 Microsoft Entra-Gruppen sein.
Umgebungsvariablen
Das folgende Beispiel zeigt, wie Sie einen geheimen Clientschlüssel mithilfe von Umgebungsvariablen einrichten:
export KUBECONFIG=/path/to/kubeconfig
kubelogin convert-kubeconfig -l spn
export AAD_SERVICE_PRINCIPAL_CLIENT_ID=<Service Principal Name (SPN) client ID>
export AAD_SERVICE_PRINCIPAL_CLIENT_SECRET=<SPN secret>
Führen Sie diesen kubectl-Befehl aus, um Knoteninformationen abzurufen:
kubectl get nodes
Führen Sie dann den folgenden Befehl aus:
export KUBECONFIG=/path/to/kubeconfig
kubelogin convert-kubeconfig -l spn
export AZURE_CLIENT_ID=<SPN client ID>
export AZURE_CLIENT_SECRET=<SPN secret>
Führen Sie diesen kubectl-Befehl aus, um Knoteninformationen abzurufen:
kubectl get nodes
Befehlszeilenargument
Das folgende Beispiel zeigt, wie Sie einen geheimen Clientschlüssel in einem Befehlszeilenargument einrichten:
export KUBECONFIG=/path/to/kubeconfig
kubelogin convert-kubeconfig -l spn --client-id <SPN client ID> --client-secret <SPN client secret>
Führen Sie diesen kubectl-Befehl aus, um Knoteninformationen abzurufen:
kubectl get nodes
Warnung
Die Befehlszeilenargumentmethode speichert den geheimen Schlüssel in der kubeconfig-Datei.
Clientzertifikat
Das folgende Beispiel zeigt, wie Sie einen geheimen Clientschlüssel mithilfe eines Clientzertifikats einrichten:
export KUBECONFIG=/path/to/kubeconfig
kubelogin convert-kubeconfig -l spn
export AAD_SERVICE_PRINCIPAL_CLIENT_ID=<SPN client ID>
export AAD_SERVICE_PRINCIPAL_CLIENT_CERTIFICATE=/path/to/cert.pfx
export AAD_SERVICE_PRINCIPAL_CLIENT_CERTIFICATE_PASSWORD=<PFX password>
Führen Sie diesen kubectl-Befehl aus, um Knoteninformationen abzurufen:
kubectl get nodes
Führen Sie dann den folgenden Befehl aus:
export KUBECONFIG=/path/to/kubeconfig
kubelogin convert-kubeconfig -l spn
export AZURE_CLIENT_ID=<SPN client ID>
export AZURE_CLIENT_CERTIFICATE_PATH=/path/to/cert.pfx
export AZURE_CLIENT_CERTIFICATE_PASSWORD=<PFX password>
Führen Sie diesen kubectl-Befehl aus, um Knoteninformationen abzurufen:
kubectl get nodes
PoP-Token und Umgebungsvariablen
Das folgende Beispiel zeigt, wie Sie ein PoP-Token mithilfe eines geheimen Clientschlüssels aus Umgebungsvariablen einrichten:
export KUBECONFIG=/path/to/kubeconfig
kubelogin convert-kubeconfig -l spn --pop-enabled --pop-claims "u=/ARM/ID/OF/CLUSTER"
export AAD_SERVICE_PRINCIPAL_CLIENT_ID=<SPN client ID>
export AAD_SERVICE_PRINCIPAL_CLIENT_SECRET=<SPN secret>
Führen Sie diesen kubectl-Befehl aus, um Knoteninformationen abzurufen:
kubectl get nodes
Verwaltete Identität
Verwenden Sie die Authentifizierungsmethode mit einer verwalteten Identität für Anwendungen, die eine Verbindung mit Ressourcen herstellen, die die Microsoft Entra-Authentifizierung unterstützen. Beispiele hierfür sind der Zugriff auf Azure-Ressourcen wie ein Azure-VM, ein VM-Skalierungsgruppe oder die Azure Cloud Shell.
Standardmäßige verwaltete Identität
Das folgende Beispiel zeigt, wie Sie die standardmäßige verwaltete Identität verwenden:
export KUBECONFIG=/path/to/kubeconfig
kubelogin convert-kubeconfig -l msi
Führen Sie diesen kubectl-Befehl aus, um Knoteninformationen abzurufen:
kubectl get nodes
Spezifische Identität
Das folgende Beispiel zeigt, wie Sie eine verwaltete Identität mit einer spezifischen Identität verwenden:
export KUBECONFIG=/path/to/kubeconfig
kubelogin convert-kubeconfig -l msi --client-id <msi-client-id>
Führen Sie diesen kubectl-Befehl aus, um Knoteninformationen abzurufen:
kubectl get nodes
Workloadidentität
Die Workload-Identitätsauthentifizierungsmethode verwendet Identitätsanmeldeinformationen, die mit Microsoft Entra verbunden sind, um den Zugriff auf AKS-Cluster zu authentifizieren. Die Methode verwendet die integrierte Microsoft Entra-Authentifizierung. Sie funktioniert durch Festlegen der folgenden Umgebungsvariablen:
AZURE_CLIENT_ID
: Die Microsoft Entra-Anwendungs-ID, die mit der Workloadidentität verbunden wird.AZURE_TENANT_ID
: Die Microsoft Entra Mandanten-ID.AZURE_FEDERATED_TOKEN_FILE
: Die Datei, die eine signierte Bestätigung der Workload-Identität enthält, wie z. B. ein Kubernetes Projected Service Account (JWT) Token.AZURE_AUTHORITY_HOST
: Die Basis-URL einer Microsoft Entra Authority. Beispiel:https://login.microsoftonline.com/
.
Sie können eine Workloadidentität verwenden, um auf Kubernetes-Cluster aus einem CI/CD-System wie GitHub oder ArgoCD zuzugreifen, ohne Dienstprinzipalanmeldeinformationen in den externen Systemen zu speichern. Informationen zum Konfigurieren des OpenID Connect (OIDC)-Partnerverbunds von GitHub finden Sie im OIDC-Verbundbeispiel.
Das folgende Beispiel zeigt, wie Sie eine Workloadidentität verwenden:
export KUBECONFIG=/path/to/kubeconfig
kubelogin convert-kubeconfig -l workloadidentity
Führen Sie diesen kubectl-Befehl aus, um Knoteninformationen abzurufen:
kubectl get nodes
Verwenden von kubelogin mit AKS
AKS verwendet ein Paar von Microsoft Entra-Anwendungen von Erstanbietern. Diese Anwendungs-IDs sind in allen Umgebungen identisch.
Die Serveranwendungs-ID von Microsoft Entra ID für AKS, die serverseitig verwendet wird, lautet 6dae42f8-4368-4678-94ff-3960e28e3630
. Der Zugriffstoken, das auf AKS-Cluster zugreift, muss für diese Anwendung ausgestellt werden. In den meisten kubelogin-Authentifizierungsmethoden müssen Sie --server-id
mit kubelogin get-token
verwenden.
Die Clientanwendungs-ID von Microsoft Entra für AKS, die von kubelogin zum Ausführen der öffentlichen Clientauthentifizierung im Auftrag des Benutzers bzw. der Benutzerin verwendet wird, lautet 80faf920-1908-4b52-b5ef-a8e7bedfc67a
. Die Clientanwendungs-ID wird als Teil der Authentifizierungsmethoden Gerätecode und Webbrowser interaktiv verwendet.
Zugehöriger Inhalt
- Im Anleitungsartikel Von AKS verwaltete Microsoft Entra ID-Integration erfahren Sie, wie Sie AKS in Microsoft Entra ID integrieren.
- Informationen zu den ersten Schritten mit verwalteten Identitäten in AKS finden Sie unter Verwenden einer verwalteten Identität in AKS.
- Informationen zu den ersten Schritten mit Workloadidentitäten in AKS finden Sie unter Verwenden einer Workloadidentität in AKS.
Azure Kubernetes Service