Connettersi a un cluster sicuroConnect to a secure cluster

Quando un client si connette a un nodo di un cluster di Service Fabric, è possibile autenticare il client e proteggere la comunicazione stabilita usando la sicurezza basata su certificati o Azure Active Directory (AAD).When a client connects to a Service Fabric cluster node, the client can be authenticated and secure communication established using certificate security or Azure Active Directory (AAD). Questa autenticazione garantisce che solo gli utenti autorizzati possano accedere al cluster e alle applicazioni distribuite ed eseguire attività di gestione.This authentication ensures that only authorized users can access the cluster and deployed applications and perform management tasks. La sicurezza basata su certificati o AAD deve essere stata abilitata in precedenza nel cluster durante la creazione del cluster stesso.Certificate or AAD security must have been previously enabled on the cluster when the cluster was created. Per altre informazioni sugli scenari di sicurezza dei cluster, vedere Sicurezza del cluster.For more information on cluster security scenarios, see Cluster security. Se ci si connette a un cluster protetto con certificati, configurare il certificato client nel computer che si connette al cluster.If you are connecting to a cluster secured with certificates, set up the client certificate on the computer that connects to the cluster.

Connettersi a un cluster sicuro usando l'interfaccia della riga di comando di Azure Service Fabric (sfctl)Connect to a secure cluster using Azure Service Fabric CLI (sfctl)

Esistono modi diversi per connettersi a un cluster protetto usando l'interfaccia della riga di comando di Service Fabric (sfctl).There are a few different ways to connect to a secure cluster using the Service Fabric CLI (sfctl). Quando si usa un certificato client per l'autenticazione, i dettagli del certificato devono corrispondere al certificato distribuito ai nodi del cluster.When using a client certificate for authentication, the certificate details must match a certificate deployed to the cluster nodes. Se il certificato dispone di autorità di certificazione (CA), è necessario specificare anche le autorità di certificazione attendibili.If your certificate has Certificate Authorities (CAs), you need to additionally specify the trusted CAs.

È possibile connettersi a un cluster con il comando sfctl cluster select.You can connect to a cluster using the sfctl cluster select command.

È possibile specificare i certificati client in due modi diversi, come una coppia chiave-certificato o come un file con estensione pem singolo.Client certificates can be specified in two different fashions, either as a cert and key pair, or as a single pem file. Per i file pem protetti da password verrà chiesto automaticamente di immettere la password.For password protected pem files, you will be prompted automatically to enter the password.

Per specificare il certificato client come file con estensione pem, specificare il percorso del file nell'argomento --pem.To specify the client certificate as a pem file, specify the file path in the --pem argument. ad esempio:For example:

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.Password protected pem files will prompt for password prior to running any command.

Per specificare una coppia certificato-chiave, usare gli argomenti --cert e --key per specificare i percorsi di file a ogni rispettivo file.To specify a cert, key pair use the --cert and --key arguments to specify the file paths to each respective 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.Sometimes certificates used to secure test or dev clusters fail certificate validation. Per ignorare la verifica del certificato, specificare l'opzione --no-verify.To bypass certificate verification, specify the --no-verify option. Ad esempio:For example:

Avviso

Non usare l'opzione no-verify quando ci si connette a cluster di Service Fabric di produzione.Do not use the no-verify option when connecting to production Service Fabric clusters.

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.In addition, you can specify paths to directories of trusted CA certs, or individual certs. Per specificare questi percorsi, usare l'argomento --ca.To specify these paths, use the --ca argument. ad esempio:For example:

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.After you connect, you should be able to run other sfctl commands to interact with the cluster.

Connessione a un cluster mediante PowerShellConnect to a cluster using PowerShell

Prima di eseguire operazioni su un cluster tramite PowerShell, stabilire una connessione al cluster.Before you perform operations on a cluster through PowerShell, first establish a connection to the cluster. La connessione al cluster verrà usata per tutti i successivi comandi nella specifica sessione di PowerShell.The cluster connection is used for all subsequent commands in the given PowerShell session.

Connettersi a un cluster non sicuroConnect to an unsecure cluster

Per connettersi a un cluster non sicuro, specificare l'indirizzo dell'endpoint del cluster nel comando Connect-ServiceFabricCluster:To connect to an unsecure cluster, provide the cluster endpoint address to the Connect-ServiceFabricCluster command:

Connect-ServiceFabricCluster -ConnectionEndpoint <Cluster FQDN>:19000 

