Nawiązywanie połączenia z zabezpieczonym klastrem

Gdy klient łączy się z węzłem klastra usługi Service Fabric, można uwierzytelnić klienta i zabezpieczyć komunikację ustanowioną przy użyciu zabezpieczeń certyfikatów lub identyfikatora Entra firmy Microsoft. To uwierzytelnianie gwarantuje, że tylko autoryzowani użytkownicy będą mogli uzyskiwać dostęp do klastra i wdrażać aplikacje oraz wykonywać zadania zarządzania. Zabezpieczenia certyfikatu lub firmy Microsoft Entra muszą być wcześniej włączone w klastrze podczas tworzenia klastra. Aby uzyskać więcej informacji na temat scenariuszy zabezpieczeń klastra, zobacz Zabezpieczenia klastra. Jeśli łączysz się z klastrem zabezpieczonym za pomocą certyfikatów, skonfiguruj certyfikat klienta na komputerze, który nawiązuje połączenie z klastrem.

Połączenie do bezpiecznego klastra przy użyciu interfejsu wiersza polecenia usługi Azure Service Fabric (sfctl)

Istnieje kilka różnych sposobów nawiązywania połączenia z bezpiecznym klastrem przy użyciu interfejsu wiersza polecenia usługi Service Fabric (sfctl). Podczas uwierzytelniania przy użyciu certyfikatu klienta szczegóły certyfikatu muszą być zgodne z certyfikatem wdrożonym w węzłach klastra. Jeśli certyfikat ma urzędy certyfikacji, należy dodatkowo określić zaufane urzędy certyfikacji.

Połączenie z klastrem można nawiązać za pomocą sfctl cluster select polecenia .

Certyfikaty klienta można określić w dwóch różnych sposób— jako certyfikat i parę kluczy lub jako pojedynczy plik PFX. W przypadku plików PEM chronionych hasłem zostanie automatycznie wyświetlony monit o wprowadzenie hasła. Jeśli certyfikat klienta został uzyskany jako plik PFX, najpierw przekonwertuj plik PFX na plik PEM przy użyciu następującego polecenia.

openssl pkcs12 -in your-cert-file.pfx -out your-cert-file.pem -nodes -passin pass:your-pfx-password

Jeśli plik pfx nie jest chroniony hasłem, użyj parametru -passin passin: dla ostatniego parametru.

Aby określić certyfikat klienta jako plik pem, określ ścieżkę pliku w argumencie --pem . Przykład:

sfctl cluster select --endpoint https://testsecurecluster.com:19080 --pem ./client.pem

Pliki pem chronione hasłem będą monitować o podanie hasła przed uruchomieniem dowolnego polecenia.

Aby określić certyfikat, para kluczy używa --cert argumentów i --key , aby określić ścieżki plików do każdego odpowiedniego pliku.

sfctl cluster select --endpoint https://testsecurecluster.com:19080 --cert ./client.crt --key ./keyfile.key

Czasami certyfikaty używane do zabezpieczania testowania lub tworzenia klastrów kończą się niepowodzeniem weryfikacji certyfikatu. Aby pominąć weryfikację certyfikatu --no-verify , określ opcję . Przykład:

Ostrzeżenie

Nie używaj opcji podczas nawiązywania no-verify połączenia z produkcyjnymi klastrami usługi Service Fabric.

sfctl cluster select --endpoint https://testsecurecluster.com:19080 --pem ./client.pem --no-verify

Ponadto można określić ścieżki do katalogów zaufanych certyfikatów urzędu certyfikacji lub poszczególnych certyfikatów. Aby określić te ścieżki, użyj argumentu --ca . Przykład:

sfctl cluster select --endpoint https://testsecurecluster.com:19080 --pem ./client.pem --ca ./trusted_ca

Po nawiązaniu połączenia powinno być możliwe uruchomienie innych poleceń sfctl w celu interakcji z klastrem.

Połączenie do klastra przy użyciu programu PowerShell

