Nastavení ID Microsoft Entra pro ověřování klientů

Upozorňující

V tuto chvíli se ověřování klienta Microsoft Entra a služba tokenů spravované identity vzájemně nekompatibilní v Linuxu.

U clusterů spuštěných v Azure se doporučuje zabezpečit přístup ke koncovým bodům správy pomocí ID Microsoft Entra. Tento článek popisuje, jak nastavit ID Microsoft Entra pro ověřování klientů pro cluster Service Fabric.

Před vytvořením clusteru musíte v Linuxu provést následující kroky. Ve Windows máte také možnost nakonfigurovat ověřování Microsoft Entra pro existující cluster.

V tomto článku pojem "aplikace" odkazuje na aplikace Microsoft Entra, nikoli na aplikace Service Fabric. V případě potřeby je rozdíl proveden. Microsoft Entra ID umožňuje organizacím (označované jako tenanti) spravovat přístup uživatelů k aplikacím.

Cluster Service Fabric nabízí několik vstupních bodů ke své funkci správy, včetně webového Service Fabric Exploreru a sady Visual Studio. V důsledku toho vytvoříte dvě aplikace Microsoft Entra pro řízení přístupu ke clusteru: jednu webovou aplikaci a jednu nativní aplikaci. Po vytvoření aplikací přiřadíte uživatele k rolím jen pro čtení a správcům.

Poznámka:

V tuto chvíli Service Fabric nepodporuje ověřování Microsoft Entra pro úložiště.

Poznámka:

Jedná se o známý problém , kdy se aplikace a uzly v clusterech s podporou ID Microsoft Entra v Linuxu nedají zobrazit na webu Azure Portal.

Poznámka:

Id Microsoft Entra teď vyžaduje ověření nebo použití výchozího schématu doménu vydavatelů aplikace (registrace aplikace). Další informace najdete v tématu Konfigurace domény vydavatele aplikace a identifikátoru URI AppId v aplikacích s jedním tenantem, které vyžadují použití výchozího schématu nebo ověřených domén .

Poznámka:

Od verze Service Fabric 11.0 vyžaduje Service Fabric Explorer identifikátor URI přesměrování jednostrákové aplikace místo identifikátoru URI přesměrování webu.

Požadavky

V tomto článku předpokládáme, že jste už vytvořili tenanta. Pokud jste to neudělali, začněte tím, že si přečtete , jak získat tenanta Microsoft Entra. Abychom zjednodušili některé kroky, které se týkají konfigurace ID Microsoft Entra s clusterem Service Fabric, vytvořili jsme sadu skriptů Windows PowerShellu. Některé akce vyžadují přístup na úrovni správy k ID Microsoft Entra. Pokud skript zaznamená chybu 401 nebo 403 Authorization_RequestDenied, musí správce spustit skript.

  1. Ověřování pomocí oprávnění správce Azure
  2. Naklonujte úložiště do počítače.
  3. Ujistěte se, že máte nainstalované všechny požadavky na skripty.

Vytváření aplikací Microsoft Entra a přiřazování uživatelů k rolím

Pomocí skriptů vytvoříme dvě aplikace Microsoft Entra pro řízení přístupu ke clusteru: jednu webovou aplikaci a jednu nativní aplikaci. Po vytvoření aplikací, které budou představovat váš cluster, vytvoříte uživatele pro role podporované Service Fabric: jen pro čtení a správce.

SetupApplications.ps1

Spusťte SetupApplications.ps1 a zadejte ID tenanta, název clusteru, identifikátor URI webové aplikace a adresu URL odpovědi webové aplikace jako parametry. K odebrání registrací aplikací použijte příkaz -remove. Použití -logFile <log file path> vygeneruje protokol přepisu. Další informace najdete v nápovědě ke skriptu (help .\setupApplications.ps1 -full). Skript vytvoří webové a nativní aplikace pro reprezentaci vašeho clusteru Service Fabric. Dvě nové položky registrace aplikace jsou v následujícím formátu:

  • ClusterName_Cluster
  • ClusterName_Client

Poznámka:

Pro národní cloudy (například Azure Government, Microsoft Azure provozovaný společností 21Vianet) byste měli zadat -Location také parametr.

Parametry

  • tenantId: Id tenanta můžete najít spuštěním příkazu Get-AzureSubscriptionPowerShellu . Spuštěním tohoto příkazu se zobrazí ID tenanta pro každé předplatné.

  • clusterName:ClusterName slouží k předponě aplikací Microsoft Entra vytvořených skriptem. Nemusí přesně odpovídat skutečnému názvu clusteru. Účelem je usnadnit mapování artefaktů Microsoft Entra na cluster Service Fabric, se kterým se používají.

  • SpaApplicationReplyUrl:SpaApplicationReplyUrl je výchozí koncový bod, který microsoft Entra ID vrátí vašim uživatelům po dokončení přihlášení. Nastavte tento koncový bod jako koncový bod Service Fabric Exploreru pro váš cluster. Pokud vytváříte aplikace Microsoft Entra pro reprezentaci existujícího clusteru, ujistěte se, že tato adresa URL odpovídá koncovému bodu vašeho existujícího clusteru. Pokud vytváříte aplikace pro nový cluster, naplánujte koncový bod pro váš cluster a ujistěte se, že nepoužíváte koncový bod existujícího clusteru. Ve výchozím nastavení je koncový bod Service Fabric Exploreru: https://<cluster_domain>:19080/Explorer/index.html

  • webApplicationUri:WebApplicationUri je identifikátor URI ověřené domény nebo identifikátor URI používající formát schématu rozhraní API API://{{ID tenanta}}/{{název clusteru}}. Další informace najdete v identifikátoru URI AppId v aplikacích s jedním tenantem, které vyžadují použití výchozího schématu nebo ověřených domén .

    Příklad schématu rozhraní API: API://0e3d2646-78b3-4711-b8be-74a381d9890c/mysftestcluster

