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.
- Verifiëren met Azure-beheerdersmachtigingen.
- Kloon de opslagplaats naar uw computer.
- 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-AzureSubscription
uit 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 een 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 'isAdmin' 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.
Beheerderstoestemming verlenen
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.
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.
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.
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 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>'. <
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.
Verbinding maken met het cluster met behulp van Microsoft Entra-verificatie via PowerShell geeft 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 beheerders-/beheer-/schrijfmachtigingen heeft voor de objecten die worden gemaakt of gewijzigd.
Oplossing
Werk samen met een beheerder van een 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.
Het cluster verbinden 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 de cmdlet Connect-ServiceFabricCluster 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.