İstemci kimlik doğrulaması için Microsoft Entra Kimliğini ayarlama

Uyarı

Şu anda, Microsoft Entra istemci kimlik doğrulaması ve Yönetilen Kimlik Belirteci Hizmeti Linux üzerinde karşılıklı olarak uyumsuz.

Azure'da çalışan kümeler için yönetim uç noktalarına erişimin güvenliğini sağlamak için Microsoft Entra Id önerilir. Bu makalede, Service Fabric kümesi için istemcilerin kimliğini doğrulamak için Microsoft Entra Id'nin nasıl ayarlanacağı açıklanır.

Linux'ta, kümeyi oluşturmadan önce aşağıdaki adımları tamamlamanız gerekir. Windows'da, mevcut bir küme için Microsoft Entra kimlik doğrulamasını yapılandırma seçeneğiniz de vardır.

Bu makalede,"uygulama" terimi Service Fabric uygulamalarını değil Microsoft Entra uygulamalarını ifade eder; gerektiğinde ayrım yapılır. Microsoft Entra ID, kuruluşların (kiracı olarak bilinir) uygulamalara kullanıcı erişimini yönetmesini sağlar.

Service Fabric kümesi, web tabanlı Service Fabric Explorer ve Visual Studio dahil olmak üzere yönetim işlevselliğine çeşitli giriş noktaları sunar. Sonuç olarak, kümeye erişimi denetlemek için iki Microsoft Entra uygulaması oluşturacaksınız: bir web uygulaması ve bir yerel uygulama. Uygulamalar oluşturulduktan sonra kullanıcıları salt okunur ve yönetici rollerine atayacaksınız.

Not

Service Fabric şu anda depolama için Microsoft Entra kimlik doğrulamasını desteklemez.

Not

Linux Microsoft Entra ID özellikli kümelerdeki uygulamaların ve düğümlerin Azure Portal'da görüntülenememesi bilinen bir sorundur .

Not

Microsoft Entra Id artık bir uygulama (uygulama kaydı) yayımcı etki alanının doğrulanması veya varsayılan düzenin kullanılmasını gerektiriyor. Ek bilgi için bkz . Uygulamanın yayımcı etki alanını ve AppId Uri'sini tek kiracılı uygulamalarda yapılandırma varsayılan düzen veya doğrulanmış etki alanları gerektirir.

Not

Service Fabric 11.0'dan başlayarak Service Fabric Explorer, Web Yeniden Yönlendirme URI'si yerine tek sayfalı uygulama Yeniden Yönlendirme URI'sini gerektirir.

Önkoşullar

Bu makalede, zaten bir kiracı oluşturduğunuz varsayılır. Henüz yapmadıysanız, Microsoft Entra kiracısı alma makalesini okuyarak başlayın. Microsoft Entra ID'yi Service Fabric kümesiyle yapılandırmayla ilgili bazı adımları basitleştirmek için bir Windows PowerShell betikleri kümesi oluşturduk. Bazı eylemler, Microsoft Entra Kimliği'ne yönetici düzeyinde erişim gerektirir. Betik 401 veya 403 'Authorization_RequestDenied' hatasıyla karşılaşırsa, yöneticinin betiği yürütmesi gerekir.

  1. Azure yönetim izinleriyle kimlik doğrulaması.
  2. Depoyu bilgisayarınıza kopyalayın.
  3. Betikler için tüm önkoşulların yüklü olduğundan emin olun.

Microsoft Entra uygulamaları oluşturma ve kullanıcıları rollere atama

Betikleri kullanarak kümeye erişimi denetlemek için iki Microsoft Entra uygulaması oluşturacağız: bir web uygulaması ve bir yerel uygulama. Kümenizi temsil eden uygulamalar oluşturduktan sonra Service Fabric tarafından desteklenen roller için kullanıcılar oluşturacaksınız: salt okunur ve yönetici.

SetupApplications.ps1

Kiracı kimliğini, küme adını, web uygulaması URI'sini ve web uygulaması yanıt URL'sini çalıştırın SetupApplications.ps1 ve parametre olarak sağlayın. Uygulama kayıtlarını kaldırmak için -remove komutunu kullanın. -logFile <log file path> kullanarak bir transkript günlüğü oluşturur. Ek bilgi için betik yardımına (help .\setupApplications.ps1 -full) bakın. Betik, Service Fabric kümenizi temsil etmek için web ve yerel uygulamalar oluşturur. İki yeni uygulama kaydı girdisi aşağıdaki biçimdedir:

  • ClusterName_Cluster
  • ClusterName_Client

