Använda kubelogin för att autentisera användare i Azure Kubernetes Service

Kubelogin-plugin-programmet i Azure är ett plugin-program för klient-go-autentiseringsuppgifter som implementerar Microsoft Entra-autentisering. Plugin-programmet kubelogin erbjuder funktioner som inte är tillgängliga i kubectl-kommandoradsverktyget. Mer information finns i kubelogin-introduktionen och kubectl-introduktionen.

Azure Kubernetes Service-kluster (AKS) som är integrerade med Microsoft Entra-ID och som kör Kubernetes version 1.24 eller senare använder kubelogin-formatet automatiskt.

Den här artikeln innehåller en översikt och exempel på hur du använder kubelogin för alla Microsoft Entra-autentiseringsmetoder som stöds i AKS.

Begränsningar

  • Du kan inkludera högst 200 grupper i ett JWT-anspråk (Microsoft Entra JSON Web Token). Om du har fler än 200 grupper bör du överväga att använda programroller.
  • Grupper som skapas i Microsoft Entra-ID inkluderas endast av deras ObjectID-värde och inte av deras visningsnamn. Kommandot sAMAccountName är endast tillgängligt för grupper som synkroniseras från den lokala Windows Server Active Directory.
  • I AKS fungerar autentiseringsmetoden för tjänstens huvudnamn endast med hanterat Microsoft Entra-ID och inte med den tidigare versionen Azure Active Directory.
  • Autentiseringsmetoden för enhetskod fungerar inte när en princip för villkorsstyrd åtkomst i Microsoft Entra har angetts för en Microsoft Entra-klientorganisation. I det scenariot använder du interaktiv webbläsarautentisering.

Så här fungerar autentisering

För de flesta interaktioner med kubelogin använder convert-kubeconfig du underkommandot. Underkommandot använder kubeconfig-filen som anges i --kubeconfig eller i KUBECONFIG miljövariabeln för att konvertera den slutliga kubeconfig-filen till exec-format baserat på den angivna autentiseringsmetoden.

De autentiseringsmetoder som kubelogin implementerar är Beviljandeflöden för Microsoft Entra OAuth 2.0-token. Följande parameterflaggor är vanliga att använda i kubelogin-underkommandon. I allmänhet är dessa flaggor redo att användas när du hämtar kubeconfig-filen från AKS.

  • --tenant-id: Klient-ID:t för Microsoft Entra.
  • --client-id: Program-ID för det offentliga klientprogrammet. Den här klientappen används endast i inloggningsmetoderna enhetskod, interaktiv webbläsare och OAuth 2.0-resursägare (ROPC) (arbetsflödesidentitet).
  • --server-id: Program-ID för webbappen eller resursservern. Token utfärdas till den här resursen.

Kommentar

I varje autentiseringsmetod cachelagras inte token i filsystemet.

Autentiseringsmetoder

I nästa avsnitt beskrivs autentiseringsmetoder som stöds och hur du använder dem:

  • Enhetskod
  • Azure CLI
  • Interaktiv webbläsare
  • Tjänstens huvudnamn
  • Hanterade identiteter
  • Arbetsbelastningsidentitet

Enhetskod

Enhetskod är standardautentiseringsmetoden för convert-kubeconfig underkommandot. Parametern -l devicecode är valfri. Den här autentiseringsmetoden uppmanar enhetskoden för användaren att logga in från en webbläsarsession.

Innan plugin-programmet kubelogin och exec introducerades stödde Azure-autentiseringsmetoden i kubectl endast enhetskodflödet. Den använde en tidigare version av ett bibliotek som genererar en token som har anspråket audience med ett spn: prefix. Det är inte kompatibelt med AKS-hanterat Microsoft Entra-ID, som använder ett OBO-flöde (on-behalf-of). När du kör convert-kubeconfig underkommandot tar kubelogin bort prefixet spn: från målgruppsanspråket.

Om dina krav omfattar användning av funktioner från tidigare versioner lägger du till --legacy argumentet. Om du använder kubeconfig-filen i en tidigare version av Azure Active Directory-klustret lägger kubelogin automatiskt till --legacy flaggan.

I den här inloggningsmetoden cachelagras åtkomsttoken och uppdateringstoken i katalogen ${HOME}/.kube/cache/kubelogin . Om du vill åsidosätta den här sökvägen tar du med parametern --token-cache-dir .

