Integrace Azure Active Directory se službou Azure Kubernetes pomocí Azure CLI (starší verze)Integrate Azure Active Directory with Azure Kubernetes Service using the Azure CLI (legacy)

Službu Azure Kubernetes Service (AKS) je možné nakonfigurovat tak, aby pro ověřování uživatelů používala Azure Active Directory (AD).Azure Kubernetes Service (AKS) can be configured to use Azure Active Directory (AD) for user authentication. V této konfiguraci se můžete přihlásit ke clusteru AKS pomocí ověřovacího tokenu Azure AD.In this configuration, you can log into an AKS cluster using an Azure AD authentication token. Operátoři clusteru můžou také nakonfigurovat řízení přístupu na základě role (Kubernetes RBAC) Kubernetes na základě identity uživatele nebo členství ve skupině adresáře.Cluster operators can also configure Kubernetes role-based access control (Kubernetes RBAC) based on a user's identity or directory group membership.

V tomto článku se dozvíte, jak vytvořit požadované součásti Azure AD a pak nasadit cluster s podporou Azure AD a vytvořit základní roli Kubernetes v clusteru AKS.This article shows you how to create the required Azure AD components, then deploy an Azure AD-enabled cluster and create a basic Kubernetes role in the AKS cluster.

Kompletní vzorový skript použitý v tomto článku najdete v tématu ukázky v Azure CLI – integrace AKS s Azure AD.For the complete sample script used in this article, see Azure CLI samples - AKS integration with Azure AD.

Důležité

AKS má nové vylepšené prostředí Azure AD spravované v AKS , které nevyžaduje správu serverové nebo klientské aplikace.AKS has a new improved AKS-managed Azure AD experience that doesn't require you to manage server or client application. Pokud chcete provést migraci, postupujte podle pokynů uvedených tady.If you want to migrate follow the instructions here.

Platí následující omezení:The following limitations apply:

  • Azure AD se dá povolit jenom v clusteru Kubernetes s povolenou RBAC.Azure AD can only be enabled on Kubernetes RBAC-enabled cluster.
  • Integraci služby Azure AD Legacy lze povolit pouze během vytváření clusteru.Azure AD legacy integration can only be enabled during cluster creation.

Než začneteBefore you begin

Potřebujete nainstalovanou a nakonfigurovanou verzi Azure CLI 2.0.61 nebo novější.You need the Azure CLI version 2.0.61 or later installed and configured. Verzi zjistíte spuštěním příkazu az --version.Run az --version to find the version. Pokud potřebujete instalaci nebo upgrade, přečtěte si téma Instalace Azure CLI.If you need to install or upgrade, see Install Azure CLI.

https://shell.azure.comV prohlížeči otevřete Cloud Shell.Go to https://shell.azure.com to open Cloud Shell in your browser.

Pro zajištění konzistence a ke spuštění příkazů v tomto článku Vytvořte proměnnou pro požadovaný název clusteru AKS.For consistency and to help run the commands in this article, create a variable for your desired AKS cluster name. Následující příklad používá název myakscluster:The following example uses the name myakscluster:

aksname="myakscluster"

Přehled ověřování Azure ADAzure AD authentication overview

Ověřování Azure AD je k dispozici pro clustery AKS s OpenID Connect.Azure AD authentication is provided to AKS clusters with OpenID Connect. OpenID Connect je vrstva identity postavená nad protokolem OAuth 2,0.OpenID Connect is an identity layer built on top of the OAuth 2.0 protocol. Další informace o OpenID připojení najdete v dokumentaci k otevřenému ID Connect.For more information on OpenID Connect, see the Open ID connect documentation.

V rámci clusteru Kubernetes se ověřování pomocí tokenu Webhooku používá k ověření ověřovacích tokenů.From inside of the Kubernetes cluster, Webhook Token Authentication is used to verify authentication tokens. Ověřování tokenu Webhooku je nakonfigurované a spravované jako součást clusteru AKS.Webhook token authentication is configured and managed as part of the AKS cluster. Další informace o ověřování tokenů Webhooku najdete v dokumentaci pro ověřování Webhooku.For more information on Webhook token authentication, see the webhook authentication documentation.