Not

Ulusal bulutlar için (örneğin Azure Kamu, 21Vianet tarafından sağlanan Microsoft Azure) parametresini -Location de belirtmeniz gerekir.

Parametreler

  • tenantId: TenantId değerini PowerShell komutunu Get-AzureSubscriptionyürüterek bulabilirsiniz. Bu komutu yürütürken her abonelik için TenantId değeri görüntülenir.

  • clusterName:ClusterName , betik tarafından oluşturulan Microsoft Entra uygulamalarının ön ekini oluşturmak için kullanılır. Gerçek küme adıyla tam olarak eşleşmesi gerekmez. Yalnızca Microsoft Entra yapıtlarını birlikte kullanıldıkları Service Fabric kümesine eşlemeyi kolaylaştırmak için tasarlanmıştır.

  • SpaApplicationReplyUrl:SpaApplicationReplyUrl , Microsoft Entra ID'nin oturum açma işlemini tamamladıktan sonra kullanıcılarınıza döndürdüğü varsayılan uç noktadır. Bu uç noktayı kümeniz için Service Fabric Explorer uç noktası olarak ayarlayın. Mevcut bir kümeyi temsil etmek için Microsoft Entra uygulamaları oluşturuyorsanız, bu URL'nin mevcut kümenizin uç noktasıyla eşleştiğinden emin olun. Yeni bir küme için uygulama oluşturuyorsanız kümenizin uç noktasını planlayın ve mevcut kümenin uç noktasını kullanmadığınızdan emin olun. Varsayılan olarak Service Fabric Explorer uç noktası şöyledir: https://<cluster_domain>:19080/Explorer/index.html

  • webApplicationUri:WebApplicationUri , API://{{tenant Id}}/{{cluster name}} API düzeni biçimini kullanan bir 'doğrulanmış etki alanının' URI'si veya URI'dir. Ek bilgi için bkz . Tek kiracılı uygulamalarda AppId Uri'sinin kullanılması için varsayılan düzen veya doğrulanmış etki alanları gerekir.

    Örnek API düzeni: API://0e3d2646-78b3-4711-b8be-74a381d9890c/mysftestcluster

SetupApplications.ps1 örneği

# 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

Betik, sonraki komutlar için $configObj değişkenin çıktısını alır ve Azure Resource Manager şablonu için gereken JSON'yi yazdırır. JSON çıkışını kopyalayın ve mevcut kümeyi oluştururken veya değiştirirken microsoft Entra ID etkin kümenizi oluştururken kullanın.

SetupApplications.ps1 örnek çıktısı

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 parameters nesnesi JSON

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

SetupUser.ps1

SetupUser.ps1, yukarıdan $configObj çıkış değişkeni kullanılarak yeni oluşturulan uygulama kaydına kullanıcı hesapları eklemek için kullanılır. Uygulama kaydıyla yapılandırılacak kullanıcı hesabının kullanıcı adını belirtin ve yönetim izinleri için 'is Yönetici' belirtin. Kullanıcı hesabı yeniyse, yeni kullanıcı için de geçici parolayı girin. Parolanın ilk oturum açmada değiştirilmesi gerekir. '-remove' kullanırsanız, yalnızca uygulama kaydını değil kullanıcı hesabını da kaldırırsınız.

SetupUser.ps1 kullanıcı (okuma) örneği

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

SetupUser.ps1 admin (okuma/yazma) örneği

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

SetupClusterResource.ps1

SetupClusterResource.ps1 isteğe bağlı olarak mevcut küme kaynağı ARM şablonunu dışarı aktarmak, 'azureActiveDirectory' yapılandırmasını eklemek/değiştirmek ve şablonu yeniden dağıtmak için kullanılabilir. '-Whatif' komutunu kullanarak yalnızca şablonu dışarı aktarın ve değiştirin, ancak yapılandırma değişikliğini yeniden dağıtmayın. Bu betik, Azure 'Az' modülünü ve küme kaynak grubunun adını gerektirir.

SetupClusterResource.ps1 -whatIf örneği

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

Şablon doğrulanıp işlemeye hazır olduktan sonra betiği '-WhatIf' olmadan yeniden çalıştırın veya şablonu dağıtmak için 'New-AzResourceGroupDeployment' powershell komutunu kullanın.

SetupClusterResource.ps1 örneği

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

