Microsoft Entra-id instellen voor clientverificatie

Waarschuwing

Op dit moment zijn microsoft Entra-clientverificatie en de Managed Identity Token-service wederzijds niet compatibel in Linux.

Voor clusters die worden uitgevoerd in Azure, wordt Microsoft Entra ID aanbevolen om de toegang tot beheereindpunten te beveiligen. In dit artikel wordt beschreven hoe u Microsoft Entra-id instelt voor het verifiëren van clients voor een Service Fabric-cluster.

In Linux moet u de volgende stappen uitvoeren voordat u het cluster maakt. In Windows hebt u ook de mogelijkheid om Microsoft Entra-verificatie voor een bestaand cluster te configureren.

In dit artikel verwijst de term 'toepassing' naar Microsoft Entra-toepassingen, niet naar Service Fabric-toepassingen; het onderscheid wordt waar nodig gemaakt. Met Microsoft Entra ID kunnen organisaties (ook wel tenants genoemd) gebruikerstoegang tot toepassingen beheren.

Een Service Fabric-cluster biedt verschillende toegangspunten bij de management-functionaliteit, met inbegrip van de webconsoles Service Fabric Explorer en Visual Studio. Als gevolg hiervan maakt u twee Microsoft Entra-toepassingen om de toegang tot het cluster te beheren: één webtoepassing en één systeemeigen toepassing. Nadat de toepassingen zijn gemaakt, wijst u gebruikers toe aan alleen-lezen- en beheerdersrollen.

Notitie

Op dit moment biedt Service Fabric geen ondersteuning voor Microsoft Entra-verificatie voor opslag.

Notitie

Het is een bekend probleem dat toepassingen en knooppunten op Linux Microsoft Entra ID-clusters niet kunnen worden weergegeven in Azure Portal.

Notitie

Microsoft Entra ID vereist nu dat een uitgeversdomein van een toepassing (app-registratie) wordt geverifieerd of gebruikt. Zie Configureren van het uitgeversdomein van een toepassing en appid-URI in toepassingen met één tenant vereist het gebruik van standaardschema of geverifieerde domeinen voor aanvullende informatie.

Notitie

Vanaf Service Fabric 11.0 is voor Service Fabric Explorer een omleidings-URI met één pagina vereist in plaats van een webomleidings-URI.

Vereisten

In dit artikel nemen we aan dat u al een tenant hebt gemaakt. Als u dat nog niet hebt gedaan, leest u eerst hoe u een Microsoft Entra-tenant krijgt. Om een aantal van de stappen bij het configureren van Microsoft Entra ID met een Service Fabric-cluster te vereenvoudigen, hebben we een set Windows PowerShell-scripts gemaakt. Voor sommige acties is toegang op beheerniveau tot Microsoft Entra-id vereist. Als het script een fout 401 of 403 'Authorization_RequestDenied' ondervindt, moet een beheerder een script uitvoeren.

  1. Verifiëren met Azure-beheerdersmachtigingen.
  2. Kloon de opslagplaats naar uw computer.
  3. Zorg ervoor dat alle vereisten voor de scripts zijn geïnstalleerd.

Microsoft Entra-toepassingen maken en gebruikers toewijzen aan rollen

We gebruiken de scripts om twee Microsoft Entra-toepassingen te maken om de toegang tot het cluster te beheren: één webtoepassing en één systeemeigen toepassing. Nadat u toepassingen hebt gemaakt die uw cluster vertegenwoordigen, maakt u gebruikers voor de rollen die door Service Fabric worden ondersteund: alleen-lezen en beheerder.

SetupApplications.ps1

Voer SetupApplications.ps1 de tenant-id, de clusternaam, de webtoepassings-URI en de antwoord-URL van de webtoepassing op als parameters. Gebruik -remove om de app-registraties te verwijderen. Met behulp van -logFile <log file path> wordt een transcriptlogboek gegenereerd. Zie script help (help .\setupApplications.ps1 -full) voor meer informatie. Het script maakt het web en de systeemeigen toepassingen die uw Service Fabric-cluster vertegenwoordigen. De twee nieuwe vermeldingen voor app-registratie hebben de volgende indeling:

  • ClusterName_Cluster
  • ClusterName_Client