Poznámka

Při konfiguraci služby Azure AD pro ověřování AKS jsou nakonfigurované dvě aplikace Azure AD.When configuring Azure AD for AKS authentication, two Azure AD applications are configured. Tuto operaci musí dokončit správce tenanta Azure.This operation must be completed by an Azure tenant administrator.

Vytvořit součást serveru Azure ADCreate Azure AD server component

Pro integraci s AKS vytvoříte a použijete aplikaci Azure AD, která funguje jako koncový bod pro žádosti o identitu.To integrate with AKS, you create and use an Azure AD application that acts as an endpoint for the identity requests. První aplikace Azure AD, kterou potřebujete, získá členství uživatele ve skupině Azure AD.The first Azure AD application you need gets Azure AD group membership for a user.

Vytvořte komponentu serverové aplikace pomocí příkazu AZ AD App Create a pak aktualizujte deklarace členství ve skupině pomocí příkazu AZ AD App Update .Create the server application component using the az ad app create command, then update the group membership claims using the az ad app update command. Následující příklad používá proměnnou aksname definovanou v oddílu před začátkem a vytvoří proměnnou.The following example uses the aksname variable defined in the Before you begin section, and creates a variable

# 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

Nyní vytvořte instanční objekt pro aplikaci serveru pomocí příkazu AZ AD SP Create .Now create a service principal for the server app using the az ad sp create command. Tento instanční objekt se používá k ověření v rámci platformy Azure.This service principal is used to authenticate itself within the Azure platform. Pak pomocí příkazu AZ AD SP Credential resetu Získejte tajný klíč služby a přiřaďte k proměnné s názvem serverApplicationSecret , která se použije v jednom z následujících kroků:Then, get the service principal secret using the az ad sp credential reset command and assign to the variable named serverApplicationSecret for use in one of the following steps:

# 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)

Instanční objekt služby Azure AD potřebuje oprávnění k provedení následujících akcí:The Azure AD service principal needs permissions to perform the following actions:

  • Čtení dat z adresářeRead directory data
  • Přihlášení a čtení profilu uživateleSign in and read user profile

Přiřaďte tato oprávnění pomocí příkazu AZ AD App Permission Add :Assign these permissions using the az ad app permission add command:

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

Nakonec udělte oprávnění přiřazená v předchozím kroku pro serverovou aplikaci pomocí příkazu AZ AD App oprávnění grant .Finally, grant the permissions assigned in the previous step for the server application using the az ad app permission grant command. Tento krok se nezdařil, pokud aktuální účet není správcem tenanta. Musíte taky přidat oprávnění pro aplikaci Azure AD, abyste si vyžádali informace, které můžou jinak vyžadovat souhlas správce pomocí žádosti AZ AD App Permission admin-souhlasu:This step fails if the current account is not a tenant admin. You also need to add permissions for Azure AD application to request information that may otherwise require administrative consent using the 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

Vytvořit součást klienta Azure ADCreate Azure AD client component

Druhá aplikace Azure AD se používá, když se uživatel do clusteru AKS přihlásí pomocí rozhraní příkazového řádku Kubernetes ( kubectl ).The second Azure AD application is used when a user logs to the AKS cluster with the Kubernetes CLI (kubectl). Tato klientská aplikace přijme požadavek na ověření od uživatele a ověří své přihlašovací údaje a oprávnění.This client application takes the authentication request from the user and verifies their credentials and permissions. Pomocí příkazu AZ AD App Create vytvořte aplikaci Azure AD pro komponentu klienta:Create the Azure AD app for the client component using the az ad app create command:

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

Pomocí příkazu AZ AD SP Create vytvořte instanční objekt pro klientskou aplikaci:Create a service principal for the client application using the az ad sp create command:

az ad sp create --id $clientApplicationId

