Integrowanie Azure Active Directory z Azure Kubernetes Service przy użyciu interfejsu wiersza polecenia platformy Azure (starsza wersja)

Ostrzeżenie

**Funkcja opisana w tym dokumencie, Integracja z usługą Azure AD (starsza wersja), zostanie wycofana 29 lutego 2024 r.

Usługa AKS ma nowe, ulepszone środowisko usługi Azure AD zarządzane przez usługę AKS, które nie wymaga zarządzania serwerem ani aplikacją kliencyjną. Jeśli chcesz przeprowadzić migrację, postępuj zgodnie z instrukcjami podanymi tutaj.

Azure Kubernetes Service (AKS) można skonfigurować do używania usługi Azure Active Directory (AD) do uwierzytelniania użytkowników. W tej konfiguracji możesz zalogować się do klastra usługi AKS przy użyciu tokenu uwierzytelniania usługi Azure AD. Operatorzy klastrów mogą również skonfigurować kontrolę dostępu opartą na rolach (RBAC) na platformie Kubernetes na podstawie tożsamości użytkownika lub członkostwa w grupie katalogów.

W tym artykule pokazano, jak utworzyć wymagane składniki usługi Azure AD, a następnie wdrożyć klaster z obsługą usługi Azure AD i utworzyć podstawową rolę Kubernetes w klastrze usługi AKS.

Aby uzyskać kompletny przykładowy skrypt używany w tym artykule, zobacz Przykłady interfejsu wiersza polecenia platformy Azure — integracja usługi AKS z usługą Azure AD.

Obowiązują następujące ograniczenia:

  • Usługę Azure AD można włączyć tylko w klastrze z włączoną obsługą kontroli RBAC na platformie Kubernetes.
  • Starszą integrację usługi Azure AD można włączyć tylko podczas tworzenia klastra.

Zanim rozpoczniesz

Musisz mieć zainstalowany i skonfigurowany interfejs wiersza polecenia platformy Azure w wersji 2.0.61 lub nowszej. Uruchom polecenie az --version, aby dowiedzieć się, jaka wersja jest używana. Jeśli konieczna będzie instalacja lub uaktualnienie, zobacz Instalowanie interfejsu wiersza polecenia platformy Azure.

Przejdź do https://shell.azure.com strony , Cloud Shell w przeglądarce.

Aby zapewnić spójność i ułatwić uruchamianie poleceń w tym artykule, utwórz zmienną dla żądanej nazwy klastra usługi AKS. W poniższym przykładzie użyto nazwy myakscluster:

aksname="myakscluster"

Omówienie uwierzytelniania usługi Azure AD

Uwierzytelnianie usługi Azure AD jest udostępniane klastrom usługi AKS z protokołem OpenID Połączenie. OpenID Połączenie to warstwa tożsamości zbudowana na podstawie protokołu OAuth 2.0. Aby uzyskać więcej informacji na temat Połączenie OpenID, zobacz dokumentację programu Open ID Connect.

W klastrze Kubernetes tokeny uwierzytelniania są weryfikowane za pomocą uwierzytelniania tokenów. Uwierzytelnianie tokenu element webhook jest konfigurowane i zarządzane w ramach klastra usługi AKS. Aby uzyskać więcej informacji na temat uwierzytelniania tokenu dla tego urządzenia, zobacz dokumentację uwierzytelniania dla tegourządzenia.

Uwaga

Podczas konfigurowania usługi Azure AD do uwierzytelniania usługi AKS są konfigurowane dwie aplikacje usługi Azure AD. Ta operacja musi zostać ukończona przez administratora dzierżawy platformy Azure.

Tworzenie składnika serwera usługi Azure AD

Aby zintegrować usługę z usługą AKS, należy utworzyć aplikację usługi Azure AD, która działa jako punkt końcowy dla żądań tożsamości. Pierwsza potrzebna aplikacja usługi Azure AD pobiera członkostwo w grupie usługi Azure AD dla użytkownika.