Notitie

Voor nationale clouds (bijvoorbeeld Azure Government, Microsoft Azure beheerd door 21Vianet), moet u ook de -Location parameter opgeven.

Parameters

  • tenantId: U kunt uw TenantId vinden door de PowerShell-opdracht Get-AzureSubscriptionuit te voeren. Als u deze opdracht uitvoert, wordt de TenantId voor elk abonnement weergegeven.

  • clusterName:ClusterName wordt gebruikt voor het voorvoegsel van de Microsoft Entra-toepassingen die door het script worden gemaakt. Deze hoeft niet exact overeen te komen met de werkelijke clusternaam. Het is alleen bedoeld om Microsoft Entra-artefacten gemakkelijker toe te wijzen aan het Service Fabric-cluster waarmee ze worden gebruikt.

  • SpaApplicationReplyUrl:SpaApplicationReplyUrl is het standaardeindpunt dat Microsoft Entra ID retourneert aan uw gebruikers nadat ze klaar zijn met aanmelden. Stel dit eindpunt in als het Service Fabric Explorer-eindpunt voor uw cluster. Als u Microsoft Entra-toepassingen maakt om een bestaand cluster weer te geven, moet u ervoor zorgen dat deze URL overeenkomt met het eindpunt van uw bestaande cluster. Als u toepassingen voor een nieuw cluster maakt, moet u het eindpunt voor uw cluster plannen en ervoor zorgen dat u het eindpunt van een bestaand cluster niet gebruikt. Het Service Fabric Explorer-eindpunt is standaard: https://<cluster_domain>:19080/Explorer/index.html

  • webApplicationUri:WebApplicationUri is de URI van een geverifieerd domein of URI met behulp van de API-schemaindeling van API://{{tenant-id}}/{{clusternaam}}. Zie AppId-URI in toepassingen met één tenant vereist het gebruik van standaardschema of geverifieerde domeinen voor aanvullende informatie.

    Voorbeeld-API-schema: API://0e3d2646-78b3-4711-b8be-74a381d9890c/mysftestcluster

Voorbeeld setupApplications.ps1

# if using cloud shell
# cd clouddrive 
# git clone https://github.com/Azure-Samples/service-fabric-aad-helpers
# cd service-fabric-aad-helpers
# code .

$tenantId = '0e3d2646-78b3-4711-b8be-74a381d9890c'
$clusterName = 'mysftestcluster'
$spaApplicationReplyUrl = 'https://mysftestcluster.eastus.cloudapp.azure.com:19080/Explorer/index.html' # <--- client browser redirect url
#$webApplicationUri = 'https://mysftestcluster.contoso.com' # <--- must be verified domain due to AAD changes
$webApplicationUri = "API://$tenantId/$clusterName" # <--- doesn't have to be verified domain

