Microsoft Entra ID integreren met Azure Kubernetes Service (AKS) met behulp van de Azure CLI (verouderd)

Waarschuwing

De functie die in dit document wordt beschreven, is Microsoft Entra Integration (verouderd) afgeschaft op 1 juni 2023. Op dit moment kunnen er geen nieuwe clusters worden gemaakt met Microsoft Entra Integration (verouderd).

AKS heeft een nieuwe verbeterde, door AKS beheerde Microsoft Entra ID-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 Microsoft Entra-id voor gebruikersverificatie. In deze configuratie kunt u zich aanmelden bij een AKS-cluster met behulp van een Microsoft Entra-verificatietoken. Clusteroperators kunnen ook Op rollen gebaseerd toegangsbeheer van Kubernetes (Kubernetes RBAC) configureren op basis van de identiteit of het lidmaatschap van een directorygroep van een gebruiker.

In dit artikel leest u hoe u de vereiste Microsoft Entra-onderdelen maakt, vervolgens een Microsoft Entra ID-cluster implementeert en een eenvoudige Kubernetes-rol maakt in het AKS-cluster.

Beperkingen

  • Microsoft Entra-id kan alleen worden ingeschakeld op een Kubernetes RBAC-cluster.
  • Verouderde Microsoft Entra-integratie kan alleen worden ingeschakeld tijdens het maken van het cluster.

Voordat u begint

U moet Azure CLI versie 2.0.61 of hoger hebben geïnstalleerd en geconfigureerd. Voer az --version uit om de versie te bekijken. Als u Azure CLI 2.0 wilt installeren of upgraden, raadpleegt u Azure CLI 2.0 installeren.

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 naam van het AKS-cluster. In het volgende voorbeeld wordt de naam myakscluster gebruikt:

aksname="myakscluster"

Overzicht van Microsoft Entra-verificatie

Microsoft Entra-verificatie wordt geleverd aan AKS-clusters met OpenID-Verbinding maken. OpenID Verbinding maken is een identiteitslaag die is gebouwd boven op het OAuth 2.0-protocol. Zie de documentatie over OpenID Verbinding maken voor meer informatie over OpenID-Verbinding maken.

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 Microsoft Entra-id voor AKS-verificatie worden twee Microsoft Entra-toepassingen geconfigureerd. Deze bewerking moet worden voltooid door een Azure-tenantbeheerder.

Microsoft Entra-serveronderdeel maken

Als u wilt integreren met AKS, maakt en gebruikt u een Microsoft Entra-toepassing die fungeert als eindpunt voor de identiteitsaanvragen. De eerste Microsoft Entra-toepassing die u nodig hebt, krijgt microsoft Entra-groepslidmaatschap voor een gebruiker.

Maak het servertoepassingsonderdeel met behulp van de opdracht az ad app create en werk vervolgens de groepslidmaatschapclaims bij met behulp van de opdracht az ad app update . In het volgende voorbeeld wordt de aksname-variabele 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 geheim van de service-principal op met behulp van de opdracht az ad sp credential reset en wijs deze toe aan de variabele 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 Microsoft Entra-service-principal heeft machtigingen nodig om de volgende acties uit te voeren:

  • Mapgegevens lezen
  • Aanmelden en gebruikersprofiel lezen

Wijs deze machtigingen toe met behulp van 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 zijn toegewezen in de vorige stap voor de servertoepassing 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 de Microsoft Entra-toepassing om informatie op te vragen waarvoor anders beheerderstoestemming nodig is met behulp van de beheerderstoestemming voor az ad-app:

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

Microsoft Entra-clientonderdeel maken

De tweede Microsoft Entra-toepassing wordt gebruikt wanneer een gebruiker zich bij het AKS-cluster aanmeldt met de Kubernetes CLI (kubectl). Deze clienttoepassing neemt de verificatieaanvraag van de gebruiker op en controleert de referenties en machtigingen. Maak de Microsoft Entra-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 clienttoepassing en servertoepassingsonderdelen toe om de oAuth2-communicatiestroom te gebruiken met behulp van de opdracht az ad app permission add . Verdeel vervolgens machtigingen voor de clienttoepassing om te communiceren 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 Microsoft Entra-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 EastUS :

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 behulp van de opdracht az aks create . De opdracht voor het maken van het AKS-cluster biedt de server- en clienttoepassings-id's, het geheim van de service-principal 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 krijgt u de reguliere gebruikersclusterreferenties om de Microsoft Entra-verificatiestroom in actie te zien.

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

