Używanie narzędzia kubelogin do uwierzytelniania użytkowników w usłudze Azure Kubernetes Service (AKS)

Wtyczka kubelogin na platformie Azure to wtyczka poświadczeń client-go, która implementuje uwierzytelnianie Microsoft Entra. Wtyczka kubelogin oferuje funkcje, które nie są dostępne w narzędziu wiersza polecenia kubectl. Aby uzyskać więcej informacji, zobacz wprowadzenie do rozwiązania kubelogin i wprowadzenie do narzędzia kubectl.

Ten artykuł zawiera omówienie i przykłady użycia platformy Kubelogin do obsługiwanych metod uwierzytelniania Microsoft Entra zalecanych dla usługi AKS.

Ograniczenia uwierzytelniania przy użyciu kubelogin w AKS

  • Grupy utworzone w usłudze Microsoft Entra są uwzględniane tylko przez ich wartość ObjectID , a nie przez ich nazwę wyświetlaną. Polecenie sAMAccountName jest dostępne tylko dla grup synchronizowanych z lokalnej usługi Active Directory systemu Windows Server.
  • Metoda uwierzytelniania nazwy głównej usługi działa tylko z zarządzaną integracją Microsoft Entra ID, a nie ze starszą integracją Microsoft Entra ID.
  • Jednostka usługi może należeć do maksymalnie 200 grup firmy Microsoft Entra. Jeśli masz więcej niż 200 grup, rozważ użycie ról aplikacji.
  • Metoda uwierzytelniania kodu urządzenia nie działa, gdy zasady dostępu warunkowego firmy Microsoft Entra są ustawione w dzierżawie Microsoft Entra. W tym scenariuszu zamiast tego użyj uwierzytelniania interakcyjnego przeglądarki internetowej.
  • Metoda uwierzytelniania Azure CLI jest kompatybilna tylko z Microsoft Entra.

Jak działa uwierzytelnianie kubelogin w usłudze AKS

Klastry AKS z uruchomioną platformą Kubernetes w wersji 1.24 lub nowszej automatycznie używają formatu wtyczki exec kubelogin. Klastry z systemem Kubernetes w wersjach starszych niż 1.24 wymagają ręcznej konwersji na ten format.

W przypadku większości interakcji z kubelogin użyj podpolecenia convert-kubeconfig. Podpolecenie używa pliku kubeconfig określonego w --kubeconfig lub w zmiennej środowiskowej KUBECONFIG, aby przekształcić końcowy plik kubeconfig do formatu exec na podstawie określonej metody uwierzytelniania.

Metody uwierzytelniania implementowane przez rozwiązanie kubelogin to przepływy udzielania tokenów entra OAuth 2.0 firmy Microsoft. Zachowanie pamięci podręcznej zależy od metody uwierzytelniania. Kod urządzenia, interaktywne logowanie przez przeglądarkę internetową oraz przepływ Resource Owner Password Credentials (ROPC) przechowują rekordy uwierzytelniania w katalogu pamięci podręcznej kubelogin. Metody, takie jak Azure CLI i Azure Developer CLI, używają pamięci podręcznej zarządzanej przez odpowiednie narzędzie wiersza poleceń zamiast pamięci podręcznej kubelogin.

Uwierzytelnianie kodu urządzenia

Kod urządzenia to domyślna metoda uwierzytelniania dla convert-kubeconfig podpolecenia. Ta metoda uwierzytelniania wyświetla kod urządzenia, który umożliwia użytkownikowi zalogowanie się z sesji przeglądarki.

Uwaga

Przed wprowadzeniem wtyczek kubelogin i exec metoda uwierzytelniania platformy Azure w narzędziu kubectl obsługiwała tylko przepływ kodu urządzenia. Użyto wcześniejszej wersji biblioteki, która generuje token z audience oświadczeniem z prefiksem spn: . Nie jest ona zgodna z Microsoft Entra, która używa przepływu on-behalf-of (OBO). Po uruchomieniu convert-kubeconfig podpolecenia kubelogin usuwa spn: prefiks z oświadczenia odbiorców.

Parametry uwierzytelniania kodu urządzenia

W poniższej tabeli przedstawiono parametry, których można używać z uwierzytelnianiem kodu urządzenia:

Parameter Description
-l devicecode (opcjonalny) Określa metodę uwierzytelniania kubelogin. Ten parametr jest opcjonalny, ponieważ kod urządzenia jest metodą domyślną.
--legacy Używa starszego zachowania dla klastrów skonfigurowanych ze starszą integracją Microsoft Entra ID. Jeśli plik kubeconfig jest przeznaczony dla takiego klastra, narzędzie kubelogin automatycznie dodaje flagę --legacy .
--cache-dir Zmienia domyślną ścieżkę katalogu pamięci podręcznej tokenu, która to ${HOME}/.kube/cache/kubelogin.

Uwierzytelnianie CLI platformy Azure

Metoda uwierzytelniania interfejsu wiersza polecenia platformy Azure (polecenie: -l azurecli) używa kontekstu logowania, który interfejs wiersza polecenia platformy Azure ustanawia w celu uzyskania tokenu dostępu. Token jest wystawiany w tej samej dzierżawie Microsoft Entra co az login. kubelogin nie zapisuje tokenów w pliku pamięci podręcznej tokenów, ponieważ Azure CLI już nimi zarządza.

Parametry uwierzytelniania CLI platformy Azure

W poniższej tabeli przedstawiono parametry, których można używać z uwierzytelnianiem interfejsu wiersza polecenia platformy Azure:

Parameter Description
-l azurecli Określa metodę uwierzytelniania kubelogin.
--azure-config-dir Określa katalog konfiguracji interfejsu wiersza polecenia platformy Azure. Katalog domyślny to ${HOME}/.azure.

Zaloguj się do Azure

Zaloguj się do Azure przy użyciu az login polecenia .

az login

Interakcyjne uwierzytelnianie przeglądarki internetowej

Interaktywna metoda uwierzytelniania w przeglądarce internetowej (polecenie: -l interactive) automatycznie otwiera przeglądarkę internetową w celu zalogowania użytkownika. Po pomyślnym uwierzytelnieniu użytkownika przeglądarka automatycznie przekierowuje do lokalnego serwera WWW z użyciem zweryfikowanych danych uwierzytelniających. Ta metoda uwierzytelniania jest zgodna z zasadami dostępu warunkowego.

Możesz użyć tokenu nośnikowego lub tokenu Proof-of-Possession (PoP) z tą metodą uwierzytelniania.

Parametry uwierzytelniania tokenu elementu nośnego

W poniższej tabeli przedstawiono parametry, których można używać z uwierzytelnianiem tokenu elementu nośnego:

Parameter Description
-l interactive Określa metodę uwierzytelniania kubelogin.
--cache-dir Zmienia domyślną ścieżkę katalogu pamięci podręcznej tokenu, która to ${HOME}/.kube/cache/kubelogin.

Parametry uwierzytelniania tokenu poP

W poniższej tabeli przedstawiono parametry, których można używać z uwierzytelnianiem tokenu PoP:

Parameter Description
-l interactive Określa metodę uwierzytelniania kubelogin.
--pop-enabled Włącza uwierzytelnianie tokenu poP.
--pop-claims Określa atrybuty tokenu PoP w formacie pary klucz-wartość. Na przykład u=/ARM/ID/OF/CLUSTER.

Uwierzytelnianie głównego elementu usługi

Jednostka usługi (polecenie: -l spn) metoda uwierzytelniania używa jednostki usługi do logowania użytkownika. Poświadczenie można podać, ustawiając zmienną środowiskową lub używając poświadczenia jako argumentu wiersza polecenia. Obsługiwane poświadczenia, których można użyć, to hasło lub certyfikat klienta wymiany informacji osobistych (PFX).

Parametry uwierzytelniania jednostki usługi

W poniższej tabeli przedstawiono parametry, których można używać z uwierzytelnianiem jednostki usługi:

Parameter Description
-l spn Określa metodę uwierzytelniania kubelogin.
--client-id Identyfikator aplikacji (client-id) jednostki usługi.
--client-secret Tajny klucz klienta pryncypała usługi.

Uwierzytelnianie tożsamości zarządzanej

Użyj metody uwierzytelniania tożsamości zarządzanej (polecenie: -l msi) dla aplikacji łączących się z zasobami obsługującymi uwierzytelnianie Firmy Microsoft Entra. Przykłady obejmują uzyskiwanie dostępu do zasobów Azure, takich jak maszyna wirtualna Azure, Virtual Machine Scale Sets lub Azure Cloud Shell.

Możesz użyć domyślnej tożsamości zarządzanej przypisanej do zasobu lub określonej tożsamości zarządzanej przypisanej przez użytkownika.