Connettersi a un cluster sicuro con Azure Active DirectoryConnect to a secure cluster using Azure Active Directory

Per connettersi a un cluster sicuro che usa Azure Active Directory per autorizzare l'accesso di amministratore al cluster, specificare l'identificazione personale del certificato del cluster e usare il flag AzureActiveDirectory.To connect to a secure cluster that uses Azure Active Directory to authorize cluster administrator access, provide the cluster certificate thumbprint and use the AzureActiveDirectory flag.

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

Connettersi a un cluster sicuro con un certificato clientConnect to a secure cluster using a client certificate

Per connettersi a un cluster sicuro che usa certificati client per autorizzare l'accesso di amministratore, eseguire il comando di PowerShell seguente.Run the following PowerShell command to connect to a secure cluster that uses client certificates to authorize administrator access. 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.Provide the cluster certificate thumbprint and the thumbprint of the client certificate that has been granted permissions for cluster management. I dettagli del certificato devono corrispondere a un certificato sui nodi del cluster.The certificate details must match a certificate on the cluster nodes.

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.ServerCertThumbprint is the thumbprint of the server certificate installed on the cluster nodes. FindValue è l'identificazione personale del certificato client di amministrazione.FindValue is the thumbprint of the admin client certificate. Dopo l'immissione dei parametri, il comando sarà simile all'esempio seguente:When the parameters are filled in, the command looks like the following example:

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 DirectoryConnect to a secure cluster using Windows Active Directory

Se il cluster autonomo viene distribuito usando la protezione di Active Directory, connettersi al cluster aggiungendo l'opzione "WindowsCredential".If your standalone cluster is deployed using AD security, connect to the cluster by appending the switch "WindowsCredential".

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

Connettersi a un cluster mediante le API FabricClientConnect to a cluster using the FabricClient APIs

Service Fabric SDK fornisce la classe FabricClient per la gestione del cluster.The Service Fabric SDK provides the FabricClient class for cluster management. Per usare le API di FabricClient, è necessario disporre del pacchetto NuGet Microsoft.ServiceFabric.To use the FabricClient APIs, get the Microsoft.ServiceFabric NuGet package.

Connettersi a un cluster non sicuroConnect to an unsecure cluster

Per connettersi a un cluster remoto non protetto, creare un'istanza di FabricClient e specificare l'indirizzo del cluster:To connect to a remote unsecured cluster, create a FabricClient instance and provide the cluster address:

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.For code that is running from within a cluster, for example, in a Reliable Service, create a FabricClient without specifying the cluster address. FabricClient si connette al gateway di gestione locale nel nodo in cui il codice è attualmente in esecuzione, evitando un hop di rete aggiuntivo.FabricClient connects to the local management gateway on the node the code is currently running on, avoiding an extra network hop.

FabricClient fabricClient = new FabricClient();

Connettersi a un cluster sicuro con un certificato clientConnect to a secure cluster using a client certificate

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.The nodes in the cluster must have valid certificates whose common name or DNS name in SAN appears in the RemoteCommonNames property set on FabricClient. Questo processo consente l'autenticazione reciproca tra il client e i nodi del cluster.Following this process enables mutual authentication between the client and the cluster nodes.

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 interattiva a un cluster protetto con Azure Active DirectoryConnect to a secure cluster interactively using Azure Active Directory

Nell'esempio seguente viene utilizzata Azure Active Directory per l'identità del client e il certificato del server per l'identità del server.The following example uses Azure Active Directory for client identity and server certificate for server identity.

Al momento della connessione al cluster viene visualizzata automaticamente una finestra di dialogo per l'accesso interattivo.A dialog window automatically pops up for interactive sign-in upon connecting to the 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);

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

Connessione non interattiva a un cluster protetto con Azure Active DirectoryConnect to a secure cluster non-interactively using Azure Active Directory

L'esempio è basato su Microsoft.IdentityModel.Clients.ActiveDirectory, Versione: 2.19.208020213.The following example relies on Microsoft.IdentityModel.Clients.ActiveDirectory, Version: 2.19.208020213.

Per ulteriori informazioni sull'acquisizione di token di AAD, vedere Microsoft.IdentityModel.Clients.ActiveDirectory.For more information on AAD token acquisition, see Microsoft.IdentityModel.Clients.ActiveDirectory.

string tenantId = "C15CFCEA-02C1-40DC-8466-FBD0EE0B05D2";
string clientApplicationId = "118473C2-7619-46E3-A8E4-6DA8D5F56E12";
string webApplicationId = "53E6948C-0897-4DA6-B26A-EE2A38A690B4";