Kubernetes RBAC-binding maken

Voordat een Microsoft Entra-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 ze toe op de gewenste gebruikers. Deze toewijzingen kunnen worden toegepast op een bepaalde naamruimte of in 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 Microsoft Entra-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 Microsoft Entra-tenant bevindt, wijst u machtigingen toe op basis van de userPrincipalName. Als de gebruiker zich in een andere Microsoft Entra-tenant bevindt, zoekt en gebruikt u in plaats daarvan de eigenschap objectId .

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

Nu gaan we de integratie van Microsoft Entra-verificatie voor het AKS-cluster testen. Stel de kubectl configuratiecontext in om reguliere gebruikersreferenties te gebruiken. Deze context geeft alle verificatieaanvragen weer door via Microsoft Entra-id.

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 Microsoft Entra-referenties met behulp van 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 is ontvangen voor kubectl , wordt in de cache opgeslagen. U wordt alleen gevraagd u aan te melden wanneer het token is verlopen of het Kubernetes-configuratiebestand opnieuw wordt gemaakt.

Als u een autorisatiefout 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 Microsoft Entra-tenant bevindt of niet.
  • De gebruiker is geen lid van meer dan 200 groepen.
  • Geheim dat is gedefinieerd in de toepassingsregistratie voor de 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.

Veelgestelde vragen over migratie van Microsoft Entra-integratie met door AKS beheerde Microsoft Entra-id

1. Wat is het plan voor migratie?

Microsoft Entra Integration (verouderd) wordt op 1 juni 2023 afgeschaft. Na deze datum kunt u geen nieuwe clusters maken met Microsoft Entra ID (verouderd). Alle AKS-clusters (Microsoft Entra Integration) worden automatisch gemigreerd naar door AKS beheerde Microsoft Entra ID vanaf 1 augustus 2023. Er worden twee weken per week meldingen verzonden naar betrokken abonnementsbeheerders om hen eraan te herinneren dat ze worden gemigreerd.

2. Wat gebeurt er als ik geen actie onderneem?

Uw Microsoft Entra Integration (verouderd) AKS-clusters blijven werken na 1 juni 2023. Uw clusters worden vanaf 1 augustus 2023 automatisch gemigreerd naar door AKS beheerde Microsoft Entra-id. Tijdens de migratie kan er downtime van de API-server optreden.

De kubeconfig-inhoud wordt na de migratie gewijzigd. U moet de nieuwe referenties samenvoegen in het kubeconfig-bestand met behulp van de az aks get-credentials --resource-group <AKS resource group name> --name <AKS cluster name>.

U wordt aangeraden uw AKS-cluster handmatig bij te werken naar door AKS beheerde Microsoft Entra ID vóór 1 augustus. Op deze manier kunt u de downtime tijdens niet-kantooruren beheren wanneer dit handiger is.

3. Waarom ontvang ik nog steeds de e-mailmelding na handmatige migratie?

Het duurt enkele dagen voordat het e-mailbericht is verzonden. Als uw cluster niet is gemigreerd voordat we het e-mailverzendingsproces initiëren, ontvangt u mogelijk nog steeds een melding.

4. Hoe kan ik controleren of mijn cluster is gemigreerd naar door AKS beheerde Microsoft Entra-id?

Controleer of uw AKS-cluster is gemigreerd naar de door AKS beheerde Microsoft Entra-id met behulp van de az aks show opdracht.

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

Als uw cluster gebruikmaakt van de door AKS beheerde Microsoft Entra-id, wordt truede uitvoer weergegevenmanaged. Voorbeeld:

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

Volgende stappen

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

Als u Microsoft Entra-gebruikers en -groepen wilt gebruiken om de toegang tot clusterbronnen te beheren, raadpleegt u Toegang tot clusterbronnen beheren met behulp van op rollen gebaseerd toegangsbeheer van Kubernetes en Microsoft Entra-identiteiten in AKS.

Zie Access- 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.