Utwórz składnik aplikacji serwera za pomocą polecenia az ad app create, a następnie zaktualizuj oświadczenia dotyczące członkostwa w grupie przy użyciu polecenia az ad app update. Poniższy przykład używa zmiennej aksname zdefiniowanej w sekcji Przed rozpoczęciem i tworzy zmienną

# Create the Azure AD application
serverApplicationId=$(az ad app create \
    --display-name "${aksname}Server" \
    --identifier-uris "https://${aksname}Server" \
    --query appId -o tsv)

# Update the application group membership claims
az ad app update --id $serverApplicationId --set groupMembershipClaims=All

Teraz utwórz jednostkę usługi dla aplikacji serwera za pomocą polecenia az ad sp create. Ta jednostka usługi jest używana do uwierzytelniania się w obrębie platformy Azure. Następnie pobierz klucz tajny jednostki usługi za pomocą polecenia az ad sp credential reset i przypisz go do zmiennej o nazwie serverApplicationSecret do użycia w jednym z następujących kroków:

# Create a service principal for the Azure AD application
az ad sp create --id $serverApplicationId

# Get the service principal secret
serverApplicationSecret=$(az ad sp credential reset \
    --name $serverApplicationId \
    --credential-description "AKSPassword" \
    --query password -o tsv)

Podmiot zabezpieczeń usługi Azure AD musi mieć uprawnienia do wykonywania następujących akcji:

  • Odczyt danych katalogu
  • Logowanie i odczyt profilu użytkownika

Przypisz te uprawnienia za pomocą polecenia az ad app permission add:

az ad app permission add \
    --id $serverApplicationId \
    --api 00000003-0000-0000-c000-000000000000 \
    --api-permissions e1fe6dd8-ba31-4d61-89e7-88639da4683d=Scope 06da0dbc-49e2-44d2-8312-53f166ab848a=Scope 7ab1d382-f21e-4acd-a863-ba3e13f7da61=Role

Na koniec udziel uprawnień przypisanych w poprzednim kroku dla aplikacji serwera przy użyciu polecenia az ad app permission grant. Ten krok kończy się niepowodzeniem, jeśli bieżące konto nie jest administratorem dzierżawy. Należy również dodać uprawnienia dla aplikacji usługi Azure AD w celu żądania informacji, które w przeciwnym razie mogą wymagać zgody administratora, przy użyciu wyrażenia zgody administratora aplikacji az ad:

az ad app permission grant --id $serverApplicationId --api 00000003-0000-0000-c000-000000000000
az ad app permission admin-consent --id  $serverApplicationId

Tworzenie składnika klienta usługi Azure AD

Druga aplikacja usługi Azure AD jest używana, gdy użytkownik loguje się do klastra usługi AKS przy użyciu interfejsu wiersza polecenia kubernetes ( kubectl ). Ta aplikacja kliency pobiera żądanie uwierzytelnienia od użytkownika i weryfikuje jego poświadczenia i uprawnienia. Utwórz aplikację usługi Azure AD dla składnika klienta za pomocą polecenia az ad app create:

clientApplicationId=$(az ad app create \
    --display-name "${aksname}Client" \
    --native-app \
    --reply-urls "https://${aksname}Client" \
    --query appId -o tsv)

Utwórz jednostkę usługi dla aplikacji klienckiej za pomocą polecenia az ad sp create:

az ad sp create --id $clientApplicationId

Pobierz identyfikator oAuth2 dla aplikacji serwera, aby zezwolić na przepływ uwierzytelniania między dwoma składnikami aplikacji przy użyciu polecenia az ad app show. Ten identyfikator oAuth2 zostanie użyty w następnym kroku.

oAuthPermissionId=$(az ad app show --id $serverApplicationId --query "oauth2Permissions[0].id" -o tsv)

Dodaj uprawnienia dla aplikacji klienckiej i składników aplikacji serwera do korzystania z przepływu komunikacji oAuth2 za pomocą polecenia az ad app permission add. Następnie przyznaj aplikacji klienckiej uprawnienia do komunikacji z aplikacją serwera za pomocą polecenia az ad app permission grant:

az ad app permission add --id $clientApplicationId --api $serverApplicationId --api-permissions ${oAuthPermissionId}=Scope
az ad app permission grant --id $clientApplicationId --api $serverApplicationId

Wdrażanie klastra

Po utworzeniu dwóch aplikacji usługi Azure AD utwórz sam klaster usługi AKS. Najpierw utwórz grupę zasobów za pomocą polecenia az group create. Poniższy przykład tworzy grupę zasobów w regionie EastUS:

Utwórz grupę zasobów dla klastra:

az group create --name myResourceGroup --location EastUS

Pobierz identyfikator dzierżawy subskrypcji platformy Azure za pomocą polecenia az account show. Następnie utwórz klaster usługi AKS za pomocą polecenia az aks create. Polecenie tworzenia klastra AKS udostępnia identyfikatory serwera i aplikacji klienckiej, klucz tajny jednostki usługi aplikacji serwera oraz identyfikator dzierżawy:

tenantId=$(az account show --query tenantId -o tsv)

az aks create \
    --resource-group myResourceGroup \
    --name $aksname \
    --node-count 1 \
    --generate-ssh-keys \
    --aad-server-app-id $serverApplicationId \
    --aad-server-app-secret $serverApplicationSecret \
    --aad-client-app-id $clientApplicationId \
    --aad-tenant-id $tenantId

Na koniec pobierz poświadczenia administratora klastra za pomocą polecenia az aks get-credentials. W jednym z poniższych kroków uzyskaj poświadczenia klastra zwykłych użytkowników, aby zobaczyć przepływ uwierzytelniania usługi Azure AD w działaniu.

az aks get-credentials --resource-group myResourceGroup --name $aksname --admin

Tworzenie powiązania kontroli RBAC na kubernetes

Aby można Azure Active Directory z klastrem usługi AKS, należy utworzyć powiązanie roli lub powiązanie roli klastra. Role definiują uprawnienia do udzielenia, a powiązania stosują je do żądanych użytkowników. Te przypisania można zastosować do danej przestrzeni nazw lub do całego klastra. Aby uzyskać więcej informacji, zobacz Using Kubernetes RBAC authorization (Używanie autoryzacji RBAC na platformie Kubernetes).

Pobierz główną nazwę użytkownika (UPN) dla aktualnie zalogowanego użytkownika za pomocą polecenia az ad signed-in-user show. To konto użytkownika zostanie włączone do integracji z usługą Azure AD w następnym kroku.

az ad signed-in-user show --query userPrincipalName -o tsv

Ważne

Jeśli użytkownik, dla których przyznasz powiązanie RBAC platformy Kubernetes, znajduje się w tej samej dzierżawie usługi Azure AD, przypisz uprawnienia na podstawie parametru userPrincipalName. Jeśli użytkownik znajduje się w innej dzierżawie usługi Azure AD, zamiast tego użyj właściwości objectId i użyj jej.

Utwórz manifest YAML o nazwie basic-azure-ad-binding.yaml i wklej następującą zawartość. W ostatnim wierszu zastąp userPrincipalName_or_objectId identyfikatorem UPN lub identyfikatorem obiektu z poprzedniego polecenia:

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: contoso-cluster-admins
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- apiGroup: rbac.authorization.k8s.io
  kind: User
  name: userPrincipalName_or_objectId

Utwórz klaster ClusterRoleBinding przy użyciu polecenia kubectl apply i określ nazwę pliku manifestu YAML:

kubectl apply -f basic-azure-ad-binding.yaml

Uzyskiwanie dostępu do klastra przy użyciu usługi Azure AD

Teraz przetestujmy integrację uwierzytelniania usługi Azure AD dla klastra usługi AKS. Ustaw kontekst kubectl konfiguracji, aby używać zwykłych poświadczeń użytkownika. Ten kontekst przekazuje wszystkie żądania uwierzytelniania z powrotem za pośrednictwem usługi Azure AD.

