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
Connettersi a un cluster sicuro usando 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;
}
Connettersi 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);
}
Connettersi a un cluster sicuro in modo 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);
}
Connettersi 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.
Connettersi a un cluster sicuro usando 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
- Processo di aggiornamento del cluster di infrastruttura di servizi e operazioni eseguibile dall'utente
- Gestione delle applicazioni di Service Fabric in Visual Studio
- Introduzione al modello di integrità di Infrastruttura di servizi
- Sicurezza delle applicazioni e RunAs
- Introduzione all'interfaccia della riga di comando di Service Fabric