Integrace Azure Active Directory se službou Azure Kubernetes Service pomocí Azure CLI (starší verze)

Upozornění

**Funkce popsaná v tomto dokumentu bude 29. února 2024 zastaralá.

AKS má nové vylepšené prostředí Azure AD spravované službou AKS , které nevyžaduje správu serveru nebo klientské aplikace. Pokud chcete migrovat, postupujte podle zde uvedených pokynů.

Službu Azure Kubernetes Service (AKS) je možné nakonfigurovat tak, aby k ověřování uživatelů používala Azure Active Directory (AD). V této konfiguraci se můžete přihlásit ke clusteru AKS pomocí ověřovacího tokenu Azure AD. Operátoři clusteru můžou také nakonfigurovat řízení přístupu na základě role Kubernetes (Kubernetes RBAC) na základě identity uživatele nebo členství ve skupině adresářů.

V tomto článku se dozvíte, jak vytvořit požadované komponenty Azure AD a pak nasadit cluster s podporou Azure AD a vytvořit základní roli Kubernetes v clusteru AKS.

Kompletní ukázkový skript použitý v tomto článku najdete v tématu [Ukázky Azure CLI – integrace AKS se službou Azure AD][complete-script].

Platí následující omezení:

  • Azure AD je možné povolit jenom v clusteru s podporou RBAC kubernetes.
  • Starší verze integrace Azure AD je možné povolit pouze při vytváření clusteru.

Než začnete

Musíte mít nainstalované a nakonfigurované Rozhraní příkazového řádku Azure CLI verze 2.0.61 nebo novější. Verzi zjistíte spuštěním příkazu az --version. Pokud potřebujete instalaci nebo upgrade, přečtěte si téma Instalace Azure CLI.

https://shell.azure.com V prohlížeči otevřete Cloud Shell.

Pokud chcete zajistit konzistenci a pomoct s spuštěním příkazů v tomto článku, vytvořte proměnnou pro požadovaný název clusteru AKS. Následující příklad používá název myakscluster:

aksname="myakscluster"

Přehled ověřování Azure AD

Ověřování Azure AD se poskytuje clusterům AKS s OpenID Connect. OpenID Connect je vrstva identity založená na protokolu OAuth 2.0. Další informace o openID Connect najdete v dokumentaci open ID connect.

V clusteru Kubernetes se k ověření ověřovacích tokenů používá ověřování tokenů Webhook. Ověřování tokenu Webhooku se konfiguruje a spravuje jako součást clusteru AKS. Další informace o ověřování tokenů Webhooku najdete v dokumentaci k ověřování webhooku.

Poznámka

Při konfiguraci ověřování Azure AD pro AKS se nakonfigurují dvě aplikace Azure AD. Tuto operaci musí dokončit správce tenanta Azure.

Vytvoření součásti serveru Azure AD

K integraci s AKS vytvoříte a použijete aplikaci Azure AD, která funguje jako koncový bod pro žádosti o identitu. První aplikace Azure AD, kterou potřebujete, získá členství ve skupině Azure AD pro uživatele.

Pomocí příkazu az ad app create vytvořte komponentu serverové aplikace a pak pomocí příkazu az ad app update aktualizujte deklarace identity členství ve skupinách. Následující příklad používá proměnnou aksname definovanou v části Před zahájením a vytvoří proměnnou.

# 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

Teď vytvořte instanční objekt pro serverovou aplikaci pomocí příkazu az ad sp create . Tento instanční objekt se používá k ověření v rámci platformy Azure. Pak pomocí příkazu az ad sp credential reset získejte tajný kód instančního objektu a přiřaďte proměnnou s názvem serverApplicationSecret pro použití v jednom z následujících kroků:

# 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 Azure AD potřebuje oprávnění k provedení následujících akcí:

  • Čtení dat z adresáře
  • Přihlášení a čtení profilu uživatele

Přiřaďte tato oprávnění pomocí příkazu 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

Nakonec udělte oprávnění přiřazená v předchozím kroku pro serverovou aplikaci pomocí příkazu az ad app permission grant . Tento krok selže, pokud aktuální účet není správcem tenanta. Abyste mohli požádat o informace, které by jinak mohly vyžadovat souhlas správce pomocí příkazu az ad app permission admin-consent, musíte také přidat oprávnění pro aplikaci Azure AD:

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

Vytvoření komponenty klienta Azure AD

Druhá aplikace Azure AD se používá, když se uživatel přihlásí do clusteru AKS pomocí Rozhraní příkazového řádku Kubernetes (kubectl). Tato klientská aplikace přijímá žádost o ověření od uživatele a ověřuje své přihlašovací údaje a oprávnění. Pomocí příkazu az ad app create vytvořte aplikaci Azure AD pro klientskou komponentu:

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:

az ad sp create --id $clientApplicationId

Získejte ID oAuth2 pro serverovou aplikaci, abyste umožnili tok ověřování mezi dvěma komponentami aplikace pomocí příkazu az ad app show . Toto ID oAuth2 se používá v dalším kroku.

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