Not

Yeni küme kaynağı Microsoft Entra yapılandırma değişiklikleriyle küme sağlama ARM şablonlarını veya betiklerini güncelleştirin.

Yapılandırılan 'API izinleri' için 'Yönetici onayı verme' gerekebilir. Azure Uygulaması kayıtları dikey penceresine gidin ve filtreye kümenin adını ekleyin. Her iki kayıt için de 'API izinleri'ni açın ve varsa 'Yönetici onayı ver' seçeneğini belirleyin.

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

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

Microsoft Entra Yapılandırmasını Doğrulama

Service Fabric Explorer (SFX) URL'sine gidin. Bu, spaApplicationReplyUrl parametresiyle aynı olmalıdır. Bir Azure kimlik doğrulaması iletişim kutusu görüntülenmelidir. Yeni Microsoft Entra yapılandırmasıyla yapılandırılmış bir hesapla oturum açın. Yönetici hesabının okuma/yazma erişimi olduğunu ve kullanıcının okuma erişimi olduğunu doğrulayın. Kümede yapılan herhangi bir değişiklik , örneğin bir eylem gerçekleştirmek, bir yönetim eylemidir.

Microsoft Entra Id'yi ayarlamayla ilgili sorun giderme yardımı

Microsoft Entra Id'yi ayarlamak ve kullanmak zor olabilir, bu nedenle sorunda hata ayıklamak için neler yapabileceğinize ilişkin bazı işaretçiler aşağıda verilmiştir. PowerShell transkript günlüğü, çıkışı gözden geçirmek için 'SetupApplications.ps1' ve 'SetupUser.ps1' betiklerinde '-logFile' bağımsız değişkeni kullanılarak etkinleştirilebilir.

Not

Kimlikler platformlarının (ADAL'dan MSAL'ye) geçirilmesi, Azure AZ'nin lehine AzureRM'nin kullanımdan kaldırılması ve PowerShell'in birden çok sürümünün desteklenmesiyle bağımlılıklar her zaman doğru veya güncel olmayabilir ve betik yürütmede hatalara neden olabilir. Azure Cloud Shell'den PowerShell komutlarını ve betiklerini çalıştırmak, oturum otomatik kimlik doğrulaması ve yönetilen kimlik ile ilgili hata olasılığını azaltır.

Button to launch the Azure Cloud Shell.

Request_BadRequest

Sorun

Geçerli bir başvuru güncelleştirmesi değil. Http durum kodu: 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

Nedeni

Yapılandırma değişiklikleri yayılmadı. Betikler, HTTP durum kodları 400 ve 404 olan belirli isteklerde yeniden dener.

Çözüm

Betikler, varsayılan olarak 5 dakika olan '-timeoutMin' sağlanana kadar HTTP durum kodları 400 ve 404 olan belirli isteklerde yeniden denenir. Betik gerektiğinde yeniden yürütülebilir.

Service Fabric Explorer bir sertifika seçmenizi ister

Sorun

Service Fabric Explorer'da Microsoft Entra Id'de başarıyla oturum açtıktan sonra tarayıcı giriş sayfasına döner, ancak bir ileti sertifika seçmenizi ister.

SFX certificate dialog

Nedeni

Kullanıcıya Microsoft Entra Id kümesi uygulamasında bir rol atanmamış. Bu nedenle, Microsoft Entra kimlik doğrulaması Service Fabric kümesinde başarısız olur. Service Fabric Explorer, sertifika kimlik doğrulamasına geri döner.

Çözüm

Microsoft Entra Id'yi ayarlama yönergelerini izleyin ve kullanıcı rolleri atayın. Ayrıca, "Uygulamaya erişmek için kullanıcı ataması gerekiyor" özelliğini de aynı şekilde SetupApplications.ps1 açmanızı öneririz.

PowerShell ile Bağlan hatasıyla başarısız oluyor: "Belirtilen kimlik bilgileri geçersiz"

Sorun

"AzureActiveDirectory" güvenlik modunu kullanarak kümeye bağlanmak için PowerShell kullandığınızda, Microsoft Entra Id'de başarıyla oturum açtığınızda bağlantı şu hatayla başarısız olur: "Belirtilen kimlik bilgileri geçersiz."

Çözüm

Bu çözüm, önceki çözümle aynıdır.

Service Fabric Explorer oturum açtığınızda bir hata döndürür: "AADSTS50011"

Sorun