Příklad 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

Skript vypíše $configObj proměnnou pro následující příkazy a vytiskne JSON vyžadovaný šablonou Azure Resource Manageru. Zkopírujte výstup JSON a použijte při vytváření nebo úpravě existujícího clusteru vytvořte cluster s povoleným Id Microsoft Entra.

Příklad výstupu 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"
},

json objektu parametrů azureActiveDirectory

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

SetupUser.ps1

SetupUser.ps1 slouží k přidání uživatelských účtů do nově vytvořené registrace aplikace pomocí $configObj výstupní proměnné z výše uvedeného. Zadejte uživatelské jméno pro uživatelský účet, který se má nakonfigurovat při registraci aplikace, a zadejte "is Správa" (je Správa) pro oprávnění správce. Pokud je uživatelský účet nový, zadejte dočasné heslo i pro nového uživatele. Při prvním přihlášení je potřeba heslo změnit. Pokud použijete možnost "-remove", odeberete uživatelský účet, nejen registraci aplikace.

Příklad uživatele SetupUser.ps1 (čtení)

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

Příklad správce SetupUser.ps1 (read/write)

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

SetupClusterResource.ps1

SetupClusterResource.ps1 lze volitelně použít k exportu existující šablony ARM prostředku clusteru, přidání / úprava konfigurace azureActiveDirectory a opětovné nasazení šablony. K exportu a úpravě šablony použijte -Whatif, ale ne k opětovnému nasazení změny konfigurace. Tento skript vyžaduje modul Azure Az a název skupiny prostředků pro cluster.

SetupClusterResource.ps1 -whatIf example

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

Jakmile je šablona ověřená a připravená ke zpracování, spusťte znovu skript bez příkazu -WhatIf nebo použijte rutinu PowerShellu New-AzResourceGroupDeployment k nasazení šablony.

Příklad SetupClusterResource.ps1

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

Poznámka:

Aktualizujte šablony nebo skripty ARM zřizování clusteru pomocí nových změn konfigurace Prostředku clusteru Microsoft Entra.

Může být nutné udělit souhlas správce pro nakonfigurovaná oprávnění rozhraní API. Přejděte do okna registrace Aplikace Azure a do filtru přidejte název clusteru. U obou registrací otevřete oprávnění rozhraní API a vyberte Udělit souhlas správce, pokud je k dispozici.

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

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

Ověření konfigurace Microsoft Entra

Přejděte na adresu URL Service Fabric Exploreru (SFX). Mělo by to být stejné jako parametr spaApplicationReplyUrl. Mělo by se zobrazit dialogové okno ověřování Azure. Přihlaste se pomocí účtu nakonfigurovaného pomocí nové konfigurace Microsoft Entra. Ověřte, jestli má účet správce přístup pro čtení a zápis a jestli má uživatel přístup pro čtení. Jakákoli změna clusteru, například provedení akce, je akce správy.

Pomoc s řešením potíží při nastavování MICROSOFT Entra ID

Nastavení ID Microsoft Entra a jeho použití může být náročné, takže tady jsou některé ukazatele na to, co můžete udělat při ladění problému. Protokolování přepisu PowerShellu je možné povolit pomocí argumentu -logFile ve skriptech SetupApplications.ps1 a SetupUser.ps1 ke kontrole výstupu.

Poznámka:

Při migraci platforem Identities (ADAL do MSAL) vyřazení AzureRM ve prospěch Azure AZ a podpory více verzí PowerShellu nemusí být závislosti vždy správné nebo aktuální, což způsobuje chyby při spouštění skriptu. Spouštění příkazů a skriptů PowerShellu z Azure Cloud Shellu snižuje potenciál chyb s automatickým ověřováním relace a spravovanou identitou.

Button to launch the Azure Cloud Shell.

Request_BadRequest

Problém

Neplatná referenční aktualizace. Stavový kód HTTP: 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

Důvod

Změny konfigurace se nerozšíšily. Skripty se opakují u určitých požadavků se stavovými kódy HTTP 400 a 404.

Řešení

Skripty se opakují u určitých požadavků se stavovými kódy HTTP 400 a 404 až do zadané hodnoty -timeoutMin, což je ve výchozím nastavení 5 minut. Skript lze podle potřeby znovu spustit.