az aks get-credentials --resource-group myResourceGroup --name $aksname --overwrite-existing

Teraz użyj polecenia kubectl get pods, aby wyświetlić zasobniki we wszystkich przestrzeniach nazw:

kubectl get pods --all-namespaces

W przeglądarce internetowej zostanie wyświetlony monit o zalogowanie się w celu uwierzytelnienia przy użyciu poświadczeń usługi Azure AD. Po pomyślnym uwierzytelnieniu polecenie wyświetla zasobniki w klastrze usługi AKS, jak pokazano kubectl w następujących przykładowych danych wyjściowych:

kubectl get pods --all-namespaces
To sign in, use a web browser to open the page https://microsoft.com/devicelogin and enter the code BYMK7UXVD to authenticate.

NAMESPACE     NAME                                    READY   STATUS    RESTARTS   AGE
kube-system   coredns-754f947b4-2v75r                 1/1     Running   0          23h
kube-system   coredns-754f947b4-tghwh                 1/1     Running   0          23h
kube-system   coredns-autoscaler-6fcdb7d64-4wkvp      1/1     Running   0          23h
kube-system   heapster-5fb7488d97-t5wzk               2/2     Running   0          23h
kube-system   kube-proxy-2nd5m                        1/1     Running   0          23h
kube-system   kube-svc-redirect-swp9r                 2/2     Running   0          23h
kube-system   kubernetes-dashboard-847bb4ddc6-trt7m   1/1     Running   0          23h
kube-system   metrics-server-7b97f9cd9-btxzz          1/1     Running   0          23h
kube-system   tunnelfront-6ff887cffb-xkfmq            1/1     Running   0          23h

Token uwierzytelniania otrzymany dla usługi kubectl jest buforowany. Logowanie jest możliwe tylko w przypadku wygaśnięcia tokenu lub ponownego utworzenia pliku konfiguracji kubernetes.

Jeśli po pomyślnym zalogowaniu się przy użyciu przeglądarki internetowej zostanie wyświetlony komunikat o błędzie autoryzacji, jak w poniższych przykładowych danych wyjściowych, sprawdź następujące możliwe problemy:

error: You must be logged in to the server (Unauthorized)
  • Zdefiniowano odpowiedni identyfikator obiektu lub nazwę UPN w zależności od tego, czy konto użytkownika znajduje się w tej samej dzierżawie usługi Azure AD, czy nie.
  • Użytkownik nie jest członkiem więcej niż 200 grup.
  • Wpis tajny zdefiniowany w rejestracji aplikacji dla serwera odpowiada wartości skonfigurowanej przy użyciu --aad-server-app-secret
  • Upewnij się, że na maszynie jest jednocześnie zainstalowana tylko jedna wersja kubectl. Wersje powodujące konflikt mogą powodować problemy podczas autoryzacji. Aby zainstalować najnowszą wersję, użyj polecenia az aks install-cli.

Następne kroki

Kompletny skrypt zawierający polecenia pokazane w tym artykule można znaleźć w skrypcie integracji usługi Azure AD w przykładowych usługach AKS.

Aby kontrolować dostęp do zasobów klastra przy użyciu użytkowników i grup usługi Azure AD, zobacz Control access to cluster resources using Kubernetes role-basedaccess control and Azure AD identities in AKS (Kontrola dostępu do zasobów klastra przy użyciu kontroli dostępu opartej na rolach platformy Kubernetes i tożsamości usługi Azure AD w usłudze AKS).

Aby uzyskać więcej informacji na temat zabezpieczania klastrów Kubernetes, zobacz Opcje dostępu i tożsamości dla usługi AKS).

Aby uzyskać najlepsze rozwiązania dotyczące tożsamości i kontroli zasobów, zobacz Best practices for authentication and authorization in AKS (Najlepsze rozwiązaniadotyczące uwierzytelniania i autoryzacji w u usługi AKS).