Přidejte oprávnění pro komponenty klientské aplikace a serverové aplikace k použití toku komunikace oAuth2 pomocí příkazu az ad app permission add . Potom udělte klientským aplikacím oprávnění ke komunikaci se serverovou aplikací pomocí příkazu 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

Nasazení clusteru

S vytvořenými dvěma aplikacemi Azure AD teď vytvořte samotný cluster AKS. Nejprve pomocí příkazu az group create vytvořte skupinu prostředků. Následující příklad vytvoří skupinu prostředků v oblasti EastUS :

Vytvořte skupinu prostředků pro cluster:

az group create --name myResourceGroup --location EastUS

Pomocí příkazu az account show získejte ID tenanta vašeho předplatného Azure. Pak pomocí příkazu az aks create vytvořte cluster AKS. Příkaz k vytvoření clusteru AKS poskytuje ID serveru a klientských aplikací, tajný klíč instančního objektu aplikace serveru a ID tenanta:

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. V jednom z následujících kroků získáte běžné přihlašovací údaje ke clusteru uživatelů , abyste viděli tok ověřování Azure AD v akci.

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

Vytvoření vazby RBAC Kubernetes

Před použitím účtu Azure Active Directory s clusterem AKS je potřeba vytvořit vazbu role nebo vazbu role clusteru. Role definují oprávnění k udělení a vazby je aplikují na požadované uživatele. Tato přiřazení se dají použít pro daný obor názvů nebo v celém clusteru. Další informace najdete v tématu Použití autorizace RBAC Kubernetes.

Pomocí příkazu az ad signed-in-user show získejte hlavní název uživatele (UPN) uživatele, který je aktuálně přihlášený. Tento uživatelský účet je povolený pro integraci Azure AD v dalším kroku.

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

Důležité

Pokud uživatel, kterému udělíte vazbu RBAC Kubernetes, je ve stejném tenantovi Azure AD, přiřaďte oprávnění na základě userPrincipalName. Pokud je uživatel v jiném tenantovi Azure AD, zadejte dotaz na vlastnost objectId a použijte ji.

Vytvořte manifest YAML s názvem basic-azure-ad-binding.yaml a vložte následující obsah. Na posledním řádku nahraďte userPrincipalName_or_objectId výstupem hlavního názvu uživatele (UPN) nebo ID objektu z předchozího příkazu:

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:

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

Přístup ke clusteru pomocí Azure AD

Teď otestujeme integraci ověřování Azure AD pro cluster AKS. kubectl Nastavte kontext konfigurace tak, aby používal běžné přihlašovací údaje uživatele. Tento kontext předává všechny žádosti o ověření zpět prostřednictvím Azure AD.

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

Teď pomocí příkazu kubectl get pods zobrazte pody ve všech oborech názvů:

kubectl get pods --all-namespaces

Zobrazí se výzva k přihlášení k ověření pomocí přihlašovacích údajů Azure AD ve webovém prohlížeči. Po úspěšném ověření kubectl zobrazí příkaz pody v clusteru AKS, jak je znázorněno v následujícím příkladu výstupu:

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

Přijatý ověřovací token je kubectl uložen v mezipaměti. Pokud platnost tokenu vypršela nebo se konfigurační soubor Kubernetes znovu vytvoří, budete se muset znovu přihlásit.

Pokud se po úspěšném přihlášení pomocí webového prohlížeče zobrazí chybová zpráva autorizace jako v následujícím ukázkovém výstupu, zkontrolujte následující možné problémy:

error: You must be logged in to the server (Unauthorized)
  • Definovali jste příslušné ID objektu nebo hlavní název uživatele (UPN) v závislosti na tom, jestli je uživatelský účet ve stejném tenantovi Azure AD nebo ne.
  • Uživatel není členem více než 200 skupin.
  • Tajný klíč definovaný v registraci aplikace pro server odpovídá hodnotě nakonfigurované pomocí --aad-server-app-secret
  • Ujistěte se, že na počítači je současně nainstalovaná jenom jedna verze kubectl. Konfliktní verze můžou způsobit problémy během autorizace. Pokud chcete nainstalovat nejnovější verzi, použijte az aks install-cli.

Další kroky

Úplný skript, který obsahuje příkazy uvedené v tomto článku, najdete v tématu [Integrační skript Azure AD v úložišti ukázek AKS][complete-script].

Pokud chcete pomocí uživatelů a skupin Azure AD řídit přístup k prostředkům clusteru, přečtěte si téma Řízení přístupu k prostředkům clusteru pomocí řízení přístupu na základě role Kubernetes a identit Azure AD v AKS.

Další informace o zabezpečení clusterů Kubernetes najdete v tématu Možnosti přístupu a identit pro AKS.

Osvědčené postupy pro řízení identit a prostředků najdete v tématu Osvědčené postupy pro ověřování a autorizaci v AKS.