Ansluta till ett säkert kluster

När en klient ansluter till en Service Fabric-klusternod kan klienten autentiseras och säkra kommunikationen upprättas med hjälp av certifikatsäkerhet eller Microsoft Entra-ID. Den här autentiseringen säkerställer att endast behöriga användare kan komma åt klustret och distribuerade program och utföra hanteringsuppgifter. Certifikat eller Microsoft Entra-säkerhet måste ha aktiverats tidigare i klustret när klustret skapades. Mer information om klustersäkerhetsscenarier finns i Klustersäkerhet. Om du ansluter till ett kluster som skyddas med certifikat konfigurerar du klientcertifikatet på datorn som ansluter till klustret.

Anslut till ett säkert kluster med hjälp av Azure Service Fabric CLI (sfctl)

Det finns några olika sätt att ansluta till ett säkert kluster med hjälp av Service Fabric CLI (sfctl). När du använder ett klientcertifikat för autentisering måste certifikatinformationen matcha ett certifikat som distribuerats till klusternoderna. Om certifikatet har certifikatutfärdare måste du dessutom ange de betrodda certifikatutfärdarna.

Du kan ansluta till ett kluster med hjälp av sfctl cluster select kommandot .

Klientcertifikat kan anges på två olika sätt, antingen som ett certifikat och nyckelpar, eller som en enda PFX-fil. För lösenordsskyddade PEM-filer uppmanas du automatiskt att ange lösenordet. Om du fick klientcertifikatet som en PFX-fil konverterar du först PFX-filen till en PEM-fil med hjälp av följande kommando.

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

Om .pfx-filen inte är lösenordsskyddad använder du -passin pass: för den sista parametern.

Om du vill ange klientcertifikatet som en pem-fil anger du filsökvägen i --pem argumentet. Till exempel:

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

Lösenordsskyddade pem-filer frågar efter lösenord innan du kör något kommando.

För att ange ett certifikat använder nyckelparet argumenten --cert och --key för att ange filsökvägarna till respektive fil.

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

Ibland misslyckas certifikatvalidering av certifikat som används för att skydda test- eller dev-kluster. Om du vill kringgå certifikatverifiering anger du alternativet --no-verify . Till exempel:

Varning

Använd inte alternativet no-verify när du ansluter till Service Fabric-produktionskluster.

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

Dessutom kan du ange sökvägar till kataloger för betrodda CA-certifikat eller enskilda certifikat. Använd argumentet för --ca att ange dessa sökvägar. Till exempel:

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

När du har anslutit bör du kunna köra andra sfctl-kommandon för att interagera med klustret.

Anslut till ett kluster med Hjälp av PowerShell

Innan du utför åtgärder i ett kluster via PowerShell måste du först upprätta en anslutning till klustret. Klusteranslutningen används för alla efterföljande kommandon i den angivna PowerShell-sessionen.

Anslut till ett osäkert kluster

Om du vill ansluta till ett osäkert kluster anger du klustrets slutpunktsadress till kommandot Anslut-ServiceFabricCluster:

Connect-ServiceFabricCluster -ConnectionEndpoint <Cluster FQDN>:19000 

Anslut till ett säkert kluster med hjälp av Microsoft Entra-ID

Om du vill ansluta till ett säkert kluster som använder Microsoft Entra-ID för att auktorisera klusteradministratörsåtkomst anger du tumavtrycket för klustercertifikatet och använder flaggan AzureActiveDirectory .

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

Anslut till ett säkert kluster med hjälp av ett klientcertifikat

Kör följande PowerShell-kommando för att ansluta till ett säkert kluster som använder klientcertifikat för att auktorisera administratörsåtkomst.

Anslut med certifikatets gemensamma namn

Ange det gemensamma namnet på klustercertifikatet och det gemensamma namnet på det klientcertifikat som har beviljats behörigheter för klusterhantering. Certifikatinformationen måste matcha ett certifikat på klusternoderna.

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

ServerCommonName är det vanliga namnet på servercertifikatet som är installerat på klusternoderna. FindValue är det vanliga namnet på administratörsklientcertifikatet. När parametrarna fylls i ser kommandot ut som i följande exempel:

$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 

Anslut med certifikatets tumavtryck

Ange tumavtrycket för klustercertifikatet och tumavtrycket för det klientcertifikat som har beviljats behörigheter för klusterhantering. Certifikatinformationen måste matcha ett certifikat på klusternoderna.

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

ServerCertThumbprint är tumavtrycket för servercertifikatet som är installerat på klusternoderna. FindValue är tumavtrycket för administratörsklientcertifikatet. När parametrarna fylls i ser kommandot ut som i följande exempel:

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

Anslut till ett säkert kluster med Hjälp av Windows Active Directory

Om ditt fristående kluster distribueras med HJÄLP av AD-säkerhet ansluter du till klustret genom att lägga till växeln "WindowsCredential".

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

