Konfigurera Microsoft Entra-ID för klientautentisering
Varning
För närvarande är Microsoft Entra-klientautentisering och tjänsten för hanterad identitetstoken ömsesidigt inkompatibla i Linux.
För kluster som körs i Azure rekommenderas Microsoft Entra-ID för att skydda åtkomsten till hanteringsslutpunkter. Den här artikeln beskriver hur du konfigurerar Microsoft Entra-ID för att autentisera klienter för ett Service Fabric-kluster.
I Linux måste du utföra följande steg innan du skapar klustret. I Windows har du också möjlighet att konfigurera Microsoft Entra-autentisering för ett befintligt kluster.
I den här artikeln refererar termen "program" till Microsoft Entra-program, inte Service Fabric-program. Skillnaden görs där det behövs. Med Microsoft Entra-ID kan organisationer (så kallade klientorganisationer) hantera användaråtkomst till program.
Service Fabric-kluster erbjuder flera startpunkter för dess hanteringsfunktioner, däribland den webbaserade Service Fabric Explorer och Visual Studio. Därför skapar du två Microsoft Entra-program för att styra åtkomsten till klustret: ett webbprogram och ett internt program. När programmen har skapats tilldelar du användare skrivskyddade roller och administratörsroller.
Kommentar
För närvarande stöder Inte Service Fabric Microsoft Entra-autentisering för lagring.
Kommentar
Det är ett känt problem att program och noder i Linux Microsoft Entra ID-aktiverade kluster inte kan visas i Azure-portalen.
Kommentar
Microsoft Entra-ID kräver nu att en programutgivaredomän (appregistrering) verifieras eller använder standardschemat. Mer information finns i Konfigurera ett programs utgivardomän och AppId Uri i program med en enda klientorganisation kräver användning av standardschema eller verifierade domäner .
Kommentar
Från och med Service Fabric 11.0 kräver Service Fabric Explorer en URI för omdirigering av ensidesprogram i stället för en webbomdirigerings-URI.
Förutsättningar
I den här artikeln förutsätter vi att du redan har skapat en klientorganisation. Om du inte har gjort det börjar du med att läsa Hämta en Microsoft Entra-klientorganisation. För att förenkla några av stegen för att konfigurera Microsoft Entra-ID med ett Service Fabric-kluster har vi skapat en uppsättning Windows PowerShell-skript. Vissa åtgärder kräver åtkomst på administrativ nivå till Microsoft Entra-ID. Om skriptet får felet 401 eller 403 "Authorization_RequestDenied" måste en administratör köra skriptet.
- Autentisera med administratörsbehörigheter i Azure.
- Klona lagringsplatsen till datorn.
- Se till att du har alla förutsättningar för skripten installerade.
Skapa Microsoft Entra-program och tilldela användare till roller
Vi använder skripten för att skapa två Microsoft Entra-program för att styra åtkomsten till klustret: ett webbprogram och ett internt program. När du har skapat program som representerar klustret skapar du användare för de roller som stöds av Service Fabric: skrivskyddad och administratör.
SetupApplications.ps1
Kör SetupApplications.ps1
och ange klientorganisations-ID, klusternamn, webbprogram-URI och svars-URL för webbprogram som parametrar. Använd -remove för att ta bort appregistreringarna. Med hjälp av -logFile <log file path>
genereras en avskriftslogg. Mer information finns i skripthjälp (hjälp .\setupApplications.ps1 -full). Skriptet skapar webb- och inbyggda program som representerar ditt Service Fabric-kluster. De två nya appregistreringsposterna har följande format:
- ClusterName_Cluster
- ClusterName_Client
Kommentar
För nationella moln (till exempel Azure Government, Microsoft Azure som drivs av 21Vianet) bör du också ange parametern -Location
.
Parametrar
tenantId: Du hittar ditt TenantId genom att köra PowerShell-kommandot
Get-AzureSubscription
. Om du kör det här kommandot visas TenantId för varje prenumeration.clusterName: ClusterName används för att prefixa De Microsoft Entra-program som skapas av skriptet. Det behöver inte matcha det faktiska klusternamnet exakt. Det är bara avsett att göra det enklare att mappa Microsoft Entra-artefakter till Service Fabric-klustret som de används med.
SpaApplicationReplyUrl: SpaApplicationReplyUrl är standardslutpunkten som Microsoft Entra ID returnerar till användarna när de har loggat in. Ange den här slutpunkten som Service Fabric Explorer-slutpunkt för klustret. Om du skapar Microsoft Entra-program för att representera ett befintligt kluster kontrollerar du att den här URL:en matchar ditt befintliga klusters slutpunkt. Om du skapar program för ett nytt kluster ska du planera slutpunkten för klustret och se till att inte använda slutpunkten för ett befintligt kluster. Som standard är Service Fabric Explorer-slutpunkten:
https://<cluster_domain>:19080/Explorer/index.html
webApplicationUri: WebApplicationUri är antingen URI för en "verifierad domän" eller URI med api-schemaformatet API://{{klient-Id}}/{{klusternamn}}. Mer information finns i AppId Uri i program med en enda klientorganisation som kräver användning av standardschema eller verifierade domäner .
Exempel på API-schema: API://0e3d2646-78b3-4711-b8be-74a381d9890c/mysftestcluster
SetupApplications.ps1-exempel
# 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
Skriptet matar ut $configObj variabel för efterföljande kommandon och skriver ut JSON som krävs av Azure Resource Manager-mallen. Kopiera JSON-utdata och använd när du skapar eller ändrar ett befintligt kluster och skapar ditt Microsoft Entra-ID-aktiverat kluster.
SetupApplications.ps1-exempelutdata
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-parameterobjektet JSON
"azureActiveDirectory": {
"tenantId":"<guid>",
"clusterApplication":"<guid>",
"clientApplication":"<guid>"
},
SetupUser.ps1
SetupUser.ps1 används för att lägga till användarkonton i den nyligen skapade appregistreringen med hjälp av $configObj utdatavariabel från ovan. Ange användarnamn för användarkonto som ska konfigureras med appregistrering och ange "isAdmin" för administrativa behörigheter. Om användarkontot är nytt anger du även det tillfälliga lösenordet för den nya användaren. Lösenordet måste ändras vid första inloggningen. Om du använder "-remove" tar du bort användarkontot, inte bara appregistreringen.
SetupUser.ps1-användare (läs)-exempel
.\SetupUser.ps1 -ConfigObj $configobj `
-UserName 'TestUser' `
-Password 'P@ssword!123' `
-Verbose
SetupUser.ps1 admin (läs/skriv)-exempel
.\SetupUser.ps1 -ConfigObj $configobj `
-UserName 'TestAdmin' `
-Password 'P@ssword!123' `
-IsAdmin `
-Verbose
SetupClusterResource.ps1
SetupClusterResource.ps1 kan eventuellt användas för att exportera en befintlig ARM-mall för klusterresurser, lägga till/ändra konfigurationen "azureActiveDirectory" och distribuera om mallen. Använd "-Whatif" om du bara vill exportera och ändra mallen men inte distribuera om konfigurationsändringen. Det här skriptet kräver Azure Az-modulen och namnet på resursgruppen för klustret.
SetupClusterResource.ps1 – whatIf-exempel
# requires azure module 'az'
# install-module az
$resourceGroupName = 'mysftestcluster'
.\SetupClusterResource.ps1 -configObj $configObj `
-resourceGroupName $resourceGroupName `
-WhatIf
När mallen har verifierats och är redo att bearbetas kan du antingen köra skriptet igen utan "-WhatIf" eller använda powershell-kommandot "New-AzResourceGroupDeployment" för att distribuera mallen.
SetupClusterResource.ps1-exempel
$resourceGroupName = 'mysftestcluster'
.\SetupClusterResource.ps1 -configObj $configObj `
-resourceGroupName $resourceGroupName
Kommentar
Uppdatera arm-mallar eller skript för klusteretablering med den nya klusterresursens Microsoft Entra-konfigurationsändringar.
Bevilja administratörsmedgivande
Det kan vara nödvändigt att "bevilja administratörsmedgivande" för de "API-behörigheter" som konfigureras. Gå till bladet Azure App-registreringar och lägg till namnet på klustret i filtret. För båda registreringarna öppnar du "API-behörigheter" och väljer "Bevilja administratörsmedgivande för" om det är tillgängligt.
Verifiera Microsoft Entra-konfiguration
Gå till URL:en för Service Fabric Explorer (SFX). Detta bör vara samma som parametern spaApplicationReplyUrl. En Azure-autentiseringsdialogruta ska visas. Logga in med ett konto som konfigurerats med den nya Microsoft Entra-konfigurationen. Kontrollera att administratörskontot har läs-/skrivåtkomst och att användaren har läsbehörighet. Alla ändringar i klustret, till exempel att utföra en åtgärd, är en administrativ åtgärd.
Felsökningshjälp vid konfiguration av Microsoft Entra-ID
Det kan vara svårt att konfigurera Microsoft Entra-ID och använda det, så här är några tips på vad du kan göra för att felsöka problemet. PowerShell-avskriftsloggning kan aktiveras med hjälp av argumentet "-logFile" på skripten "SetupApplications.ps1" och "SetupUser.ps1" för att granska utdata.
Kommentar
Med migrering av identitetsplattformar (ADAL till MSAL), utfasning av AzureRM till förmån för Azure AZ och stöd för flera versioner av PowerShell kanske beroenden inte alltid är korrekta eller uppdaterade och orsakar fel i skriptkörningen. Om du kör PowerShell-kommandon och skript från Azure Cloud Shell minskar risken för fel med automatisk sessionsautentisering och hanterad identitet.
Request_BadRequest
Problem
Inte en giltig referensuppdatering. Http-statuskod: 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
Anledning
Konfigurationsändringar har inte spridits. Skript försöker igen på vissa begäranden med HTTP-statuskoderna 400 och 404.
Lösning
Skripten försöker igen på vissa begäranden med HTTP-statuskoderna 400 och 404 upp till "-timeoutMin", vilket är som standard 5 minuter. Skriptet kan köras igen efter behov.
Service Fabric Explorer uppmanar dig att välja ett certifikat
Problem
När du har loggat in på Microsoft Entra-ID i Service Fabric Explorer återgår webbläsaren till startsidan, men ett meddelande uppmanar dig att välja ett certifikat.
Anledning
Användaren har inte tilldelats någon roll i Microsoft Entra ID-klusterprogrammet. Därför misslyckas Microsoft Entra-autentiseringen i Service Fabric-klustret. Service Fabric Explorer återgår till certifikatautentisering.
Lösning
Följ anvisningarna för att konfigurera Microsoft Entra-ID och tilldela användarroller. Vi rekommenderar också att du aktiverar "Användartilldelning krävs för att komma åt appen", precis som SetupApplications.ps1
.
Anslutningen till PowerShell misslyckas med ett fel: "De angivna autentiseringsuppgifterna är ogiltiga"
Problem
När du använder PowerShell för att ansluta till klustret med hjälp av säkerhetsläget "AzureActiveDirectory", efter att du har loggat in på Microsoft Entra-ID, misslyckas anslutningen med ett fel: "De angivna autentiseringsuppgifterna är ogiltiga.".
Lösning
Den här lösningen är densamma som föregående.
Service Fabric Explorer returnerar ett fel när du loggar in: "AADSTS50011"
Problem
När du försöker logga in på Microsoft Entra-ID i Service Fabric Explorer returnerar sidan ett fel: "AADSTS50011: Svarsadress-URL <:en> matchar inte svarsadresserna som konfigurerats för programmet: <guid>."
Anledning
Klustret (webbappen) som representerar Service Fabric Explorer försöker autentisera mot Microsoft Entra-ID och som en del av begäran tillhandahåller det url:en för omdirigeringsretur. Url:en visas dock inte i listan svars-URL för Microsoft Entra-program.
Lösning
På sidan Microsoft Entra-appregistrering för klustret väljer du Autentisering. Under avsnittet Omdirigerings-URI:er lägger du till URL:en för Service Fabric Explorer i listan. Spara ändringen.
När du ansluter till klustret med Microsoft Entra-autentisering via PowerShell visas ett fel när du loggar in: "AADSTS50011"
Problem
När du försöker ansluta till ett Service Fabric-kluster med Microsoft Entra-ID via PowerShell returnerar inloggningssidan ett fel: "AADSTS50011: Svars-URL:en som anges i begäran matchar inte svars-URL:erna som konfigurerats för programmet: <guid>."
Anledning
På samma sätt som i föregående problem försöker PowerShell autentisera mot Microsoft Entra-ID, som tillhandahåller en omdirigerings-URL som inte finns med i listan svars-URL:er för Microsoft Entra-programmet.
Lösning
Använd samma process som i föregående problem, men URL:en måste anges till urn:ietf:wg:oauth:2.0:oob
, en särskild omdirigering för kommandoradsautentisering.
Körning av skript resulterar i fel i auktoriseringsfel
Problem
PowerShell-skriptet kan misslyckas med att utföra alla REST-kommandon som krävs för att slutföra Microsoft Entra-konfigurationen med felet "Authorization_RequestDenied","Otillräcklig behörighet för att slutföra åtgärden". Exempelfel:
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
...
Anledning
Det här felet returneras när användarkontot som kör skriptet inte har behörighet att utföra REST-anropet. Detta kan inträffa om användaren inte har administratörs-/hanterings-/skrivbehörighet för de objekt som skapas eller ändras.
Lösning
Arbeta med en administratör för Azure-klientorganisationen eller Microsoft Entra-ID för att slutföra alla återstående åtgärder. De angivna skripten är idempotent, så de kan köras igen för att slutföra processen.
Ansluta klustret med hjälp av Microsoft Entra-autentisering via PowerShell
Använd följande PowerShell-kommandoexempel för att ansluta Service Fabric-klustret:
Connect-ServiceFabricCluster -ConnectionEndpoint <endpoint> -KeepAliveIntervalInSec 10 -AzureActiveDirectory -ServerCertThumbprint <thumbprint>
Mer information finns i Cmdleten Connect-ServiceFabricCluster.
Kan jag återanvända samma Microsoft Entra-klientorganisation i flera kluster?
Ja. Kom dock ihåg att lägga till URL:en för Service Fabric Explorer i ditt klusterprogram (webb). Annars fungerar inte Service Fabric Explorer.
Varför behöver jag fortfarande ett servercertifikat medan Microsoft Entra-ID är aktiverat?
FabricClient och FabricGateway utför en ömsesidig autentisering. Under Microsoft Entra-autentisering tillhandahåller Microsoft Entra-integrering en klientidentitet till servern och servercertifikatet används av klienten för att verifiera serverns identitet. Mer information om Service Fabric-certifikat finns i X.509-certifikat och Service Fabric.
Nästa steg
När du har konfigurerat Microsoft Entra-program och konfigurerat roller för användare konfigurerar och distribuerar du ett kluster.