Integrowanie identyfikatora Entra firmy Microsoft z usługą Azure Kubernetes Service (AKS) przy użyciu interfejsu wiersza polecenia platformy Azure (starsza wersja)

Ostrzeżenie

Funkcja opisana w tym dokumencie Microsoft Entra Integration (starsza wersja) została wycofana 1 czerwca 2023 r. Obecnie nie można tworzyć nowych klastrów za pomocą integracji firmy Microsoft (starsza wersja).

Usługa AKS ma nowe ulepszone środowisko identyfikatora Entra firmy Microsoft zarządzane przez usługę AKS, które nie wymaga zarządzania serwerem ani aplikacjami klienckimi. Jeśli chcesz przeprowadzić migrację, postępuj zgodnie z instrukcjami podanymi tutaj.

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

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

Ograniczenia

  • Identyfikator Entra firmy Microsoft można włączyć tylko w klastrze z włączoną kontrolą dostępu opartą na rolach Platformy Kubernetes.
  • Starsza integracja firmy Microsoft Entra może być włączona tylko podczas tworzenia klastra.

Zanim rozpoczniesz

Potrzebny jest interfejs wiersza polecenia platformy Azure w wersji 2.0.61 lub nowszej, zainstalowany i skonfigurowany. 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 witryny , https://shell.azure.com aby otworzyć usługę Cloud Shell w przeglądarce.

Aby uzyskać 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 entra firmy Microsoft

Uwierzytelnianie entra firmy Microsoft jest udostępniane klastrom usługi AKS z Połączenie OpenID. OpenID Połączenie to warstwa tożsamości oparta na protokole OAuth 2.0. Aby uzyskać więcej informacji na temat Połączenie OpenID, zobacz dokumentację Połączenie OpenID.

Z poziomu klastra Kubernetes uwierzytelnianie tokenu elementu webhook służy do weryfikowania tokenów uwierzytelniania. Uwierzytelnianie tokenu elementu webhook jest konfigurowane i zarządzane w ramach klastra usługi AKS. Aby uzyskać więcej informacji na temat uwierzytelniania tokenu elementu webhook, zobacz dokumentację uwierzytelniania elementu webhook.

Uwaga

Podczas konfigurowania identyfikatora Entra firmy Microsoft na potrzeby uwierzytelniania usługi AKS skonfigurowano dwie aplikacje firmy Microsoft Entra. Ta operacja musi zostać ukończona przez administratora dzierżawy platformy Azure.

Tworzenie składnika serwera Microsoft Entra

Aby zintegrować się z usługą AKS, należy utworzyć i użyć aplikacji Firmy Microsoft Entra, która działa jako punkt końcowy dla żądań tożsamości. Pierwsza aplikacja Firmy Microsoft Entra, której potrzebujesz, pobiera członkostwo w grupie Microsoft Entra dla użytkownika.

Utwórz składnik aplikacji serwera przy użyciu polecenia az ad app create , a następnie zaktualizuj oświadczenia członkostwa w grupie przy użyciu polecenia az ad app update . W poniższym przykładzie użyto zmiennej aksname zdefiniowanej w sekcji Przed rozpoczęciem i utworzono 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 przy użyciu polecenia az ad sp create . Ta jednostka usługi służy do uwierzytelniania się na platformie Azure. Następnie pobierz klucz tajny jednostki usługi przy użyciu polecenia az ad sp credential reset i przypisz 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)

Jednostka usługi Microsoft Entra musi mieć uprawnienia do wykonywania następujących akcji:

  • Odczytywanie danych katalogu
  • Loguj się i odczytuj profil użytkownika

Przypisz te uprawnienia przy użyciu 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 przyznaj uprawnienia przypisane 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. Musisz również dodać uprawnienia dla aplikacji Microsoft Entra, aby zażądać informacji, które w przeciwnym razie mogą wymagać zgody administracyjnej przy użyciu polecenia az ad app permission admin-consent:

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 Microsoft Entra

Druga aplikacja Firmy Microsoft Entra jest używana, gdy użytkownik loguje się do klastra usługi AKS przy użyciu interfejsu wiersza polecenia platformy Kubernetes (kubectl). Ta aplikacja kliencka pobiera żądanie uwierzytelniania od użytkownika i weryfikuje swoje poświadczenia i uprawnienia. Utwórz aplikację Microsoft Entra dla składnika klienta przy użyciu 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 przy użyciu polecenia az ad sp create :

az ad sp create --id $clientApplicationId

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

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

Dodaj uprawnienia do składników aplikacji klienckiej i aplikacji serwera, aby używać przepływu komunikacji oAuth2 przy użyciu polecenia az ad app permission add . Następnie przyznaj uprawnienia aplikacji klienckiej do komunikacji z aplikacją serwera przy użyciu 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 firmy Microsoft Entra utwórz teraz 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 przy użyciu polecenia az account show . Następnie utwórz klaster usługi AKS przy użyciu polecenia az aks create . Polecenie tworzenia klastra usługi AKS udostępnia identyfikatory serwerów i aplikacji klienckich, klucz tajny jednostki usługi aplikacji serwera i 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 przy użyciu polecenia az aks get-credentials . W jednym z poniższych kroków uzyskasz poświadczenia zwykłego klastra użytkowników , aby zobaczyć przepływ uwierzytelniania Entra firmy Microsoft w działaniu.

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

Tworzenie powiązania RBAC platformy Kubernetes

Przed użyciem konta Microsoft Entra z klastrem usługi AKS należy utworzyć powiązanie roli lub powiązanie roli klastra. Role definiują uprawnienia do udzielania, a powiązania stosują je do żądanych użytkowników. Te przypisania można zastosować do danej przestrzeni nazw lub w całym klastrze. Aby uzyskać więcej informacji, zobacz Using Kubernetes RBAC authorization (Używanie autoryzacji RBAC platformy Kubernetes).