Parametry uwierzytelniania tożsamości zarządzanej

W poniższej tabeli przedstawiono parametry, których można używać z uwierzytelnianiem tożsamości zarządzanej:

Parameter Description
-l msi Określa metodę uwierzytelniania kubelogin.
--client-id Identyfikator aplikacji (client-id) tożsamości zarządzanej przypisanej przez użytkownika. Jeśli nie określisz tego parametru, zostanie użyta domyślna tożsamość zarządzana.

Uwierzytelnianie tożsamości obciążenia roboczego

Metoda uwierzytelniania tożsamości obciążenia roboczego (polecenie: -l workloadidentity) używa poświadczeń tożsamości, które są sfederowane z usługą Microsoft Entra, aby uwierzytelniać dostęp do klastrów AKS. Metoda używa zintegrowanego uwierzytelniania firmy Microsoft Entra. Działa przez ustawienie następujących zmiennych środowiskowych:

Variable Description
AZURE_CLIENT_ID Identyfikator aplikacji Microsoft Entra, który jest sfederowany z tożsamością obciążenia.
AZURE_TENANT_ID Identyfikator dzierżawcy Microsoft Entra.
AZURE_FEDERATED_TOKEN_FILE Plik zawierający podpisaną asercję tożsamości obciążenia roboczego, na przykład token (JWT) projekcji konta usługi platformy Kubernetes.
AZURE_AUTHORITY_HOST Podstawowy adres URL autorytetu Microsoft Entra. Na przykład https://login.microsoftonline.com/.

Możesz użyć tożsamości obciążenia do uzyskiwania dostępu do klastrów Kubernetes z systemów CI/CD, takich jak GitHub lub Argo CD, bez przechowywania poświadczeń jednostki usługi w systemach zewnętrznych. Aby skonfigurować federację openID Connect (OIDC) z usługi GitHub, zobacz przykład federacji OIDC.

Parametry uwierzytelniania tożsamości dla obciążenia roboczego

W poniższej tabeli przedstawiono parametry, których można używać z uwierzytelnianiem tożsamości obciążenia:

Parameter Description
-l workloadidentity Określa metodę uwierzytelniania kubelogin.

Uwierzytelnianie w usłudze Azure Developer CLI

Metoda uwierzytelniania interfejsu wiersza polecenia dewelopera Azure (polecenie: -l azd) używa kontekstu logowania, który Azure interfejs wiersza polecenia dewelopera ustanawia w celu uzyskania tokenu dostępu. Token jest wystawiany w tej samej dzierżawie Microsoft Entra co azd auth login. kubelogin nie zapisuje tokenów w swojej pamięci podręcznej tokenów, ponieważ zarządza nimi narzędzie Azure Developer CLI.

Ta metoda uwierzytelniania działa tylko z zarządzaną usługą Microsoft Entra w usłudze AKS. Aby uzyskać więcej informacji, zobacz omówienie interfejsu wiersza polecenia dewelopera Azure.

Uwierzytelnianie w usłudze Azure Pipelines

Metoda uwierzytelniania Azure Pipelines (polecenie: -l azurepipelines) używa połączenia usługi Azure Resource Manager i tokenu dostępu systemu potoku do uwierzytelniania. Ta metoda działa tylko w Azure Pipelines. Potok musi mieć połączenie z usługą Azure Resource Manager oraz zezwalać skryptom na dostęp do tokenu OAuth.

Jeśli używasz zadania AzureCLI@2 z połączeniem usługi Azure Resource Manager, kubelogin może używać identyfikatora dzierżawy, identyfikatora klienta i identyfikatora połączenia usługi udostępnianych przez Azure Pipelines w postaci zmiennych środowiskowych. Aby uzyskać więcej informacji, zobacz połączenia usług Azure Pipelines.

Warning

kubelogin obsługuje również metodę uwierzytelniania typu Resource Owner Password Credentials (ROPC). Microsoft zaleca, aby nie używać ropc, ponieważ jest on niezgodny z uwierzytelnianiem wieloskładnikowym i niektórymi scenariuszami tożsamości hybrydowej. Aby uzyskać więcej informacji, zobacz wskazówki dotyczące Platforma tożsamości Microsoft ROPC.

Eksportowanie ścieżki pliku kubeconfig

Przed uruchomieniem podpolecenia convert-kubeconfig, wyeksportuj ścieżkę pliku kubeconfig do zmiennej środowiskowej KUBECONFIG. Przykład:

export KUBECONFIG=/path/to/kubeconfig

Konwertowanie pliku kubeconfig

convert-kubeconfig Uruchom polecenie podrzędne, aby przekonwertować plik kubeconfig, aby użyć wtyczki exec dla wybranej metody uwierzytelniania.

kubelogin convert-kubeconfig
kubelogin convert-kubeconfig -l azurecli
# Bearer token authentication
kubelogin convert-kubeconfig -l interactive

# Proof-of-Possession (PoP) token authentication
kubelogin convert-kubeconfig -l interactive --pop-enabled --pop-claims "u=/ARM/ID/OF/CLUSTER"
  1. convert-kubeconfig Uruchom polecenie podrzędne, aby przekonwertować plik kubeconfig, aby użyć wtyczki exec.

    kubelogin convert-kubeconfig -l spn
    
  2. Ustaw zmienne środowiskowe dla identyfikatora klienta i klucza tajnego klienta lub certyfikatu klienta. Przykład:

    export AZURE_CLIENT_ID=<service-principal-client-id>
    export AZURE_CLIENT_SECRET=<service-principal-client-secret>
    
# Default managed identity authentication
kubelogin convert-kubeconfig -l msi

# Specific managed identity authentication
kubelogin convert-kubeconfig -l msi --client-id <managed-identity-client-id>
kubelogin convert-kubeconfig -l workloadidentity

Konwertowanie pliku kubeconfig przy użyciu interfejsu wiersza polecenia dewelopera Azure

  1. Zaloguj się za pomocą narzędzia Azure Developer CLI.

    azd auth login
    
  2. Skonwertuj plik kubeconfig tak, aby używał metody uwierzytelniania Azure Developer CLI.

    kubelogin convert-kubeconfig -l azd
    

Konwertowanie pliku kubeconfig w Azure Pipelines

W zadaniu korzystającym z połączenia usługi Azure Resource Manager AzureCLI@2 przekonwertuj plik kubeconfig tak, aby używał uwierzytelniania usługi Azure Pipelines.

kubelogin convert-kubeconfig -l azurepipelines

Usuwanie buforowanych tokenów

Usuń buforowane tokeny przy użyciu kubelogin remove-cache-dir polecenia .

kubelogin remove-cache-dir

Pobieranie informacji o węźle

Uzyskaj informacje o węźle przy użyciu kubectl get polecenia .

kubectl get nodes

Jak używać identyfikatorów aplikacji kubelogin w usłudze AKS

Usługa AKS używa pary aplikacji Microsoft Entra. Te identyfikatory aplikacji są takie same we wszystkich środowiskach.

Application Identyfikator aplikacji (GUID) Użyto w
Aplikacja serwera usługi AKS (--server-id) 6dae42f8-4368-4678-94ff-3960e28e3630 Odbiorca tokenu dla wszystkich obsługiwanych metod uwierzytelniania kubelogin podczas uzyskiwania dostępu do AKS.
Publiczna aplikacja kliencka usługi AKS (--client-id) 80faf920-1908-4b52-b5ef-a8e7bedfc67a Kod urządzenia, interaktywna przeglądarka internetowa i uwierzytelnianie ROPC.

Gdy wywołujesz kubelogin get-token bezpośrednio w przypadku AKS, określ identyfikator aplikacji serwera AKS za pomocą --server-id. Aby zapoznać się z parametrami specyficznymi dla trybu, zobacz dokumentację narzędzia kubeloginget-token.

Uwaga

Identyfikator publicznej aplikacji klienckiej usługi AKS w tej sekcji to wartość --client-id używana na potrzeby uwierzytelniania za pomocą kodu urządzenia, interaktywnego logowania w przeglądarce internetowej oraz uwierzytelniania ROPC. W przypadku uwierzytelniania za pomocą jednostki usługi i tożsamości zarządzanej element --client-id identyfikuje natomiast jednostkę usługi lub tożsamość zarządzaną przypisaną przez użytkownika.

Na przykład uzyskaj token przy użyciu uwierzytelniania kodu urządzenia i identyfikatorów aplikacji usługi AKS:

kubelogin get-token \
    --login devicecode \
    --server-id 6dae42f8-4368-4678-94ff-3960e28e3630 \
    --client-id 80faf920-1908-4b52-b5ef-a8e7bedfc67a \
    --tenant-id <microsoft-entra-tenant-id>