Získejte ID oAuth2 pro aplikaci serveru, aby se povolil tok ověřování mezi dvěma komponentami aplikace pomocí příkazu AZ AD App show .Get the oAuth2 ID for the server app to allow the authentication flow between the two app components using the az ad app show command. Toto ID oAuth2 se používá v dalším kroku.This oAuth2 ID is used in the next step.

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

Přidejte oprávnění pro klientské aplikace a součásti serverové aplikace, aby používaly komunikační tok oAuth2 pomocí příkazu AZ AD App Permission Add .Add the permissions for the client application and server application components to use the oAuth2 communication flow using the az ad app permission add command. Pak udělte klientské aplikaci oprávnění ke komunikaci s aplikací serveru pomocí příkazu AZ AD App oprávnění grant :Then, grant permissions for the client application to communication with the server application using the az ad app permission grant command:

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

Nasazení clusteruDeploy the cluster

Se dvěma vytvořenými aplikacemi Azure AD teď vytvořte samotný cluster AKS.With the two Azure AD applications created, now create the AKS cluster itself. Nejdřív vytvořte skupinu prostředků pomocí příkazu AZ Group Create .First, create a resource group using the az group create command. Následující příklad vytvoří skupinu prostředků v oblasti EastUS :The following example creates the resource group in the EastUS region:

Vytvořte skupinu prostředků pro cluster:Create a resource group for the cluster:

az group create --name myResourceGroup --location EastUS

ID tenanta svého předplatného Azure získáte pomocí příkazu AZ Account show .Get the tenant ID of your Azure subscription using the az account show command. Pak vytvořte cluster AKS pomocí příkazu AZ AKS Create .Then, create the AKS cluster using the az aks create command. Příkaz k vytvoření clusteru AKS poskytuje ID aplikací serveru a klienta, tajný klíč hlavní aplikační služby serveru a ID tenanta:The command to create the AKS cluster provides the server and client application IDs, the server application service principal secret, and your tenant ID:

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

Nakonec pomocí příkazu AZ AKS Get-Credentials Získejte přihlašovací údaje Správce clusteru.Finally, get the cluster admin credentials using the az aks get-credentials command. V jednom z následujících kroků získáte standardní přihlašovací údaje pro uživatele clusteru, abyste viděli tok ověřování Azure AD v akci.In one of the following steps, you get the regular user cluster credentials to see the Azure AD authentication flow in action.

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

Vytvoření vazby RBAC KubernetesCreate Kubernetes RBAC binding

Předtím, než se dá účet Azure Active Directory použít s clusterem AKS, je potřeba vytvořit vazbu role nebo vazby role clusteru.Before an Azure Active Directory account can be used with the AKS cluster, a role binding or cluster role binding needs to be created. Role definují oprávnění pro udělení a vazby je použijí pro požadované uživatele.Roles define the permissions to grant, and bindings apply them to desired users. Tato přiřazení lze použít na daný obor názvů nebo v celém clusteru.These assignments can be applied to a given namespace, or across the entire cluster. Další informace najdete v tématu použití autorizace KUBERNETES RBAC.For more information, see Using Kubernetes RBAC authorization.

Získejte hlavní název uživatele (UPN) pro uživatele, který je aktuálně přihlášený pomocí příkazu AZ AD Sign-in-User show .Get the user principal name (UPN) for the user currently logged in using the az ad signed-in-user show command. Tento uživatelský účet je v dalším kroku povolen pro integraci služby Azure AD.This user account is enabled for Azure AD integration in the next step.

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

Důležité

Pokud je uživateli, kterému udělíte vazbu Kubernetes RBAC, ve stejném tenantovi Azure AD, přiřaďte oprávnění na základě třídy userPrincipalName.If the user you grant the Kubernetes RBAC binding for is in the same Azure AD tenant, assign permissions based on the userPrincipalName. Pokud je uživatel v jiném tenantovi služby Azure AD, dotaz na a místo toho použijte vlastnost objectID .If the user is in a different Azure AD tenant, query for and use the objectId property instead.