Service Fabric Explorer vás vyzve k výběru certifikátu.

Problém

Po úspěšném přihlášení k Microsoft Entra ID v Service Fabric Exploreru se prohlížeč vrátí na domovskou stránku, ale zobrazí se zpráva s výzvou k výběru certifikátu.

SFX certificate dialog

Důvod

Uživatel nemá přiřazenou roli v aplikaci clusteru Microsoft Entra ID. Proto ověřování Microsoft Entra v clusteru Service Fabric selže. Service Fabric Explorer se vrátí k ověřování certifikátů.

Řešení

Postupujte podle pokynů k nastavení ID Microsoft Entra a přiřaďte role uživatelů. Také doporučujeme zapnout přiřazení uživatele potřebné pro přístup k aplikaci, stejně jako SetupApplications.ps1 v případě.

Připojení ion s PowerShellem selže s chybou: Zadané přihlašovací údaje jsou neplatné.

Problém

Když se pomocí PowerShellu připojíte ke clusteru pomocí režimu zabezpečení AzureActiveDirectory, po úspěšném přihlášení k ID Microsoft Entra se připojení nezdaří s chybou: Zadané přihlašovací údaje jsou neplatné.

Řešení

Toto řešení je stejné jako předchozí řešení.

Service Fabric Explorer vrátí chybu při přihlášení: "AADSTS50011"

Problém

Když se pokusíte přihlásit k Microsoft Entra ID v Service Fabric Exploreru, stránka vrátí chybu: "AADSTS50011: Adresa URL> adresy <odpovědi neodpovídá adresě odpovědí nakonfigurované pro aplikaci: <guid>".

SFX reply address doesn't match

Důvod

Clusterová (webová) aplikace, která představuje Service Fabric Explorer, se pokusí ověřit na základě ID Microsoft Entra a v rámci požadavku poskytne adresu URL pro vrácení přesměrování. Adresa URL ale není uvedená v seznamu adres URL odpovědi aplikace Microsoft Entra.

Řešení

Na stránce registrace aplikace Microsoft Entra pro váš cluster vyberte Ověřování a v části Identifikátory URI pro přesměrování přidejte do seznamu adresu URL Service Fabric Exploreru. Uložte změnu.

Web application reply URL

Připojení při přihlášení do clusteru pomocí ověřování Microsoft Entra prostřednictvím PowerShellu se zobrazí chyba: "AADSTS50011"

Problém

Když se pokusíte připojit ke clusteru Service Fabric pomocí ID Microsoft Entra přes PowerShell, přihlašovací stránka vrátí chybu: "AADSTS50011: Adresa URL odpovědi zadaná v požadavku neodpovídá adresám URL odpovědí nakonfigurovaným pro aplikaci: <guid>."

Důvod

Podobně jako u předchozího problému se PowerShell pokusí ověřit pomocí ID Microsoft Entra, které poskytuje adresu URL pro přesměrování, která není uvedená v seznamu adres URL odpovědí aplikace Microsoft Entra.

Řešení

Použijte stejný postup jako v předchozím problému, ale adresa URL musí být nastavená na urn:ietf:wg:oauth:2.0:oobspeciální přesměrování pro ověřování pomocí příkazového řádku.

Spuštění skriptu způsobí chybu v chybě autorizace.

Problém

Skript PowerShellu nemusí selhat provést všechny příkazy REST potřebné k dokončení konfigurace Microsoft Entra s chybou "Authorization_RequestDenied", "Nedostatečná oprávnění k dokončení operace". Příklad chyby:

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

Důvod

Tato chyba se vrátí, když uživatelský účet, který spouští skript, nemá oprávnění k provedení volání REST. K tomu může dojít v případě, že uživatel nemá oprávnění Správa istrator/Manage/Write pro vytvářené nebo upravené objekty.

Řešení

Spolupracujte s Správa istratorem tenanta Azure nebo ID Microsoft Entra a dokončete všechny zbývající akce. Zadané skripty jsou idempotentní, takže je můžete znovu spustit a dokončit proces.

Připojení clusteru pomocí ověřování Microsoft Entra přes PowerShell

Pokud chcete připojit cluster Service Fabric, použijte následující příklad příkazu PowerShellu:

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

Další informace najdete v rutině Připojení-ServiceFabricCluster.

Můžu znovu použít stejného tenanta Microsoft Entra ve více clusterech?

Ano. Nezapomeňte ale přidat adresu URL Service Fabric Exploreru do vaší clusterové (webové) aplikace. Jinak Service Fabric Explorer nefunguje.

Proč stále potřebuji certifikát serveru, když je povolené ID Microsoft Entra?

FabricClient a FabricGateway provádějí vzájemné ověřování. Během ověřování Microsoft Entra poskytuje integrace Microsoft Entra identitu klienta serveru a certifikát serveru je používán klientem k ověření identity serveru. Další informace o certifikátech Service Fabric najdete v tématu Certifikáty X.509 a Service Fabric.

Další kroky

Po nastavení aplikací Microsoft Entra a nastavení rolí pro uživatele nakonfigurujte a nasaďte cluster.