Anslut till ett kluster med hjälp av FabricClient-API:erna

Service Fabric SDK tillhandahåller klassen FabricClient för klusterhantering. Om du vill använda FabricClient-API:erna hämtar du NuGet-paketet Microsoft.ServiceFabric.

Anslut till ett osäkert kluster

Om du vill ansluta till ett oskyddat fjärrkluster skapar du en FabricClient-instans och anger klusteradressen:

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

För kod som körs inifrån ett kluster, till exempel i en tillförlitlig tjänst, skapar du en FabricClient utan att ange klusteradressen. FabricClient ansluter till den lokala hanteringsgatewayen på noden som koden för närvarande körs på, vilket undviker ett extra nätverkshopp.

FabricClient fabricClient = new FabricClient();

Anslut till ett säkert kluster med hjälp av ett klientcertifikat

Noderna i klustret måste ha giltiga certifikat vars gemensamma namn eller DNS-namn i SAN visas i egenskapen RemoteCommonNames som anges i FabricClient. Efter den här processen möjliggör ömsesidig autentisering mellan klienten och klusternoderna.

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;
}

Anslut till ett säkert kluster interaktivt med hjälp av Microsoft Entra-ID

I följande exempel används Microsoft Entra-ID för klientidentitet och servercertifikat för serveridentitet.

Ett dialogfönster visas automatiskt för interaktiv inloggning när du ansluter till klustret.

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);
}

Anslut till ett säkert kluster som inte är interaktivt med Hjälp av Microsoft Entra-ID

Följande exempel förlitar sig på Microsoft.Identity.Client, Version: 4.37.0.

Mer information om anskaffning av Microsoft Entra-token finns i 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);
}

Anslut till ett säkert kluster utan tidigare metadatakunskaper med hjälp av Microsoft Entra-ID

I följande exempel används icke-interaktiv tokenanskaffning, men samma metod kan användas för att skapa en anpassad interaktiv tokenanskaffningsupplevelse. Microsoft Entra-metadata som behövs för tokenförvärv läse från klusterkonfigurationen.

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);
}

Anslut till ett säkert kluster med Service Fabric Explorer

Om du vill nå Service Fabric Explorer för ett visst kluster pekar du webbläsaren på:

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

Den fullständiga URL:en är också tillgänglig i fönstret kluster essentials i Azure-portalen.

För att ansluta till ett säkert kluster i Windows eller OS X med hjälp av en webbläsare kan du importera klientcertifikatet och webbläsaren uppmanar dig att använda certifikatet för att ansluta till klustret. På Linux-datorer måste certifikatet importeras med avancerade webbläsarinställningar (varje webbläsare har olika mekanismer) och peka det på certifikatplatsen på disken. Mer information finns i Konfigurera ett klientcertifikat .

Anslut till ett säkert kluster med hjälp av Microsoft Entra-ID

Om du vill ansluta till ett kluster som skyddas med Microsoft Entra-ID pekar du webbläsaren på:

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

Du uppmanas automatiskt att logga in med Microsoft Entra-ID.

Anslut till ett säkert kluster med hjälp av ett klientcertifikat

Om du vill ansluta till ett kluster som är skyddat med certifikat pekar du webbläsaren på:

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

Du uppmanas automatiskt att välja ett klientcertifikat.

Konfigurera ett klientcertifikat på fjärrdatorn

Minst två certifikat ska användas för att skydda klustret, ett för klustret och servercertifikatet och ett annat för klientåtkomst. Vi rekommenderar att du även använder ytterligare sekundära certifikat och klientåtkomstcertifikat. För att skydda kommunikationen mellan en klient och en klusternod med hjälp av certifikatsäkerhet måste du först hämta och installera klientcertifikatet. Certifikatet kan installeras i arkivet Personligt (Mitt) för den lokala datorn eller den aktuella användaren. Du behöver också tumavtrycket för servercertifikatet så att klienten kan autentisera klustret.

  • I Windows: Dubbelklicka på PFX-filen och följ anvisningarna för att installera certifikatet i ditt personliga arkiv Certificates - Current User\Personal\Certificates. Du kan också använda PowerShell-kommandot:

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

    Om det är ett självsignerat certifikat måste du importera det till datorns "betrodda personer"-arkiv innan du kan använda det här certifikatet för att ansluta till ett säkert kluster.

    Import-PfxCertificate -Exportable -CertStoreLocation Cert:\CurrentUser\TrustedPeople `
    -FilePath C:\docDemo\certs\DocDemoClusterCert.pfx `
    -Password (ConvertTo-SecureString -String test -AsPlainText -Force)
    
  • I Mac: Dubbelklicka på PFX-filen och följ anvisningarna för att installera certifikatet i din nyckelring.

Nästa steg