string token = GetAccessToken(
    tenantId,
    webApplicationId,
    clientApplicationId,
    "urn:ietf:wg:oauth:2.0:oob");

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

...

static string GetAccessToken(
    string tenantId,
    string resource,
    string clientId,
    string redirectUri)
{
    string authorityFormat = @"https://login.microsoftonline.com/{0}";
    string authority = string.Format(CultureInfo.InvariantCulture, authorityFormat, tenantId);
    var authContext = new AuthenticationContext(authority);

    var authResult = authContext.AcquireToken(
        resource,
        clientId,
        new UserCredential("TestAdmin@clustenametenant.onmicrosoft.com", "TestPassword"));
    return authResult.AccessToken;
}

Connessione a un cluster protetto senza conoscere a priori i metadati tramite Azure Active DirectoryConnect to a secure cluster without prior metadata knowledge using Azure Active Directory

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.The following example uses non-interactive token acquisition, but the same approach can be used to build a custom interactive token acquisition experience. I metadati di Azure Active Directory necessari per l'acquisizione dei token vengono letti dalla configurazione del cluster.The Azure Active Directory metadata needed for token acquisition is read from cluster configuration.

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 += (o, e) =>
{
    return GetAccessToken(e.AzureActiveDirectoryMetadata);
};

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

...

static string GetAccessToken(AzureActiveDirectoryMetadata aad)
{
    var authContext = new AuthenticationContext(aad.Authority);

    var authResult = authContext.AcquireToken(
        aad.ClusterApplication,
        aad.ClientApplication,
        new UserCredential("TestAdmin@clustenametenant.onmicrosoft.com", "TestPassword"));
    return authResult.AccessToken;
}

Connettersi a un cluster sicuro usando Service Fabric ExplorerConnect to a secure cluster using Service Fabric Explorer

Per raggiungere Service Fabric Explorer per un determinato cluster, inserire nel browser l'indirizzo seguente:To reach Service Fabric Explorer for a given cluster, point your browser to:

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

L'URL completo è disponibile anche nel riquadro essentials del cluster del portale di Azure.The full URL is also available in the cluster essentials pane of the Azure portal.

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.For connecting to a secure cluster on Windows or OS X using a browser, you can import the client certificate, and the browser will prompt you for the certificate to use for connecting to the cluster. Nei computer Linux il certificato dovrà essere importato usando le impostazioni avanzate del browser (ogni browser dispone di meccanismi diversi) per accedere al percorso del certificato sul disco.On Linux machines, the certificate will have to be imported using advanced browser settings (each browser has different mechanisms) and point it to tehe certificate location on disk.

Connettersi a un cluster sicuro con Azure Active DirectoryConnect to a secure cluster using Azure Active Directory

Per connettersi a un cluster protetto con AAD, inserire nel browser l'indirizzo seguente:To connect to a cluster that is secured with AAD, point your browser to:

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

Viene automaticamente richiesto di accedere con AAD.You are automatically be prompted to log in with AAD.

Connettersi a un cluster sicuro con un certificato clientConnect to a secure cluster using a client certificate

Per connettersi a un cluster protetto con certificati, inserire nel browser l'indirizzo seguente:To connect to a cluster that is secured with certificates, point your browser to:

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

Viene automaticamente richiesto di selezionare un certificato del client.You are automatically be prompted to select a client certificate.

Configurare un certificato client nel computer remotoSet up a client certificate on the remote computer

È 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.At least two certificates should be used for securing the cluster, one for the cluster and server certificate and another for client access. È consigliabile usare anche altri certificati secondari e certificati di accesso client.We recommend that you also use additional secondary certificates and client access certificates. 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.To secure the communication between a client and a cluster node using certificate security, you first need to obtain and install the client certificate. Il certificato può essere installato nell'archivio personale del computer locale o dell'utente corrente.The certificate can be installed into the Personal (My) store of the local computer or the current user. È necessaria anche l'identificazione personale del certificato del server in modo che il client possa autenticare il cluster.You also need the thumbprint of the server certificate so that the client can authenticate the cluster.

Per configurare il certificato del client nel computer che si userà per accedere al cluster, eseguire il cmdlet PowerShell seguente.Run the following PowerShell cmdlet to set up the client certificate on the computer from which you access the cluster.

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.If it is a self-signed certificate, you need to import it to your machine's "trusted people" store before you can use this certificate to connect to a secure cluster.

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

Passaggi successiviNext steps