Použití kubeloginu k ověřování uživatelů ve službě Azure Kubernetes Service

Modul plug-in kubelogin v Azure je modul plug-in přihlašovacích údajů klienta, který implementuje ověřování Microsoft Entra. Modul plug-in kubelogin nabízí funkce, které nejsou dostupné v nástroji příkazového řádku kubectl.

Clustery Azure Kubernetes Service (AKS), které jsou integrované s ID Microsoft Entra a spouštět Kubernetes verze 1.24 nebo novější, automaticky používají formát kubelogin.

Tento článek obsahuje přehled a příklady použití kubelogin pro všechny podporované metody ověřování Microsoft Entra v AKS.

Omezení

  • Do deklarace identity webového tokenu Microsoft Entra JSON (JWT) můžete zahrnout maximálně 200 skupin. Pokud máte více než 200 skupin, zvažte použití aplikačních rolí.
  • Skupiny vytvořené v ID Microsoft Entra jsou zahrnuty pouze podle jejich hodnoty ObjectID , a ne podle jejich zobrazovaného názvu. Příkaz sAMAccountName je k dispozici pouze pro skupiny, které jsou synchronizované z místní služby Windows Server Active Directory.
  • V AKS funguje metoda ověřování instančního objektu pouze se spravovaným ID Microsoft Entra, a ne se starší verzí Azure Active Directory.
  • Metoda ověřování kódu zařízení nefunguje, pokud je v tenantovi Microsoft Entra nastavená zásada podmíněného přístupu Microsoft Entra. V tomto scénáři použijte interaktivní ověřování ve webovém prohlížeči.

Jak funguje ověřování

Pro většinu interakcí s kubeloginem použijete convert-kubeconfig podpříkaz. Podpříkaz používá soubor kubeconfig zadaný v --kubeconfig proměnné prostředí nebo v KUBECONFIG proměnné prostředí k převodu konečného souboru kubeconfig na formát exec na základě zadané metody ověřování.

Metody ověřování, které kubelogin implementují, jsou toky udělení tokenu Microsoft Entra OAuth 2.0. Následující příznaky parametrů se běžně používají v dílčích příkazech kubelogin. Obecně platí, že tyto příznaky jsou připravené k použití při získání souboru kubeconfig z AKS.

  • --tenant-id: ID tenanta Microsoft Entra.
  • --client-id: ID aplikace veřejné klientské aplikace. Tato klientská aplikace se používá pouze v metodách přihlašování pomocí kódu zařízení, interaktivního webového prohlížeče a přihlašovacích údajů vlastníka prostředku OAuth 2.0 (ROPC) (identita pracovního postupu).
  • --server-id: ID aplikace webové aplikace nebo serveru prostředků. Token se vydává pro tento prostředek.

Poznámka:

V každé metodě ověřování není token uložen v mezipaměti systému souborů.

Metody ověřování

Následující části popisují podporované metody ověřování a jejich použití:

  • Kód zařízení
  • Azure CLI
  • Interaktivní webový prohlížeč
  • Instanční objekt
  • Spravovaná identita
  • Identita úloh

Kód zařízení

Kód zařízení je výchozí metoda ověřování pro convert-kubeconfig podpříkaz. Parametr -l devicecode je volitelný. Tato metoda ověřování vyzve kód zařízení, aby se uživatel přihlásil z relace prohlížeče.

Než byly zavedeny moduly plug-in kubelogin a exec, metoda ověřování Azure v kubectl podporovala pouze tok kódu zařízení. Použila starší verzi knihovny, která vytváří token s audience deklarací identity s předponou spn: . Není kompatibilní s AKS spravovaným ID Microsoft Entra, které používá tok on-behalf-of (OBO). Při spuštění podpříkazu convert-kubeconfig kubelogin odebere předponu spn: z deklarace cílové skupiny.

Pokud vaše požadavky zahrnují použití funkcí z dřívějších verzí, přidejte --legacy argument. Pokud používáte soubor kubeconfig ve starší verzi clusteru Azure Active Directory, kubelogin automaticky přidá --legacy příznak.

V této metodě přihlášení se přístupový token a obnovovací token ukládají do mezipaměti v adresáři ${HOME}/.kube/cache/kubelogin . Pokud chcete tuto cestu přepsat, zahrňte parametr --token-cache-dir .