Om ditt AKS Microsoft Entra-integrerade kluster använder Kubernetes 1.24 eller tidigare måste du konvertera kubeconfig-filformatet manuellt genom att köra följande kommandon:

export KUBECONFIG=/path/to/kubeconfig
kubelogin convert-kubeconfig

Kör det här kubectl-kommandot för att hämta nodinformation:

kubectl get nodes

Kör följande kommando för att rensa cachelagrade token:

kubelogin remove-tokens

Kommentar

Inloggningsmetoden för enhetskod fungerar inte när en princip för villkorsstyrd åtkomst har konfigurerats för en Microsoft Entra-klientorganisation. I det här scenariot använder du den interaktiva webbläsarens metod.

Azure CLI

Azure CLI-autentiseringsmetoden använder den inloggade kontext som Azure CLI upprättar för att hämta åtkomsttoken. Token utfärdas i samma Microsoft Entra-klientorganisation som az login. kubelogin skriver inte token till tokencachefilen eftersom de redan hanteras av Azure CLI.

Kommentar

Den här autentiseringsmetoden fungerar endast med AKS-hanterat Microsoft Entra-ID.

I följande exempel visas hur du använder Azure CLI-metoden för att autentisera:

az login

export KUBECONFIG=/path/to/kubeconfig

kubelogin convert-kubeconfig -l azurecli

Kör det här kubectl-kommandot för att hämta nodinformation:

kubectl get nodes

Om Azure CLI-konfigurationskatalogen ligger utanför katalogen ${HOME} använder du parametern --azure-config-dir med convert-kubeconfig underkommandot. Kommandot genererar kubeconfig-filen med miljövariabeln konfigurerad. Du kan få samma konfiguration genom att ange miljövariabeln till den AZURE_CONFIG_DIR här katalogen när du kör ett kubectl-kommando.

Interaktiv webbläsare

Webbläsarens interaktiva autentiseringsmetod öppnar automatiskt en webbläsare för att logga in användaren. När användaren har autentiserats omdirigeras webbläsaren till den lokala webbservern med hjälp av de verifierade autentiseringsuppgifterna. Den här autentiseringsmetoden följer principen för villkorsstyrd åtkomst.

När du autentiserar med den här metoden cachelagras åtkomsttoken i katalogen ${HOME}/.kube/cache/kubelogin . Du kan åsidosätta den här sökvägen med hjälp av parametern --token-cache-dir .

Ägartoken

I följande exempel visas hur du använder en ägartoken med webbläsarens interaktiva flöde:

export KUBECONFIG=/path/to/kubeconfig

kubelogin convert-kubeconfig -l interactive

Kör det här kubectl-kommandot för att hämta nodinformation:

kubectl get nodes

Bevis på innehavstoken

I följande exempel visas hur du använder en PoP-token (Proof-of-Possession) med webbläsarens interaktiva flöde:

export KUBECONFIG=/path/to/kubeconfig

kubelogin convert-kubeconfig -l interactive --pop-enabled --pop-claims "u=/ARM/ID/OF/CLUSTER"

Kör det här kubectl-kommandot för att hämta nodinformation:

kubectl get nodes

Tjänstens huvudnamn

Den här autentiseringsmetoden använder tjänstens huvudnamn för att logga in användaren. Du kan ange autentiseringsuppgifterna genom att ange en miljövariabel eller genom att använda autentiseringsuppgifterna i ett kommandoradsargument. De autentiseringsuppgifter som stöds är ett lösenord eller ett PFX-klientcertifikat (Personal Information Exchange).

Innan du använder den här metoden bör du överväga följande begränsningar:

  • Den här metoden fungerar endast med hanterat Microsoft Entra-ID.
  • Tjänstens huvudnamn kan vara medlem i högst 200 Microsoft Entra-grupper.

Miljövariabler

I följande exempel visas hur du konfigurerar en klienthemlighet med hjälp av miljövariabler:

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>

Kör det här kubectl-kommandot för att hämta nodinformation:

kubectl get nodes

Kör sedan det här kommandot:

export KUBECONFIG=/path/to/kubeconfig

kubelogin convert-kubeconfig -l spn

export AZURE_CLIENT_ID=<SPN client ID>
export AZURE_CLIENT_SECRET=<SPN secret>

Kör det här kubectl-kommandot för att hämta nodinformation:

kubectl get nodes

Kommandoradsargument

I följande exempel visas hur du konfigurerar en klienthemlighet i ett kommandoradsargument:

export KUBECONFIG=/path/to/kubeconfig

kubelogin convert-kubeconfig -l spn --client-id <SPN client ID> --client-secret <SPN client secret>

Kör det här kubectl-kommandot för att hämta nodinformation:

kubectl get nodes

Varning

Kommandoradsargumentmetoden lagrar hemligheten i kubeconfig-filen.

Klientcertifikat

I följande exempel visas hur du konfigurerar en klienthemlighet med hjälp av ett klientcertifikat:

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>

Kör det här kubectl-kommandot för att hämta nodinformation:

kubectl get nodes

Kör sedan det här kommandot:

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>

Kör det här kubectl-kommandot för att hämta nodinformation:

kubectl get nodes

PoP-token och miljövariabler

I följande exempel visas hur du konfigurerar en PoP-token som använder en klienthemlighet som den hämtar från miljövariabler:

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>

Kör det här kubectl-kommandot för att hämta nodinformation:

kubectl get nodes

Hanterad identitet

Använd autentiseringsmetoden för hanterad identitet för program som ansluter till resurser som stöder Microsoft Entra-autentisering. Exempel är åtkomst till Azure-resurser som en virtuell Azure-dator, en VM-skalningsuppsättning eller Azure Cloud Shell.

Standardhanterad identitet

I följande exempel visas hur du använder standardhanterad identitet:

export KUBECONFIG=/path/to/kubeconfig

kubelogin convert-kubeconfig -l msi

Kör det här kubectl-kommandot för att hämta nodinformation:

kubectl get nodes

Specifik identitet

I följande exempel visas hur du använder en hanterad identitet med en specifik identitet:

export KUBECONFIG=/path/to/kubeconfig

kubelogin convert-kubeconfig -l msi --client-id <msi-client-id>

Kör det här kubectl-kommandot för att hämta nodinformation:

kubectl get nodes

Arbetsbelastningsidentitet

Autentiseringsmetoden för arbetsbelastningsidentitet använder identitetsautentiseringsuppgifter som är federerade med Microsoft Entra för att autentisera åtkomst till AKS-kluster. Metoden använder Microsoft Entra-integrerad autentisering. Det fungerar genom att ange följande miljövariabler:

  • AZURE_CLIENT_ID: Microsoft Entra-program-ID:t som är federerat med arbetsbelastningsidentiteten.
  • AZURE_TENANT_ID: Klient-ID:t för Microsoft Entra.
  • AZURE_FEDERATED_TOKEN_FILE: Filen som innehåller en signerad försäkran om arbetsbelastningsidentiteten, till exempel en Kubernetes-beräknad tjänstkontotoken (JWT).
  • AZURE_AUTHORITY_HOST: Bas-URL:en för en Microsoft Entra-utfärdare. Exempel: https://login.microsoftonline.com/

Du kan använda en arbetsbelastningsidentitet för att komma åt Kubernetes-kluster från CI/CD-system som GitHub eller ArgoCD utan att lagra autentiseringsuppgifterna för tjänstens huvudnamn i de externa systemen. Information om hur du konfigurerar OpenID Connect-federation (OIDC) från GitHub finns i OIDC-federationsexemplet.

I följande exempel visas hur du använder en arbetsbelastningsidentitet:

export KUBECONFIG=/path/to/kubeconfig

kubelogin convert-kubeconfig -l workloadidentity

Kör det här kubectl-kommandot för att hämta nodinformation:

kubectl get nodes

Så här använder du kubelogin med AKS

AKS använder ett par Microsoft Entra-program från första part. De här program-ID:na är desamma i alla miljöer.

AKS Microsoft Entra-serverprogram-ID:t som används på serversidan är 6dae42f8-4368-4678-94ff-3960e28e3630. Åtkomsttoken som kommer åt AKS-kluster måste utfärdas för det här programmet. I de flesta kubelogin-autentiseringsmetoder måste du använda --server-id med kubelogin get-token.

AKS Microsoft Entra-klientprogram-ID som kubelogin använder för att utföra offentlig klientautentisering för användarens räkning är 80faf920-1908-4b52-b5ef-a8e7bedfc67a. Klientprogram-ID:t används i metoder för interaktiv autentisering i enhetskod och webbläsare.