Service Fabric Explorer'da Microsoft Entra Kimliği'nde oturum açmaya çalıştığınızda, sayfa şu hatayı döndürür: "AADSTS50011: Yanıt adresi <URL'si> uygulama için yapılandırılan yanıt adresleriyle eşleşmiyor: <guid>."

SFX reply address doesn't match

Nedeni

Service Fabric Explorer'ı temsil eden küme (web) uygulaması Microsoft Entra Kimliği'ne göre kimlik doğrulaması yapmaya çalışır ve isteğin bir parçası olarak yeniden yönlendirme dönüş URL'sini sağlar. Ancak URL, Microsoft Entra uygulaması YANıT URL'si listesinde yer almıyor.

Çözüm

Kümenizin Microsoft Entra uygulama kaydı sayfasında Kimlik Doğrulaması'nı seçin ve Yeniden Yönlendirme URI'leri bölümünün altında Listeye Service Fabric Explorer URL'sini ekleyin. Değişikliğinizi kaydedin.

Web application reply URL

PowerShell aracılığıyla Microsoft Entra kimlik doğrulamasını kullanarak kümeye Bağlan oturum açtığınızda hata veriyor: "AADSTS50011"

Sorun

PowerShell aracılığıyla Microsoft Entra Id kullanarak bir Service Fabric kümesine bağlanmaya çalıştığınızda, oturum açma sayfası şu hatayı döndürür: "AADSTS50011: İstekte belirtilen yanıt URL'si, uygulama için yapılandırılan yanıt URL'leriyle eşleşmiyor: <guid>."

Nedeni

Önceki soruna benzer şekilde PowerShell, Microsoft Entra uygulaması Yanıt URL'leri listesinde listelenmeyen bir yeniden yönlendirme URL'si sağlayan Microsoft Entra Kimliği'nde kimlik doğrulaması yapmaya çalışır.

Çözüm

Önceki sorundakiyle aynı işlemi kullanın, ancak URL' nin komut satırı kimlik doğrulaması için özel bir yeniden yönlendirme olarak ayarlanması urn:ietf:wg:oauth:2.0:oobgerekir.

Betiğin yürütülmesi Yetkilendirme hatasında hatayla sonuçlanır

Sorun

PowerShell betiği, Microsoft Entra yapılandırmasını tamamlamak için gereken tüm REST komutlarını "Authorization_RequestDenied","İşlemi tamamlamak için ayrıcalık yetersiz" hatasıyla gerçekleştiremeyebilir. Örnek hata:

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

Nedeni

Betiği yürüten kullanıcı hesabının REST çağrısını gerçekleştirme izinleri olmadığında bu hata döndürülür. Bu durum, kullanıcının oluşturulan veya değiştirilen nesneler için Yönetici istrator/Yönet/Yazma izinleri yoksa oluşabilir.

Çözüm

Kalan tüm eylemleri tamamlamak için Azure kiracısının veya Microsoft Entra Id'nin Yönetici istrator'ı ile çalışın. Sağlanan betikler bir kez etkili olduğundan işlemi tamamlamak için yeniden yürütülebilir.

PowerShell aracılığıyla Microsoft Entra kimlik doğrulamasını kullanarak kümeyi Bağlan

Service Fabric kümesini bağlamak için aşağıdaki PowerShell komut örneğini kullanın:

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

Daha fazla bilgi edinmek için bkz. Bağlan-ServiceFabricCluster cmdlet'i.

Aynı Microsoft Entra kiracısını birden çok kümede yeniden kullanabilir miyim?

Evet. Ancak Service Fabric Explorer'ın URL'sini küme (web) uygulamanıza eklemeyi unutmayın. Aksi takdirde Service Fabric Explorer çalışmaz.

Microsoft Entra Id etkinken neden hala bir sunucu sertifikasına ihtiyacım var?

FabricClient ve FabricGateway karşılıklı kimlik doğrulaması gerçekleştirir. Microsoft Entra kimlik doğrulaması sırasında, Microsoft Entra tümleştirmesi sunucuya bir istemci kimliği sağlar ve sunucu sertifikası istemci tarafından sunucunun kimliğini doğrulamak için kullanılır. Service Fabric sertifikaları hakkında daha fazla bilgi için bkz . X.509 sertifikaları ve Service Fabric.

Sonraki adımlar

Microsoft Entra uygulamalarını ayarladıktan ve kullanıcılar için rolleri ayarladıktan sonra kümeyi yapılandırın ve dağıtın.