$configObj = .\SetupApplications.ps1 -TenantId $tenantId `
  -ClusterName $clusterName `
  -SpaApplicationReplyUrl $spaApplicationReplyUrl `
  -AddResourceAccess `
  -WebApplicationUri $webApplicationUri `
  -Verbose

Het script voert $configObj variabele uit voor volgende opdrachten en drukt de JSON af die is vereist voor de Azure Resource Manager-sjabloon. Kopieer de JSON-uitvoer en gebruik deze bij het maken of wijzigen van een bestaand cluster om uw Cluster met Microsoft Entra ID te maken of te wijzigen.

Voorbeelduitvoer setupApplications.ps1

Name                           Value
----                           -----
WebAppId                       f263fd84-ec9e-44c0-a419-673b1b9fd345
TenantId                       0e3d2646-78b3-4711-b8be-74a381d9890c
ServicePrincipalId             3d10f55b-1876-4a62-87db-189bfc54a9f2
NativeClientAppId              b22cc0e2-7c4e-480c-89f5-25f768ecb439

-----ARM template-----
"azureActiveDirectory": {
  "tenantId":"0e3d2646-78b3-4711-b8be-74a381d9890c",
  "clusterApplication":"f263fd84-ec9e-44c0-a419-673b1b9fd345",
  "clientApplication":"b22cc0e2-7c4e-480c-89f5-25f768ecb439"
},

azureActiveDirectory-parametersobject JSON

"azureActiveDirectory": {
  "tenantId":"<guid>",
  "clusterApplication":"<guid>",
  "clientApplication":"<guid>"
},

SetupUser.ps1

SetupUser.ps1 wordt gebruikt om gebruikersaccounts toe te voegen aan de zojuist gemaakte app-registratie met behulp van $configObj uitvoervariabele van hierboven. Geef de gebruikersnaam op voor het gebruikersaccount dat moet worden geconfigureerd met app-registratie en geef 'is Beheer' op voor beheerdersmachtigingen. Als het gebruikersaccount nieuw is, geeft u ook het tijdelijke wachtwoord voor de nieuwe gebruiker op. Het wachtwoord moet worden gewijzigd bij de eerste aanmelding. Als u '-remove' gebruikt, verwijdert u het gebruikersaccount, niet alleen de app-registratie.

Voorbeeld van SetupUser.ps1-gebruiker (gelezen)

.\SetupUser.ps1 -ConfigObj $configobj `
  -UserName 'TestUser' `
  -Password 'P@ssword!123' `
  -Verbose

Voorbeeld setupUser.ps1-beheerder (lezen/schrijven)

.\SetupUser.ps1 -ConfigObj $configobj `
  -UserName 'TestAdmin' `
  -Password 'P@ssword!123' `
  -IsAdmin `
  -Verbose

SetupClusterResource.ps1

SetupClusterResource.ps1 kan eventueel worden gebruikt voor het exporteren van een bestaande ARM-clusterresourcesjabloon, het toevoegen/wijzigen van de configuratie van azureActiveDirectory en het opnieuw implementeren van een sjabloon. Gebruik '-Whatif' om alleen sjabloon te exporteren en te wijzigen, maar niet om configuratiewijziging opnieuw te implementeren. Voor dit script is de Azure Az-module en de naam van de resourcegroep voor het cluster vereist.

SetupClusterResource.ps1 - whatIf-voorbeeld

# requires azure module 'az'
# install-module az
$resourceGroupName = 'mysftestcluster'
.\SetupClusterResource.ps1 -configObj $configObj `
  -resourceGroupName $resourceGroupName `
  -WhatIf

Zodra de sjabloon is geverifieerd en klaar is voor verwerking, voert u het script opnieuw uit zonder '-WhatIf' of gebruikt u powershell commandlet 'New-AzResourceGroupDeployment' om de sjabloon te implementeren.

Voorbeeld setupClusterResource.ps1

