Azure Active Directory integreren met Azure Kubernetes Service met behulp van de Azure CLI (verouderd)

Waarschuwing

**De functie die in dit document wordt beschreven, Azure AD Integration (verouderd), wordt op 1 juni 2023 afgeschaft. Op dat moment kunnen er geen nieuwe clusters worden gemaakt met Azure AD Integration (verouderd). Alle Azure AD Integration (verouderd) AKS-clusters worden vanaf 1 augustus 2023 automatisch gemigreerd naar door AKS beheerde Azure AD.

AKS heeft een nieuwe verbeterde, door AKS beheerde Azure AD ervaring waarvoor u geen server- of clienttoepassingen hoeft te beheren. Als u wilt migreren, volgt u de instructies hier.

Azure Kubernetes Service (AKS) kan worden geconfigureerd voor het gebruik van Azure Active Directory (AD) voor gebruikersverificatie. In deze configuratie kunt u zich aanmelden bij een AKS-cluster met behulp van een Azure AD-verificatietoken. Clusteroperators kunnen ook kubernetes op rollen gebaseerd toegangsbeheer (Kubernetes RBAC) configureren op basis van de identiteit van een gebruiker of lidmaatschap van een directorygroep.

In dit artikel wordt beschreven hoe u de vereiste Azure AD-onderdelen maakt, vervolgens een cluster met Azure AD implementeert en een eenvoudige Kubernetes-rol maakt in het AKS-cluster.

Zie [Azure CLI-voorbeelden - AKS-integratie met Azure AD][complete-script] voor het volledige voorbeeldscript dat in dit artikel wordt gebruikt.

De volgende beperkingen zijn van toepassing:

  • Azure AD kan alleen worden ingeschakeld op kubernetes RBAC-cluster.
  • Azure AD verouderde integratie kan alleen worden ingeschakeld tijdens het maken van het cluster.

Voordat u begint

Azure CLI versie 2.0.61 of hoger moet zijn geïnstalleerd en geconfigureerd. Voer az --version uit om de versie te bekijken. Zie Azure CLI installeren als u de CLI wilt installeren of een upgrade wilt uitvoeren.

Ga naar https://shell.azure.com om Cloud Shell in uw browser te openen.

Voor consistentie en om de opdrachten in dit artikel uit te voeren, maakt u een variabele voor de gewenste AKS-clusternaam. In het volgende voorbeeld wordt de naam myakscluster gebruikt:

aksname="myakscluster"

Overzicht van Azure AD-verificatie

Azure AD verificatie wordt geleverd aan AKS-clusters met OpenID Connect. OpenID Connect is een identiteitslaag die is gebouwd op het OAuth 2.0-protocol. Zie de Open ID Connect-documentatie voor meer informatie over OpenID Connect.

Vanuit het Kubernetes-cluster wordt webhooktokenverificatie gebruikt om verificatietokens te verifiëren. Verificatie van webhooktoken wordt geconfigureerd en beheerd als onderdeel van het AKS-cluster. Zie de documentatie voor webhookverificatie voor meer informatie over webhooktokenverificatie.

Notitie

Bij het configureren van Azure AD voor AKS-verificatie worden twee Azure AD toepassingen geconfigureerd. Deze bewerking moet worden voltooid door een Azure-tenantbeheerder.

Azure AD-serveronderdeel maken

Voor integratie met AKS maakt en gebruikt u een Azure AD toepassing die fungeert als eindpunt voor de identiteitsaanvragen. De eerste Azure AD toepassing die u nodig hebt, krijgt Azure AD groepslidmaatschap voor een gebruiker.

Maak het servertoepassingsonderdeel met behulp van de opdracht az ad app create en werk vervolgens de claims voor groepslidmaatschap bij met behulp van de opdracht az ad app update . In het volgende voorbeeld wordt de variabele aksname gebruikt die is gedefinieerd in de sectie Voordat u begint en maakt u een variabele

# 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

Maak nu een service-principal voor de server-app met behulp van de opdracht az ad sp create . Deze service-principal wordt gebruikt om zichzelf te verifiëren binnen het Azure-platform. Haal vervolgens het service-principalgeheim op met behulp van de opdracht az ad sp credential reset en wijs deze toe aan de variabele met de naam serverApplicationSecret voor gebruik in een van de volgende stappen:

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

De Azure AD-service-principal heeft machtigingen nodig om de volgende acties uit te voeren:

  • Mapgegevens lezen
  • Aanmelden en gebruikersprofiel lezen

Wijs deze machtigingen toe met de opdracht 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

Verleen ten slotte de machtigingen die in de vorige stap voor de servertoepassing zijn toegewezen met behulp van de opdracht az ad app permission grant . Deze stap mislukt als het huidige account geen tenantbeheerder is. U moet ook machtigingen toevoegen voor Azure AD toepassing om informatie aan te vragen waarvoor anders mogelijk beheerderstoestemming is vereist met behulp van 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

Azure AD clientonderdeel maken

De tweede Azure AD toepassing wordt gebruikt wanneer een gebruiker zich aanmeldt bij het AKS-cluster met de Kubernetes CLI (kubectl). Deze clienttoepassing neemt de verificatieaanvraag van de gebruiker en verifieert hun referenties en machtigingen. Maak de Azure AD-app voor het clientonderdeel met behulp van de opdracht az ad app create:

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

Maak een service-principal voor de clienttoepassing met behulp van de opdracht az ad sp create :

az ad sp create --id $clientApplicationId