Vytvořte manifest YAML s názvem basic-azure-ad-binding.yaml a vložte následující obsah.Create a YAML manifest named basic-azure-ad-binding.yaml and paste the following contents. Na posledním řádku nahraďte userPrincipalName_or_objectId hlavním názvem uživatele (UPN) nebo ID objektu z předchozího příkazu:On the last line, replace userPrincipalName_or_objectId with the UPN or object ID output from the previous command:

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

Vytvořte ClusterRoleBinding pomocí příkazu kubectl Apply a zadejte název souboru manifestu YAML:Create the ClusterRoleBinding using the kubectl apply command and specify the filename of your YAML manifest:

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

Přístup ke clusteru pomocí Azure ADAccess cluster with Azure AD

Teď otestujeme integraci ověřování Azure AD pro cluster AKS.Now let's test the integration of Azure AD authentication for the AKS cluster. Nastavte kubectl konfigurační kontext tak, aby používal běžné přihlašovací údaje uživatele.Set the kubectl config context to use regular user credentials. Tento kontext projde všechny žádosti o ověření zpět prostřednictvím služby Azure AD.This context passes all authentication requests back through Azure AD.

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

Nyní použijte příkaz kubectl Get lusks k zobrazení lusků napříč všemi obory názvů:Now use the kubectl get pods command to view pods across all namespaces:

kubectl get pods --all-namespaces

Zobrazí se výzva pro přihlášení k ověření pomocí přihlašovacích údajů Azure AD pomocí webového prohlížeče.You receive a sign in prompt to authenticate using Azure AD credentials using a web browser. Po úspěšném ověření se v kubectl příkazu zobrazí lusky v clusteru AKS, jak je znázorněno v následujícím příkladu výstupu:After you've successfully authenticated, the kubectl command displays the pods in the AKS cluster, as shown in the following example output:

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

Ověřovací token přijatý pro kubectl je uložený v mezipaměti.The authentication token received for kubectl is cached. Znovu se zobrazí výzva, abyste se přihlásili, když vypršela platnost tokenu, nebo se konfigurační soubor Kubernetes znovu vytvoří.You are only reprompted to sign in when the token has expired or the Kubernetes config file is re-created.

Pokud se zobrazí chybová zpráva autorizace po úspěšném přihlášení pomocí webového prohlížeče jako v následujícím příkladu výstupu, podívejte se na následující možné problémy:If you see an authorization error message after you've successfully signed in using a web browser as in the following example output, check the following possible issues:

error: You must be logged in to the server (Unauthorized)
  • V závislosti na tom, jestli je uživatelský účet ve stejném tenantovi Azure AD, jste definovali příslušné ID objektu nebo hlavní název uživatele (UPN).You defined the appropriate object ID or UPN, depending on if the user account is in the same Azure AD tenant or not.
  • Uživatel není členem více než 200 skupin.The user is not a member of more than 200 groups.
  • Tajný kód definovaný v registraci aplikace pro server odpovídá hodnotě nakonfigurované pomocí --aad-server-app-secretSecret defined in the application registration for server matches the value configured using --aad-server-app-secret

Další krokyNext steps

Úplný skript, který obsahuje příkazy uvedené v tomto článku, najdete v tématu věnovaném skriptu integrace služby Azure AD v úložišti UKÁZEK AKS.For the complete script that contains the commands shown in this article, see the Azure AD integration script in the AKS samples repo.

Postup použití uživatelů a skupin Azure AD k řízení přístupu k prostředkům clusteru najdete v tématu řízení přístupu k prostředkům clusteru pomocí řízení přístupu na základě role Kubernetes a identit Azure AD v AKS.To use Azure AD users and groups to control access to cluster resources, see Control access to cluster resources using Kubernetes role-based access control and Azure AD identities in AKS.

Další informace o tom, jak zabezpečit clustery Kubernetes, najdete v tématu Možnosti přístupu a identit pro AKS).For more information about how to secure Kubernetes clusters, see Access and identity options for AKS).

Osvědčené postupy týkající se identit a řízení prostředků najdete v tématu osvědčené postupy pro ověřování a autorizaci v AKS.For best practices on identity and resource control, see Best practices for authentication and authorization in AKS.