Pobierz główną nazwę użytkownika (UPN) dla aktualnie zalogowanego użytkownika przy użyciu polecenia az ad signed-in-user show . To konto użytkownika jest włączone na potrzeby integracji z firmą Microsoft Entra w następnym kroku.

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

Ważne

Jeśli użytkownik, dla którego przyznano powiązanie RBAC platformy Kubernetes, znajduje się w tej samej dzierżawie usługi Microsoft Entra, przypisz uprawnienia na podstawie nazwy userPrincipalName. Jeśli użytkownik znajduje się w innej dzierżawie firmy Microsoft Entra, zamiast tego wykonaj zapytanie o właściwość 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 danymi wyjściowymi nazwy UPN lub identyfikatora 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 klasterRoleBinding 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 za pomocą identyfikatora Entra firmy Microsoft

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

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

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

kubectl get pods --all-namespaces

Zostanie wyświetlony monit o zalogowanie się w celu uwierzytelnienia przy użyciu poświadczeń firmy Microsoft Entra przy użyciu przeglądarki internetowej. Po pomyślnym uwierzytelnieniu kubectl polecenie wyświetli zasobniki w klastrze usługi AKS, jak pokazano 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

Otrzymany token uwierzytelniania jest kubectl buforowany. Po wygaśnięciu tokenu lub ponownym utworzeniu pliku konfiguracji platformy Kubernetes zostanie ponownie wyświetlony monit o zalogowanie się.

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 firmy Microsoft, czy nie.
  • Użytkownik nie jest członkiem ponad 200 grup.
  • Wpis tajny zdefiniowany w rejestracji aplikacji dla serwera jest zgodny z wartością skonfigurowaną przy użyciu polecenia --aad-server-app-secret
  • Upewnij się, że na maszynie jest zainstalowana tylko jedna wersja narzędzia kubectl. Wersje powodujące konflikt mogą powodować problemy podczas autoryzacji. Aby zainstalować najnowszą wersję, użyj polecenia az aks install-cli.

Często zadawane pytania dotyczące migracji z integracji firmy Microsoft z usługą Microsoft Entra do zarządzanego przez usługę AKS identyfikatora Entra firmy Microsoft

1. Jaki jest plan migracji?

Program Microsoft Entra Integration (starsza wersja) zostanie wycofany 1 czerwca 2023 r. Po tej dacie nie będzie można tworzyć nowych klastrów przy użyciu identyfikatora Entra firmy Microsoft (starsza wersja). Przeprowadzimy migrację wszystkich klastrów usługi AKS firmy Microsoft entra Integration (starsza wersja) do identyfikatora Entra firmy Microsoft zarządzanego przez usługę AKS automatycznie od 1 sierpnia 2023 r. Wysyłamy wiadomości e-mail z powiadomieniami do administratorów subskrypcji, których dotyczy to dwukierunkowo, aby przypomnieć im o migracji.

2. Co się stanie, jeśli nie podejmę żadnych działań?

Klastry usługi AKS firmy Microsoft Entra Integration (starsza wersja) będą nadal działać po 1 czerwca 2023 r. Automatycznie zmigrujemy klastry do zarządzanego przez usługę AKS identyfikatora Entra firmy Microsoft, począwszy od 1 sierpnia 2023 r. Podczas migracji może wystąpić przestój serwera interfejsu API.

Zawartość kubeconfig zmienia się po migracji. Należy scalić nowe poświadczenia z plikiem kubeconfig przy użyciu polecenia az aks get-credentials --resource-group <AKS resource group name> --name <AKS cluster name>.

Zalecamy ręczne zaktualizowanie klastra usługi AKS do zarządzanego przez usługę AKS identyfikatora Entra firmy Microsoft przed 1 sierpnia. Dzięki temu można zarządzać przestojami w godzinach pracy, gdy jest to wygodniejsze.

3. Dlaczego po migracji ręcznej nadal otrzymuję wiadomość e-mail z powiadomieniem?

Wysłanie wiadomości e-mail trwa kilka dni. Jeśli klaster nie został zmigrowany przed zainicjowaniem procesu wysyłania wiadomości e-mail, nadal może zostać wyświetlone powiadomienie.

4. Jak sprawdzić, czy mój klaster jest migrowany do zarządzanego przez usługę AKS identyfikatora entra firmy Microsoft?

Upewnij się, że klaster usługi AKS jest migrowany do zarządzanego przez usługę AKS identyfikatora Entra firmy Microsoft przy użyciu az aks show polecenia .

az aks show -g <RGName> -n <ClusterName>  --query "aadProfile"

Jeśli klaster korzysta z identyfikatora entra firmy Microsoft zarządzanego przez usługę AKS, dane wyjściowe to managedtrue. Na przykład:

    {
      "adminGroupObjectIDs": [
        "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
      ],
      "adminUsers": null,
      "clientAppId": null,
      "enableAzureRbac": null,
      "managed": true,
      "serverAppId": null,
      "serverAppSecret": null,
      "tenantId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
    }

Następne kroki

Pełny skrypt zawierający polecenia przedstawione w tym artykule zawiera skrypt integracji [Microsoft Entra w repozytorium przykładów usługi AKS][complete-script].

Aby kontrolować dostęp do zasobów klastra za pomocą użytkowników i grup firmy Microsoft Entra, zobacz Kontrola dostępu do zasobów klastra przy użyciu kontroli dostępu opartej na rolach platformy Kubernetes i tożsamości firmy Microsoft Entra 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 Najlepsze rozwiązania dotyczące uwierzytelniania i autoryzacji w usłudze AKS.