Haal de oAuth2-id voor de server-app op om de verificatiestroom tussen de twee app-onderdelen toe te staan met behulp van de opdracht az ad app show . Deze oAuth2-id wordt gebruikt in de volgende stap.

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

Voeg de machtigingen voor de onderdelen van de clienttoepassing en servertoepassing toe om de oAuth2-communicatiestroom te gebruiken met behulp van de opdracht az ad app permission add . Verdeel vervolgens machtigingen voor de clienttoepassing voor communicatie met de servertoepassing met behulp van de opdracht 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

Het cluster implementeren

Nu de twee Azure AD toepassingen zijn gemaakt, maakt u nu het AKS-cluster zelf. Maak eerst een resourcegroep met behulp van de opdracht az group create . In het volgende voorbeeld wordt de resourcegroep gemaakt in de regio VS Oost :

Maak een resourcegroep voor het cluster:

az group create --name myResourceGroup --location EastUS

Haal de tenant-id van uw Azure-abonnement op met behulp van de opdracht az account show . Maak vervolgens het AKS-cluster met de opdracht az aks create . De opdracht voor het maken van het AKS-cluster biedt de server- en clienttoepassings-id's, het service-principalgeheim van de servertoepassing en uw 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

Haal ten slotte de referenties van de clusterbeheerder op met behulp van de opdracht az aks get-credentials . In een van de volgende stappen haalt u de referenties van het normale gebruikerscluster op om de Azure AD verificatiestroom in actie te zien.

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

Kubernetes RBAC-binding maken

Voordat een Azure Active Directory-account kan worden gebruikt met het AKS-cluster, moet er een rolbinding of clusterrolbinding worden gemaakt. Rollen definiëren de machtigingen die moeten worden verleend en bindingen passen deze toe op de gewenste gebruikers. Deze toewijzingen kunnen worden toegepast op een bepaalde naamruimte of op het hele cluster. Zie Kubernetes RBAC-autorisatie gebruiken voor meer informatie.

Haal de UPN (User Principal Name) op voor de gebruiker die momenteel is aangemeld met behulp van de opdracht az ad signed-in-user show . Dit gebruikersaccount is ingeschakeld voor Azure AD integratie in de volgende stap.

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

Belangrijk

Als de gebruiker waarvoor u de Kubernetes RBAC-binding verleent zich in dezelfde Azure AD tenant bevindt, wijst u machtigingen toe op basis van de userPrincipalName. Als de gebruiker zich in een andere Azure AD tenant bevindt, zoekt u de eigenschap objectId op en gebruikt u deze in plaats daarvan.

Maak een YAML-manifest met de naam basic-azure-ad-binding.yaml en plak de volgende inhoud. Vervang op de laatste regel userPrincipalName_or_objectId door de UPN- of object-id-uitvoer van de vorige opdracht:

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

Maak de ClusterRoleBinding met behulp van de opdracht kubectl apply en geef de bestandsnaam van uw YAML-manifest op:

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

Toegang tot cluster met Azure AD

Nu gaan we de integratie van Azure AD verificatie voor het AKS-cluster testen. Stel de kubectl configuratiecontext in op het gebruik van normale gebruikersreferenties. Deze context stuurt alle verificatieaanvragen terug via Azure AD.

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

Gebruik nu de opdracht kubectl get pods om pods in alle naamruimten weer te geven:

kubectl get pods --all-namespaces

U ontvangt een aanmeldingsprompt voor verificatie met behulp van Azure AD referenties in een webbrowser. Nadat u bent geverifieerd, worden met de kubectl opdracht de pods in het AKS-cluster weergegeven, zoals wordt weergegeven in de volgende voorbeelduitvoer:

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

Het verificatietoken dat voor is ontvangen, kubectl wordt in de cache opgeslagen. U kunt zich alleen opnieuw aanmelden wanneer het token is verlopen of wanneer het Kubernetes-configuratiebestand opnieuw wordt gemaakt.

Als u een autorisatiefoutbericht ziet nadat u zich hebt aangemeld met een webbrowser, zoals in de volgende voorbeelduitvoer, controleert u de volgende mogelijke problemen:

error: You must be logged in to the server (Unauthorized)
  • U hebt de juiste object-id of UPN gedefinieerd, afhankelijk van of het gebruikersaccount zich in dezelfde Azure AD tenant bevindt of niet.
  • De gebruiker is geen lid van meer dan 200 groepen.
  • Geheim dat is gedefinieerd in de toepassingsregistratie voor server komt overeen met de waarde die is geconfigureerd met behulp van --aad-server-app-secret
  • Zorg ervoor dat er slechts één versie van kubectl tegelijk op uw computer is geïnstalleerd. Conflicterende versies kunnen problemen veroorzaken tijdens de autorisatie. Gebruik az aks install-cli om de nieuwste versie te installeren.

Volgende stappen

Zie het [Azure AD integratiescript in de opslagplaats voor AKS-voorbeelden][complete-script] voor het volledige script dat de opdrachten bevat die in dit artikel worden weergegeven.

Zie Toegang tot clusterresources beheren met kubernetes op rollen gebaseerd toegangsbeheer en Azure AD identiteiten in AKS als u Azure AD gebruikers en groepen wilt gebruiken om de toegang tot clusterresources te beheren.

Zie Toegangs- en identiteitsopties voor AKS) voor meer informatie over het beveiligen van Kubernetes-clusters.

Zie Best practices voor verificatie en autorisatie in AKS voor aanbevolen procedures voor identiteits- en resourcebeheer.