Przed wykonaniem operacji w klastrze za pomocą programu PowerShell najpierw ustanów połączenie z klastrem. Połączenie klastra jest używane dla wszystkich kolejnych poleceń w danej sesji programu PowerShell.

Połączenie do niezabezpieczonego klastra

Aby nawiązać połączenie z niezabezpieczonym klastrem, podaj adres punktu końcowego klastra do polecenia Połączenie-ServiceFabricCluster:

Connect-ServiceFabricCluster -ConnectionEndpoint <Cluster FQDN>:19000 

Połączenie do bezpiecznego klastra przy użyciu identyfikatora Entra firmy Microsoft

Aby nawiązać połączenie z bezpiecznym klastrem, który używa identyfikatora Entra firmy Microsoft do autoryzowania dostępu administratora klastra, podaj odcisk palca certyfikatu klastra i użyj flagi AzureActiveDirectory .

Connect-ServiceFabricCluster -ConnectionEndpoint <Cluster FQDN>:19000 `
-ServerCertThumbprint <Server Certificate Thumbprint> `
-AzureActiveDirectory

Połączenie do bezpiecznego klastra przy użyciu certyfikatu klienta

Uruchom następujące polecenie programu PowerShell, aby nawiązać połączenie z bezpiecznym klastrem, który używa certyfikatów klienta do autoryzowania dostępu administratora.

Połączenie przy użyciu nazwy pospolitej certyfikatu

Podaj nazwę pospolitą certyfikatu klastra i nazwę pospolitą certyfikatu klienta, któremu udzielono uprawnień do zarządzania klastrem. Szczegóły certyfikatu muszą być zgodne z certyfikatem w węzłach klastra.

Connect-serviceFabricCluster -ConnectionEndpoint $ClusterName -KeepAliveIntervalInSec 10 `
    -X509Credential `
    -ServerCommonName <certificate common name>  `
    -FindType FindBySubjectName `
    -FindValue <certificate common name> `
    -StoreLocation CurrentUser `
    -StoreName My 

ServerCommonName to nazwa pospolita certyfikatu serwera zainstalowanego w węzłach klastra. FindValue to nazwa pospolita certyfikatu klienta administratora. Po wypełnieniu parametrów polecenie wygląda następująco:

$ClusterName= "sf-commonnametest-scus.southcentralus.cloudapp.azure.com:19000"
$certCN = "sfrpe2eetest.southcentralus.cloudapp.azure.com"

Connect-serviceFabricCluster -ConnectionEndpoint $ClusterName -KeepAliveIntervalInSec 10 `
    -X509Credential `
    -ServerCommonName $certCN  `
    -FindType FindBySubjectName `
    -FindValue $certCN `
    -StoreLocation CurrentUser `
    -StoreName My 

Połączenie przy użyciu odcisku palca certyfikatu

Podaj odcisk palca certyfikatu klastra i odcisk palca certyfikatu klienta, który otrzymał uprawnienia do zarządzania klastrem. Szczegóły certyfikatu muszą być zgodne z certyfikatem w węzłach klastra.

Connect-ServiceFabricCluster -ConnectionEndpoint <Cluster FQDN>:19000 `  
          -KeepAliveIntervalInSec 10 `  
          -X509Credential -ServerCertThumbprint <Certificate Thumbprint> `  
          -FindType FindByThumbprint -FindValue <Certificate Thumbprint> `  
          -StoreLocation CurrentUser -StoreName My

ServerCertThumbprint to odcisk palca certyfikatu serwera zainstalowanego w węzłach klastra. FindValue to odcisk palca certyfikatu klienta administratora. Po wypełnieniu parametrów polecenie wygląda następująco:

Connect-ServiceFabricCluster -ConnectionEndpoint clustername.westus.cloudapp.azure.com:19000 `  
          -KeepAliveIntervalInSec 10 `  
          -X509Credential -ServerCertThumbprint A8136758F4AB8962AF2BF3F27921BE1DF67F4326 `  
          -FindType FindByThumbprint -FindValue 71DE04467C9ED0544D021098BCD44C71E183414E `  
          -StoreLocation CurrentUser -StoreName My 

Połączenie do bezpiecznego klastra przy użyciu usługi Windows Active Directory

Jeśli klaster autonomiczny jest wdrażany przy użyciu zabezpieczeń usługi AD, połącz się z klastrem, dołączając przełącznik "WindowsCredential".

Connect-ServiceFabricCluster -ConnectionEndpoint <Cluster FQDN>:19000 `
          -WindowsCredential

Połączenie do klastra przy użyciu interfejsów API FabricClient

Zestaw SDK usługi Service Fabric udostępnia klasę FabricClient do zarządzania klastrem. Aby użyć interfejsów API FabricClient, pobierz pakiet NuGet Microsoft.ServiceFabric.

Połączenie do niezabezpieczonego klastra

Aby nawiązać połączenie ze zdalnym niezabezpieczonym klastrem, utwórz wystąpienie FabricClient i podaj adres klastra:

FabricClient fabricClient = new FabricClient("clustername.westus.cloudapp.azure.com:19000");

W przypadku kodu uruchomionego z poziomu klastra, na przykład w usłudze Reliable Service, utwórz element FabricClient bez określania adresu klastra. FabricClient łączy się z lokalną bramą zarządzania w węźle, w którym kod jest aktualnie uruchomiony, unikając dodatkowego przeskoku sieciowego.

FabricClient fabricClient = new FabricClient();

Połączenie do bezpiecznego klastra przy użyciu certyfikatu klienta

Węzły w klastrze muszą mieć prawidłowe certyfikaty, których nazwa pospolita lub nazwa DNS w sieci SAN są wyświetlane we właściwości RemoteCommonNames ustawionej na FabricClient. Wykonanie tego procesu umożliwia wzajemne uwierzytelnianie między klientem a węzłami klastra.

using System.Fabric;
using System.Security.Cryptography.X509Certificates;

string clientCertThumb = "71DE04467C9ED0544D021098BCD44C71E183414E";
string serverCertThumb = "A8136758F4AB8962AF2BF3F27921BE1DF67F4326";
string CommonName = "www.clustername.westus.azure.com";
string connection = "clustername.westus.cloudapp.azure.com:19000";

var xc = GetCredentials(clientCertThumb, serverCertThumb, CommonName);
var fc = new FabricClient(xc, connection);

try
{
    var ret = fc.ClusterManager.GetClusterManifestAsync().Result;
    Console.WriteLine(ret.ToString());
}
catch (Exception e)
{
    Console.WriteLine("Connect failed: {0}", e.Message);
}

static X509Credentials GetCredentials(string clientCertThumb, string serverCertThumb, string name)
{
    X509Credentials xc = new X509Credentials();
    xc.StoreLocation = StoreLocation.CurrentUser;
    xc.StoreName = "My";
    xc.FindType = X509FindType.FindByThumbprint;
    xc.FindValue = clientCertThumb;
    xc.RemoteCommonNames.Add(name);
    xc.RemoteCertThumbprints.Add(serverCertThumb);
    xc.ProtectionLevel = ProtectionLevel.EncryptAndSign;
    return xc;
}

Połączenie do bezpiecznego klastra interaktywnie przy użyciu identyfikatora Entra firmy Microsoft

W poniższym przykładzie użyto identyfikatora Entra firmy Microsoft dla tożsamości klienta i certyfikatu serwera na potrzeby tożsamości serwera.

Okno dialogowe jest automatycznie wyświetlane na potrzeby logowania interakcyjnego po nawiązaniu połączenia z klastrem.

string serverCertThumb = "A8136758F4AB8962AF2BF3F27921BE1DF67F4326";
string connection = "clustername.westus.cloudapp.azure.com:19000";

var claimsCredentials = new ClaimsCredentials();
claimsCredentials.ServerThumbprints.Add(serverCertThumb);

var fc = new FabricClient(claimsCredentials, connection);

try
{
    var ret = fc.ClusterManager.GetClusterManifestAsync().Result;
    Console.WriteLine(ret.ToString());
}
catch (Exception e)
{
    Console.WriteLine("Connect failed: {0}", e.Message);
}

Połączenie do bezpiecznego klastra nieinterakcyjnego przy użyciu identyfikatora Entra firmy Microsoft

Poniższy przykład opiera się na microsoft.Identity.Client, wersja: 4.37.0.

Aby uzyskać więcej informacji na temat pozyskiwania tokenów firmy Microsoft Entra, zobacz Microsoft.Identity.Client.

string tenantId = "C15CFCEA-02C1-40DC-8466-FBD0EE0B05D2";
string clientApplicationId = "118473C2-7619-46E3-A8E4-6DA8D5F56E12";
string webApplicationId = "53E6948C-0897-4DA6-B26A-EE2A38A690B4";
string[] scopes = new string[] { "user.read" };

var pca = PublicClientApplicationBuilder.Create(clientApplicationId)
    .WithAuthority($"https://login.microsoftonline.com/{tenantId}")
    .WithRedirectUri("urn:ietf:wg:oauth:2.0:oob")
    .Build();

var accounts = await pca.GetAccountsAsync();
var result = await pca.AcquireTokenInteractive(scopes)
    .WithAccount(accounts.FirstOrDefault())
    .ExecuteAsync();

string token = result.AccessToken;

string serverCertThumb = "A8136758F4AB8962AF2BF3F27921BE1DF67F4326";
string connection = "clustername.westus.cloudapp.azure.com:19000";

var claimsCredentials = new ClaimsCredentials();
claimsCredentials.ServerThumbprints.Add(serverCertThumb);
claimsCredentials.LocalClaims = token;

var fc = new FabricClient(claimsCredentials, connection);

try
{
    var ret = fc.ClusterManager.GetClusterManifestAsync().Result;
    Console.WriteLine(ret.ToString());
}
catch (Exception e)
{
    Console.WriteLine("Connect failed: {0}", e.Message);
}

Połączenie do bezpiecznego klastra bez wcześniejszej wiedzy na temat metadanych przy użyciu identyfikatora Entra firmy Microsoft

W poniższym przykładzie użyto pozyskiwania tokenów nieinterakcyjnych, ale takie samo podejście może służyć do tworzenia niestandardowego środowiska pozyskiwania tokenów interakcyjnych. Metadane firmy Microsoft entra potrzebne do uzyskania tokenu są odczytywane z konfiguracji klastra.

string serverCertThumb = "A8136758F4AB8962AF2BF3F27921BE1DF67F4326";
string connection = "clustername.westus.cloudapp.azure.com:19000";

var claimsCredentials = new ClaimsCredentials();
claimsCredentials.ServerThumbprints.Add(serverCertThumb);

var fc = new FabricClient(claimsCredentials, connection);

fc.ClaimsRetrieval += async (o, e) =>
{
    var accounts = await PublicClientApplicationBuilder
        .Create("<client_id>")
        .WithAuthority(AzureCloudInstance.AzurePublic, "<tenant_id>")
        .WithRedirectUri("<redirect_uri>")
        .Build()
        .GetAccountsAsync();

    var result = await PublicClientApplicationBuilder
        .Create("<client_id>")
        .WithAuthority(AzureCloudInstance.AzurePublic, "<tenant_id>")
        .WithRedirectUri("<redirect_uri>")
        .Build()
        .AcquireTokenInteractive(new[] { "<scope>" })
        .WithAccount(accounts.FirstOrDefault())
        .ExecuteAsync();

    return result.AccessToken;
};

try
{
    var ret = fc.ClusterManager.GetClusterManifestAsync().Result;
    Console.WriteLine(ret.ToString());
}
catch (Exception e)
{
    Console.WriteLine("Connect failed: {0}", e.Message);
}

Połączenie do bezpiecznego klastra przy użyciu narzędzia Service Fabric Explorer

Aby uzyskać dostęp do narzędzia Service Fabric Explorer dla danego klastra, wskaż przeglądarkę na:

http://<your-cluster-endpoint>:19080/Explorer

Pełny adres URL jest również dostępny w okienku podstaw klastra w witrynie Azure Portal.

Aby nawiązać połączenie z bezpiecznym klastrem w systemie Windows lub OS X przy użyciu przeglądarki, możesz zaimportować certyfikat klienta, a przeglądarka wyświetli monit o użycie certyfikatu do nawiązania połączenia z klastrem. Na maszynach z systemem Linux certyfikat będzie musiał zostać zaimportowany przy użyciu zaawansowanych ustawień przeglądarki (każda przeglądarka ma różne mechanizmy) i wskazać lokalizację certyfikatu na dysku. Aby uzyskać więcej informacji, zobacz Konfigurowanie certyfikatu klienta.

Połączenie do bezpiecznego klastra przy użyciu identyfikatora Entra firmy Microsoft

Aby nawiązać połączenie z klastrem zabezpieczonym za pomocą identyfikatora Entra firmy Microsoft, wskaż przeglądarkę na:

https://<your-cluster-endpoint>:19080/Explorer

Zostanie automatycznie wyświetlony monit o zalogowanie się przy użyciu identyfikatora Entra firmy Microsoft.

Połączenie do bezpiecznego klastra przy użyciu certyfikatu klienta

Aby nawiązać połączenie z klastrem zabezpieczonym za pomocą certyfikatów, wskaż przeglądarkę na:

https://<your-cluster-endpoint>:19080/Explorer

Zostanie wyświetlony monit o wybranie certyfikatu klienta.

Konfigurowanie certyfikatu klienta na komputerze zdalnym

Do zabezpieczania klastra należy użyć co najmniej dwóch certyfikatów, jeden dla klastra i certyfikatu serwera, a drugi na potrzeby dostępu klienta. Zalecamy również używanie dodatkowych certyfikatów pomocniczych i certyfikatów dostępu klienta. Aby zabezpieczyć komunikację między klientem a węzłem klastra przy użyciu zabezpieczeń certyfikatów, należy najpierw uzyskać i zainstalować certyfikat klienta. Certyfikat można zainstalować w magazynie Osobistym (Mój) komputera lokalnego lub bieżącego użytkownika. Potrzebny jest również odcisk palca certyfikatu serwera, aby klient mógł uwierzytelnić klaster.

  • W systemie Windows: kliknij dwukrotnie plik PFX i postępuj zgodnie z monitami, aby zainstalować certyfikat w magazynie osobistym Certificates - Current User\Personal\Certificates. Alternatywnie możesz użyć polecenia programu PowerShell:

    Import-PfxCertificate -Exportable -CertStoreLocation Cert:\CurrentUser\My `
            -FilePath C:\docDemo\certs\DocDemoClusterCert.pfx `
            -Password (ConvertTo-SecureString -String test -AsPlainText -Force)
    

    Jeśli jest to certyfikat z podpisem własnym, musisz zaimportować go do magazynu "zaufanych osób" maszyny, zanim będzie można użyć tego certyfikatu do nawiązania połączenia z bezpiecznym klastrem.

    Import-PfxCertificate -Exportable -CertStoreLocation Cert:\CurrentUser\TrustedPeople `
    -FilePath C:\docDemo\certs\DocDemoClusterCert.pfx `
    -Password (ConvertTo-SecureString -String test -AsPlainText -Force)
    
  • Na komputerach Mac: kliknij dwukrotnie plik PFX, a następnie postępuj zgodnie z monitami, aby zainstalować certyfikat w pęku kluczy.

Następne kroki