$resourceGroupName = 'mysftestcluster'
.\SetupClusterResource.ps1 -configObj $configObj `
  -resourceGroupName $resourceGroupName

Notitie

Clusterinrichting van ARM-sjablonen of -scripts bijwerken met nieuwe clusterresources microsoft Entra-configuratiewijzigingen.

Het kan nodig zijn om beheerderstoestemming te verlenen voor de API-machtigingen die worden geconfigureerd. Navigeer naar de blade Azure-app registraties en voeg de naam van het cluster toe aan het filter. Voor beide registraties opent u API-machtigingen en selecteert u 'Beheerderstoestemming verlenen' indien beschikbaar.

Screenshot that shows Grant admin consent selected on the Azure App registrations blade.

Screenshot that shows the Grant admin consent confirmation with Yes highlighted.

Configuratie van Microsoft Entra controleren

Navigeer naar de URL van Service Fabric Explorer (SFX). Dit moet hetzelfde zijn als de parameter spaApplicationReplyUrl. Er moet een dialoogvenster voor Azure-verificatie worden weergegeven. Meld u aan met een account dat is geconfigureerd met de nieuwe Microsoft Entra-configuratie. Controleer of het beheerdersaccount lees-/schrijftoegang heeft en of de gebruiker leestoegang heeft. Wijzigingen in het cluster, bijvoorbeeld het uitvoeren van een actie, zijn een beheeractie.

Hulp bij het instellen van Microsoft Entra-id oplossen

Het instellen van Microsoft Entra-id en het gebruik ervan kan lastig zijn. Hier volgen enkele aanwijzingen voor wat u kunt doen om het probleem op te sporen. Logboekregistratie van PowerShell-transcripties kan worden ingeschakeld met behulp van het argument '-logFile' in scripts 'SetupApplications.ps1' en 'SetupUser.ps1' om de uitvoer te controleren.

Notitie

Met de migratie van identiteitenplatforms (ADAL naar MSAL), afschaffing van AzureRM ten gunste van Azure AZ en het ondersteunen van meerdere versies van PowerShell, zijn afhankelijkheden mogelijk niet altijd correct of up-to-date, waardoor fouten in de uitvoering van scripts worden veroorzaakt. Het uitvoeren van PowerShell-opdrachten en -scripts vanuit Azure Cloud Shell vermindert de kans op fouten met sessie autoverificatie en beheerde identiteit.

Button to launch the Azure Cloud Shell.

Request_BadRequest

Probleem

Geen geldige verwijzingsupdate. Http-statuscode: 400.

VERBOSE: POST with 157-byte payload
VERBOSE: received -byte response of content type application/json
>> TerminatingError(Invoke-WebRequest): "{"error":{"code":"Request_BadRequest","message":"Not a valid reference update.","innerError":{"date":"2022-09-11T22:17:16","request-id":"61fadb2a-478b-4483-8f23-d17e13732104","client-request-id":"61fadb2a-478b-4483-8f23-d17e13732104"}}}"
confirm-graphApiRetry returning:True
VERBOSE: invoke-graphApiCall status: 400
exception:
Response status code doesn't indicate success: 400 (Bad Request).

Invoke-WebRequest: /home/<user>/clouddrive/service-fabric-aad-helpers/Common.ps1:239
Line |
 239 |  …   $result = Invoke-WebRequest $uri -Method $method -Headers $headers  …
     |                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     | {"error":{"code":"Request_BadRequest","message":"Not a valid reference update.","innerError":{"date":"2022-09-11T22:17:16","request-id":"61fadb2a-478b-4483-8f23-d17e13732104","client-request-id":"61fadb2a-478b-4483-8f23-d17e13732104"}}}

at invoke-graphApiCall, /home/<user>/clouddrive/service-fabric-aad-helpers/Common.ps1: line 239
at invoke-graphApi, /home/<user>/clouddrive/service-fabric-aad-helpers/Common.ps1: line 275
at add-roleAssignment, /home/<user>/clouddrive/service-fabric-aad-helpers/SetupUser.ps1: line 193
at add-user, /home/<user>/clouddrive/service-fabric-aad-helpers/SetupUser.ps1: line 244
at enable-AADUser, /home/<user>/clouddrive/service-fabric-aad-helpers/SetupUser.ps1: line 178
at main, /home/<user>/clouddrive/service-fabric-aad-helpers/SetupUser.ps1: line 136
at <ScriptBlock>, /home/<user>/clouddrive/service-fabric-aad-helpers/SetupUser.ps1: line 378
at <ScriptBlock>, /home/<user>/clouddrive/aad-test.ps1: line 43
at <ScriptBlock>, <No file>: line 1
WARNING: invoke-graphApiCall response status: 400
invoke-graphApi count:0 statuscode:400 -uri https://graph.microsoft.com/v1.0/0e3d2646-78b3-4711-b8be-74a381d9890c/servicePrincipals/3d10f55b-1876-4a62-87db-189bfc54a9f2/appRoleAssignedTo -headers System.Collections.Hashtable -body System.Collections.Hashtable -method post
confirm-graphApiRetry returning:True

Reden

Configuratiewijzigingen zijn niet doorgegeven. Scripts proberen het opnieuw op bepaalde aanvragen met HTTP-statuscodes 400 en 404.

Oplossing

Scripts proberen opnieuw op bepaalde aanvragen met HTTP-statuscodes 400 en 404 upto opgegeven '-timeoutMin' die standaard 5 minuten is. Het script kan indien nodig opnieuw worden uitgevoerd.

Service Fabric Explorer vraagt u om een certificaat te selecteren

Probleem

Nadat u zich hebt aangemeld bij Microsoft Entra ID in Service Fabric Explorer, keert de browser terug naar de startpagina, maar u wordt gevraagd een certificaat te selecteren.

SFX certificate dialog

Reden

De gebruiker heeft geen rol toegewezen in de Microsoft Entra ID-clustertoepassing. Microsoft Entra-verificatie mislukt dus in het Service Fabric-cluster. Service Fabric Explorer valt terug op certificaatverificatie.

Oplossing

Volg de instructies voor het instellen van Microsoft Entra-id en wijs gebruikersrollen toe. We raden u ook aan 'Gebruikerstoewijzing vereist voor toegang tot app' in te schakelen, zoals SetupApplications.ps1 wel.

Verbinding maken met PowerShell mislukt met een fout: 'De opgegeven referenties zijn ongeldig'

Probleem

Wanneer u PowerShell gebruikt om verbinding te maken met het cluster met behulp van de beveiligingsmodus 'AzureActiveDirectory', mislukt de verbinding met de Microsoft Entra-id nadat u zich hebt aangemeld bij de Microsoft Entra-id: 'De opgegeven referenties zijn ongeldig'.

Oplossing

Deze oplossing is hetzelfde als de voorgaande oplossing.

Service Fabric Explorer retourneert een fout wanneer u zich aanmeldt: 'AADSTS50011'

Probleem

Wanneer u zich probeert aan te melden bij Microsoft Entra ID in Service Fabric Explorer, retourneert de pagina een fout: 'AADSTS50011: De antwoordadres-URL <> komt niet overeen met de antwoordadressen die zijn geconfigureerd voor de toepassing: guid>'. <

SFX reply address doesn't match

Reden

De clustertoepassing (web) die Service Fabric Explorer vertegenwoordigt, probeert zich te verifiëren met Microsoft Entra-id en als onderdeel van de aanvraag biedt deze de omleidings-URL. De URL wordt echter niet vermeld in de lijst MET ANTWOORD-URL's van Microsoft Entra-toepassingen.

Oplossing

Selecteer verificatie op de registratiepagina van de Microsoft Entra-app voor uw cluster en voeg onder de sectie Omleidings-URI's de URL van Service Fabric Explorer toe aan de lijst. Sla uw wijziging op.

Web application reply URL

Verbinding maken bij het cluster met behulp van Microsoft Entra-verificatie via PowerShell krijgt u een foutmelding wanneer u zich aanmeldt: 'AADSTS50011'

Probleem

Wanneer u probeert verbinding te maken met een Service Fabric-cluster met behulp van Microsoft Entra ID via PowerShell, retourneert de aanmeldingspagina een fout: 'AADSTS50011: De antwoord-URL die is opgegeven in de aanvraag komt niet overeen met de antwoord-URL's die zijn geconfigureerd voor de toepassing: <guid>.

Reden

Net als bij het voorgaande probleem probeert PowerShell zich te verifiëren bij Microsoft Entra ID, die een omleidings-URL biedt die niet wordt vermeld in de lijst antwoord-URL's van microsoft Entra-toepassingen.

Oplossing

Gebruik hetzelfde proces als in het voorgaande probleem, maar de URL moet worden ingesteld op urn:ietf:wg:oauth:2.0:oob, een speciale omleiding voor opdrachtregelverificatie.

Uitvoering van script resulteert in een fout in autorisatiefout

Probleem

PowerShell-script kan niet alle REST-opdrachten uitvoeren die nodig zijn om de Microsoft Entra-configuratie te voltooien met de fout 'Authorization_RequestDenied', Onvoldoende bevoegdheden om de bewerking te voltooien.' Voorbeeldfout:

Invoke-WebRequest: /home/<user>/clouddrive/service-fabric-aad-helpers/Common.ps1:239
Line |
 239 |  …   $result = Invoke-WebRequest $uri -Method $method -Headers $headers  …
     |                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     | {"error":{"code":"Authorization_RequestDenied","message":"Insufficient privileges to complete the
     | operation.","innerError":{"date":"2022-08-29T14:46:37","request-id":"c4fd3acc-1558-4950-8028-68bb058f7bf0","client-request-id":"c4fd3acc-1558-4950-8028-68bb058f7bf0"}}}
...
invoke-graphApi count:0 statuscode:403 -uri https://graph.microsoft.com/v1.0/72f988bf-86f1-41af-91ab-2d7cd011db47/oauth2PermissionGrants -headers System.Collections.Hashtable -body System.Collections.Hashtable -method post
Write-Error: /home/<user>/clouddrive/service-fabric-aad-helpers/SetupApplications.ps1:364
Line |
 364 |      assert-notNull $result "aad app service principal oauth permissio …
     |      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     | aad app service principal oauth permissions User.Read configuration failed

Write-Error: /home/<user>/clouddrive/service-fabric-aad-helpers/SetupApplications.ps1:656
Line |
 656 |  main
     |  ~~~~
     | exception:  exception: assertion failure: object: message:aad app service principal oauth permissions User.Read configuration failed  Exception:
     | /home/<user>/clouddrive/service-fabric-aad-helpers/Common.ps1:22 Line |   22 |          throw "assertion failure: object:$obj message:$msg"      |         
     | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~      | assertion failure: object: message:aad app service principal oauth permissions User.Read configuration failed  
...

Reden

Deze fout wordt geretourneerd wanneer het gebruikersaccount dat het script uitvoert, niet over de machtigingen beschikt om de REST-aanroep uit te voeren. Dit kan gebeuren als de gebruiker geen Beheer machtigingen voor beheren/schrijven heeft voor de objecten die worden gemaakt of gewijzigd.

Oplossing

Werk samen met een Beheer istrator van azure-tenant of Microsoft Entra-id om alle resterende acties te voltooien. De opgegeven scripts zijn idempotent, zodat ze opnieuw kunnen worden uitgevoerd om het proces te voltooien.

Verbinding maken het cluster met behulp van Microsoft Entra-verificatie via PowerShell

Gebruik het volgende PowerShell-opdrachtvoorbeeld om verbinding te maken met het Service Fabric-cluster:

Connect-ServiceFabricCluster -ConnectionEndpoint <endpoint> -KeepAliveIntervalInSec 10 -AzureActiveDirectory -ServerCertThumbprint <thumbprint>

Zie Verbinding maken-ServiceFabricCluster-cmdlet voor meer informatie.

Kan ik dezelfde Microsoft Entra-tenant in meerdere clusters opnieuw gebruiken?

Ja. Vergeet niet om de URL van Service Fabric Explorer toe te voegen aan uw clustertoepassing (webtoepassing). Anders werkt Service Fabric Explorer niet.

Waarom heb ik nog steeds een servercertificaat nodig terwijl Microsoft Entra ID is ingeschakeld?

FabricClient en FabricGateway voeren een wederzijdse verificatie uit. Tijdens Microsoft Entra-verificatie biedt Microsoft Entra-integratie een clientidentiteit aan de server en wordt het servercertificaat door de client gebruikt om de identiteit van de server te verifiëren. Zie X.509-certificaten en Service Fabric voor meer informatie over Service Fabric-certificaten.

Volgende stappen

Na het instellen van Microsoft Entra-toepassingen en het instellen van rollen voor gebruikers, configureert en implementeert u een cluster.