Pokud váš integrovaný cluster AKS Microsoft Entra používá Kubernetes 1.24 nebo starší, musíte ručně převést formát souboru kubeconfig spuštěním následujících příkazů:

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

Spuštěním tohoto příkazu kubectl získejte informace o uzlu:

kubectl get nodes

Pokud chcete vyčistit tokeny uložené v mezipaměti, spusťte následující příkaz:

kubelogin remove-tokens

Poznámka:

Metoda přihlášení kódu zařízení nefunguje, když je v tenantovi Microsoft Entra nakonfigurovaná zásada podmíněného přístupu. V tomto scénáři použijte interaktivní metodu webového prohlížeče.

Azure CLI

Metoda ověřování Azure CLI používá přihlášený kontext, který Azure CLI vytvoří k získání přístupového tokenu. Token se vydává ve stejném tenantovi Microsoft Entra jako az login. Kubelogin nezapisuje tokeny do souboru mezipaměti tokenů, protože je už spravuje Azure CLI.

Poznámka:

Tato metoda ověřování funguje pouze se spravovaným ID Microsoft Entra pro AKS.

Následující příklad ukazuje, jak použít metodu Azure CLI k ověření:

az login

export KUBECONFIG=/path/to/kubeconfig

kubelogin convert-kubeconfig -l azurecli

Spuštěním tohoto příkazu kubectl získejte informace o uzlu:

kubectl get nodes

Pokud je konfigurační adresář Azure CLI mimo adresář ${HOME} , použijte --azure-config-dir parametr s podpříkazem convert-kubeconfig . Příkaz vygeneruje soubor kubeconfig s nakonfigurovanou proměnnou prostředí. Stejnou konfiguraci můžete získat nastavením AZURE_CONFIG_DIR proměnné prostředí do tohoto adresáře při spuštění příkazu kubectl.

Interaktivní webový prohlížeč

Interaktivní metoda ověřování webového prohlížeče automaticky otevře webový prohlížeč pro přihlášení uživatele. Po ověření uživatele se prohlížeč přesměruje na místní webový server pomocí ověřených přihlašovacích údajů. Tato metoda ověřování splňuje zásady podmíněného přístupu.

Při ověřování pomocí této metody se přístupový token ukládá do mezipaměti v adresáři ${HOME}/.kube/cache/kubelogin . Tuto cestu můžete přepsat pomocí parametru --token-cache-dir .

Nosný token

Následující příklad ukazuje, jak používat nosný token s interaktivním tokem webového prohlížeče:

export KUBECONFIG=/path/to/kubeconfig

kubelogin convert-kubeconfig -l interactive

Spuštěním tohoto příkazu kubectl získejte informace o uzlu:

kubectl get nodes

Doklad o vlastnictví tokenu

Následující příklad ukazuje, jak použít token Proof-of-Possession (PoP) s interaktivním tokem webového prohlížeče:

export KUBECONFIG=/path/to/kubeconfig

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

Spuštěním tohoto příkazu kubectl získejte informace o uzlu:

kubectl get nodes

Instanční objekt

Tato metoda ověřování používá instanční objekt k přihlášení uživatele. Přihlašovací údaje můžete zadat nastavením proměnné prostředí nebo použitím přihlašovacích údajů v argumentu příkazového řádku. Podporované přihlašovací údaje, které můžete použít, jsou heslo nebo klientský certifikát PFX (Personal Information Exchange).

Před použitím této metody zvažte následující omezení:

  • Tato metoda funguje pouze se spravovaným ID Microsoft Entra.
  • Instanční objekt může být členem maximálně 200 skupin Microsoft Entra.

Proměnné prostředí

Následující příklad ukazuje, jak nastavit tajný klíč klienta pomocí proměnných prostředí:

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>

Spuštěním tohoto příkazu kubectl získejte informace o uzlu:

kubectl get nodes

Pak spusťte tento příkaz:

export KUBECONFIG=/path/to/kubeconfig

kubelogin convert-kubeconfig -l spn

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

Spuštěním tohoto příkazu kubectl získejte informace o uzlu:

kubectl get nodes

Argument příkazového řádku

Následující příklad ukazuje, jak nastavit tajný klíč klienta v argumentu příkazového řádku:

export KUBECONFIG=/path/to/kubeconfig

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

Spuštěním tohoto příkazu kubectl získejte informace o uzlu:

kubectl get nodes

Upozorňující

Metoda argumentu příkazového řádku ukládá tajný kód do souboru kubeconfig.

Klientský certifikát

Následující příklad ukazuje, jak nastavit tajný klíč klienta pomocí klientského certifikátu:

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>

Spuštěním tohoto příkazu kubectl získejte informace o uzlu:

kubectl get nodes

Pak spusťte tento příkaz:

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>

Spuštěním tohoto příkazu kubectl získejte informace o uzlu:

kubectl get nodes

Token PoP a proměnné prostředí

Následující příklad ukazuje, jak nastavit token PoP, který používá tajný klíč klienta, který získává z proměnných prostředí:

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>

Spuštěním tohoto příkazu kubectl získejte informace o uzlu:

kubectl get nodes

Spravovaná identita

Použijte metodu ověřování spravované identity pro aplikace, které se připojují k prostředkům podporujícím ověřování Microsoft Entra. Mezi příklady patří přístup k prostředkům Azure, jako je virtuální počítač Azure, škálovací sada virtuálních počítačů nebo Azure Cloud Shell.

Výchozí spravovaná identita

Následující příklad ukazuje, jak použít výchozí spravovanou identitu:

export KUBECONFIG=/path/to/kubeconfig

kubelogin convert-kubeconfig -l msi

Spuštěním tohoto příkazu kubectl získejte informace o uzlu:

kubectl get nodes

Konkrétní identita

Následující příklad ukazuje, jak používat spravovanou identitu s konkrétní identitou:

export KUBECONFIG=/path/to/kubeconfig

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

Spuštěním tohoto příkazu kubectl získejte informace o uzlu:

kubectl get nodes

Identita úloh

Metoda ověřování identit úloh používá k ověřování přístupu ke clusterům AKS přihlašovací údaje identity, které jsou federované s Microsoft Entra. Metoda používá integrované ověřování Microsoft Entra. Funguje nastavením následujících proměnných prostředí:

  • AZURE_CLIENT_ID: ID aplikace Microsoft Entra, které je federované s identitou úlohy.
  • AZURE_TENANT_ID: ID tenanta Microsoft Entra.
  • AZURE_FEDERATED_TOKEN_FILE: Soubor, který obsahuje podepsaný kontrolní výraz identity úlohy, jako je token projektu služby Kubernetes (JWT).
  • AZURE_AUTHORITY_HOST: Základní adresa URL autority Microsoft Entra. Například https://login.microsoftonline.com/.

Identitu úloh můžete použít pro přístup ke clusterům Kubernetes ze systémů CI/CD, jako je GitHub nebo ArgoCD, aniž byste museli ukládat přihlašovací údaje instančního objektu do externích systémů. Informace o konfiguraci federace OpenID Připojení (OIDC) z GitHubu najdete v příkladu federace OIDC.

Následující příklad ukazuje, jak používat identitu úlohy:

export KUBECONFIG=/path/to/kubeconfig

kubelogin convert-kubeconfig -l workloadidentity

Spuštěním tohoto příkazu kubectl získejte informace o uzlu:

kubectl get nodes

Jak používat kubelogin s AKS

AKS používá dvojici aplikací Microsoft Entra od první strany. Tato ID aplikací jsou ve všech prostředích stejná.

ID aplikace serveru AKS Microsoft Entra, které používá strana serveru, je 6dae42f8-4368-4678-94ff-3960e28e3630. Přístupový token, který přistupuje ke clusterům AKS, musí být vydán pro tuto aplikaci. Ve většině metod ověřování kubelogin je nutné použít s --server-idkubelogin get-token.

ID klientské aplikace AKS Microsoft Entra, které kubelogin používá k provedení ověřování veřejného klienta jménem uživatele je 80faf920-1908-4b52-b5ef-a8e7bedfc67a. ID klientské aplikace se používá v kódu zařízení a metodách interaktivního ověřování webového prohlížeče.