Connettersi a un cluster sicuro

Quando un client si connette a un nodo del cluster di Service Fabric, il client può essere autenticato e protetto tramite la sicurezza del certificato o l'ID Microsoft Entra. Questa autenticazione garantisce che solo gli utenti autorizzati possano accedere al cluster e alle applicazioni distribuite ed eseguire attività di gestione. La sicurezza certificato o Microsoft Entra deve essere stata abilitata in precedenza nel cluster al momento della creazione del cluster. Per altre informazioni sugli scenari di sicurezza dei cluster, vedere Sicurezza del cluster. Se ci si connette a un cluster protetto con certificati, configurare il certificato client nel computer che si connette al cluster.

Connettersi a un cluster sicuro usando l'interfaccia della riga di comando di Azure Service Fabric (sfctl)

Esistono modi diversi per connettersi a un cluster protetto usando l'interfaccia della riga di comando di Service Fabric (sfctl). Quando si usa un certificato client per l'autenticazione, i dettagli del certificato devono corrispondere al certificato distribuito ai nodi del cluster. Se il certificato dispone di autorità di certificazione (CA), è necessario specificare anche le autorità di certificazione attendibili.

È possibile connettersi a un cluster con il comando sfctl cluster select.

È possibile specificare i certificati client in due modi diversi, come una coppia chiave-certificato o come un singolo file PFX. Per i file PEM protetti da password, verrà chiesto automaticamente di immettere la password. Se si è ottenuto il certificato client come file PFX, convertire prima il file PFX in un file PEM usando il comando seguente.

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

Se il file con estensione pfx non è protetto da password, usare -passin pass: come ultimo parametro.

Per specificare il certificato client come file con estensione pem, specificare il percorso del file nell'argomento --pem. Ad esempio:

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

I file con estensione pem protetti da password chiederanno la password prima di eseguire qualsiasi comando.

Per specificare una coppia certificato-chiave, usare gli argomenti --cert e --key per specificare i percorsi di file a ogni rispettivo file.

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

In alcuni casi i certificati usati per proteggere i cluster di test o di sviluppo non superano la convalida. Per ignorare la verifica del certificato, specificare l'opzione --no-verify. Ad esempio:

Avviso

Non usare l'opzione no-verify quando ci si connette a cluster di Service Fabric di produzione.

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

È anche possibile specificare i percorsi a directory di certificati CA attendibili o a certificati individuali. Per specificare questi percorsi, usare l'argomento --ca. Ad esempio:

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

Dopo la connessione, sarà possibile eseguire altri comandi sfctl per interagire con il cluster.

Connessione a un cluster mediante PowerShell

Prima di eseguire operazioni su un cluster tramite PowerShell, stabilire una connessione al cluster. La connessione al cluster verrà usata per tutti i successivi comandi nella specifica sessione di PowerShell.

Connettersi a un cluster non sicuro

Per connettersi a un cluster non sicuro, specificare l'indirizzo dell'endpoint del cluster nel comando Connect-ServiceFabricCluster:

Connect-ServiceFabricCluster -ConnectionEndpoint <Cluster FQDN>:19000 

Connessione a un cluster sicuro con Microsoft Entra ID

Per connettersi a un cluster sicuro che usa Microsoft Entra ID per autorizzare l'accesso amministratore del cluster, fornire l'identificazione personale del certificato del cluster e usare il flag AzureActiveDirectory .

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

Connettersi a un cluster sicuro con un certificato client

Per connettersi a un cluster sicuro che usa certificati client per autorizzare l'accesso di amministratore, eseguire il comando di PowerShell seguente.

Connettersi con il nome comune del certificato

Specificare il nome comune del certificato del cluster e il nome comune del certificato client a cui sono state concesse le autorizzazioni per la gestione del cluster. I dettagli del certificato devono corrispondere a un certificato sui nodi del cluster.

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

ServerCommonName è il nome comune del certificato del server installato nei nodi del cluster. FindValue è il nome comune del certificato client di amministrazione. Dopo l'immissione dei parametri, il comando sarà simile all'esempio seguente:

$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 

Connettersi con l'identificazione personale del certificato

Specificare l'identificazione personale del certificato del cluster e l'identificazione personale del certificato client a cui sono state concesse le autorizzazioni per la gestione del cluster. I dettagli del certificato devono corrispondere a un certificato sui nodi del cluster.

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

ServerCertThumbprint è l'identificazione personale del certificato del server installato nei nodi del cluster. FindValue è l'identificazione personale del certificato client di amministrazione. Dopo l'immissione dei parametri, il comando sarà simile all'esempio seguente:

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

Connettersi a un cluster sicuro con Windows Active Directory

