Dela via


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.

  1. Autentisera med administratörsbehörigheter i Azure.
  2. Klona lagringsplatsen till datorn.
  3. 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.

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.

Skärmbild som visar Bevilja administratörsmedgivande valt på bladet Azure App-registreringar.

Skärmbild som visar bekräftelse av bevilja administratörsmedgivande med Ja markerat.

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.

Knapp för att starta Azure Cloud Shell.

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.

Dialogrutan SFX-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>."

SFX-svarsadressen matchar inte

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.

Svars-URL för webbprogram

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.