Se il cluster autonomo viene distribuito usando la protezione di Active Directory, connettersi al cluster aggiungendo l'opzione "WindowsCredential".

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

Connettersi a un cluster mediante le API FabricClient

Service Fabric SDK fornisce la classe FabricClient per la gestione del cluster. Per usare le API di FabricClient, è necessario disporre del pacchetto NuGet Microsoft.ServiceFabric.

Connettersi a un cluster non sicuro

Per connettersi a un cluster remoto non protetto, creare un'istanza di FabricClient e specificare l'indirizzo del cluster:

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

Per il codice in esecuzione in un cluster, ad esempio in un servizio Reliable Services, creare un'istanza di FabricClient senza specificare l'indirizzo del cluster. FabricClient si connette al gateway di gestione locale nel nodo in cui il codice è attualmente in esecuzione, evitando un hop di rete aggiuntivo.

FabricClient fabricClient = new FabricClient();

Connettersi a un cluster sicuro con un certificato client

I nodi del cluster devono avere certificati validi il cui nome comune o nome DNS nella rete SAN è contenuto nella proprietà RemoteCommonNames impostata in FabricClient. Questo processo consente l'autenticazione reciproca tra il client e i nodi del cluster.

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

Connessione a un cluster sicuro in modo interattivo usando Microsoft Entra ID

Nell'esempio seguente viene usato l'ID Microsoft Entra per l'identità client e il certificato del server per l'identità del server.

Al momento della connessione al cluster viene visualizzata automaticamente una finestra di dialogo per l'accesso interattivo.

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

Connessione a un cluster sicuro non interattivo usando Microsoft Entra ID

L'esempio seguente si basa su Microsoft.Identity.Client, Versione: 4.37.0.

Per altre informazioni sull'acquisizione dei token di Microsoft Entra, vedere 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);
}

Connessione a un cluster sicuro senza conoscere i metadati precedenti usando Microsoft Entra ID

L'esempio seguente usa l'acquisizione dei token non interattiva, ma lo stesso approccio consente di creare un'esperienza di acquisizione dei token interattiva personalizzata. I metadati di Microsoft Entra necessari per l'acquisizione dei token vengono letti dalla configurazione del cluster.

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

Connettersi a un cluster sicuro usando Service Fabric Explorer

Per raggiungere Service Fabric Explorer per un determinato cluster, inserire nel browser l'indirizzo seguente:

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

L'URL completo è disponibile anche nel riquadro essentials del cluster del portale di Azure.

Per la connessione a un cluster sicuro in Windows o OS X tramite un browser, è possibile importare il certificato client e il browser richiederà il certificato da usare per la connessione al cluster. Nei computer Linux, il certificato dovrà essere importato usando le impostazioni avanzate del browser (ogni browser ha meccanismi diversi) ed è necessario puntare alla posizione del certificato sul disco. Per altre informazioni, vedere Configurare un certificato client.

Connessione a un cluster sicuro con Microsoft Entra ID

Per connettersi a un cluster protetto con Microsoft Entra ID, puntare il browser a:

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

Viene richiesto di accedere automaticamente con Microsoft Entra ID.

Connettersi a un cluster sicuro con un certificato client

Per connettersi a un cluster protetto con certificati, inserire nel browser l'indirizzo seguente:

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

Viene automaticamente richiesto di selezionare un certificato del client.

Configurare un certificato client nel computer remoto

È necessario usare almeno due certificati per proteggere il cluster, uno per il certificato del server e del cluster e un altro per l'accesso client. È consigliabile usare anche altri certificati secondari e certificati di accesso client. Per proteggere la comunicazione tra un client e un nodo del cluster con la sicurezza basata su certificati, è prima necessario ottenere e installare il certificato client. Il certificato può essere installato nell'archivio personale del computer locale o dell'utente corrente. È necessaria anche l'identificazione personale del certificato del server in modo che il client possa autenticare il cluster.

  • In Windows: fare doppio clic sul file PFX e seguire i prompt per installare il certificato nell'archivio personale, Certificates - Current User\Personal\Certificates. In alternativa, è possibile usare il comando di PowerShell:

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

    Se si tratta di un certificato autofirmato, è necessario importarlo nell'archivio "Persone attendibili" del computer prima di poterlo usare per la connessione a un cluster sicuro.

    Import-PfxCertificate -Exportable -CertStoreLocation Cert:\CurrentUser\TrustedPeople `
    -FilePath C:\docDemo\certs\DocDemoClusterCert.pfx `
    -Password (ConvertTo-SecureString -String test -AsPlainText -Force)
    
  • In Mac: fare doppio clic sul file PFX e seguire i prompt per installare il certificato nel keychain.

Passaggi successivi