Se connecter à un cluster sécurisé

Lorsqu’un client se connecte à un nœud de cluster Service Fabric, il peut être authentifié et une communication sécurisée peut être établie à l’aide de la sécurité par certificat ou de Microsoft Entra ID. Cette authentification garantit que seuls les utilisateurs autorisés puissent accéder au cluster et aux applications déployées, et effectuer des tâches de gestion. La sécurité par certificat ou Microsoft Entra doit avoir été précédemment activée sur le cluster lors de sa création. Pour plus d’informations sur les scénarios de sécurité des clusters, consultez Sécurité des clusters. Si vous vous connectez à un cluster sécurisé avec des certificats, configurez le certificat client sur l’ordinateur qui se connecte au cluster.

Se connecter à un cluster sécurisé à l’aide de l’interface CLI Azure Service Fabric (sfctl)

Il existe différentes manières de se connecter à un cluster sécurisé à l’aide de l’interface CLI Service Fabric (sfctl). Lorsque vous utilisez un certificat client pour l’authentification, les détails du certificat doivent correspondre à un certificat déployé sur les nœuds de cluster. Si votre certificat dispose d’autorités de certification, vous devez également spécifier les autorités de certification approuvées.

Vous pouvez vous connecter à un cluster à l’aide de la commande sfctl cluster select.

Les certificats clients peuvent être spécifiés de deux façons différentes : en tant que paire certificat/clé ou en tant que fichier PFX unique. Pour les fichiers PEM protégés par mot de passe, vous serez automatiquement invité à entrer le mot de passe. Si vous avez obtenu le certificat client sous forme de fichier PFX, commencez par convertir le fichier PFX en fichier PEM à l'aide de la commande suivante.

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

Si votre fichier .pfx n'est pas protégé par mot de passe, utilisez -passin pass: en guise de dernier paramètre.

Pour spécifier le certificat client en tant que fichier .pem, spécifiez le chemin d’accès de fichier dans l’argument --pem. Par exemple :

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

Les fichiers .pem protégés par mot de passe demanderont un mot de passe avant d’exécuter une commande.

Pour spécifier un certificat, la paire de clés utilise les arguments --cert et --key afin de spécifier les chemins d’accès de fichier vers chaque fichier respectif.

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

Il arrive que les certificats utilisés pour sécuriser les clusters de test ou de développement ne parviennent pas à valider le certificat. Pour ignorer la vérification du certificat, spécifiez l’option --no-verify. Par exemple :

Avertissement

N’utilisez pas l’option no-verify lorsque vous vous connectez aux clusters Service Fabric de production.

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

En outre, vous pouvez spécifier des chemins d’accès aux répertoires de certificats d’autorité de certification approuvées, ou à des certificats individuels. Pour spécifier ces chemins d’accès, utilisez l’argument --ca. Par exemple :

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

Une fois connecté, vous pouvez normalement exécuter d’autres commandes sfctl pour interagir avec le cluster.

Se connecter à un cluster à l’aide de PowerShell

Avant d’effectuer des opérations sur un cluster par le biais de PowerShell, établissez tout d’abord une connexion au cluster. La connexion au cluster est utilisée pour toutes les commandes suivantes dans la session PowerShell donnée.

Se connecter à un cluster non sécurisé

Pour vous connecter à un cluster non sécurisé, fournissez l’adresse de point de terminaison de cluster à la commande Connect-ServiceFabricCluster :

Connect-ServiceFabricCluster -ConnectionEndpoint <Cluster FQDN>:19000 

Se connecter à un cluster sécurisé à l’aide de Microsoft Entra ID

Pour vous connecter à un cluster sécurisé qui utilise Microsoft Entra ID pour accorder un accès administrateur au cluster, fournissez l’empreinte de certificat du cluster et utilisez l’indicateur AzureActiveDirectory.

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

Se connecter à un cluster sécurisé à l’aide d’un certificat client

Exécutez la commande PowerShell suivante pour vous connecter à un cluster sécurisé qui utilise des certificats clients pour autoriser l’accès administrateur.

Se connecter à l’aide du nom commun du certificat

Fournissez le nom commun du certificat du cluster et celui du certificat client qui dispose des autorisations de gestion du cluster. Les détails du certificat doivent correspondre à un certificat sur les nœuds du cluster.

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

ServerCommonName est le nom commun du certificat de serveur installé sur les nœuds de cluster. FindValue est le nom commun du certificat client administrateur. Lorsque les paramètres sont renseignés, la commande ressemble à l’exemple suivant :

$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 

Se connecter à l’aide d’une empreinte numérique du certificat

Fournissez l’empreinte de certificat du cluster et l’empreinte numérique du certificat client qui dispose des autorisations pour la gestion de cluster. Les détails du certificat doivent correspondre à un certificat sur les nœuds du cluster.

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

ServerCertThumbprint est l’empreinte du certificat du serveur installé sur les nœuds du cluster. FindValue est l’empreinte du certificat du client administrateur. Lorsque les paramètres sont renseignés, la commande ressemble à l’exemple suivant :

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

Connexion à un cluster sécurisé à l’aide de Windows Active Directory

Si votre cluster autonome est déployé à l’aide de la sécurité d’Active Directory, connectez-vous au cluster en ajoutant le commutateur « WindowsCredential ».

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

Se connecter à un cluster à l’aide des API FabricClient

Le Kit de développement logiciel (SDK) Service Fabric fournit la classe FabricClient pour la gestion de cluster. Pour utiliser les API FabricClient, obtenez le package NuGet Microsoft.ServiceFabric.

Se connecter à un cluster non sécurisé

Pour vous connecter à un cluster à distance non sécurisé, créez une instance de FabricClient et fournissez l’adresse du cluster :

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

Pour un code qui s’exécute à partir d’un cluster, par exemple dans un Reliable Service, créez un élément FabricClient sans spécifier l’adresse du cluster. FabricClient se connecte à la passerelle de gestion locale sur le nœud sur lequel le code est en cours d’exécution, évitant ainsi un tronçon réseau supplémentaire.

FabricClient fabricClient = new FabricClient();

Se connecter à un cluster sécurisé à l’aide d’un certificat client

Les nœuds du cluster doivent présenter des certificats valides, dont le nom commun ou le nom DNS dans le SAN s’affichent dans la propriété RemoteCommonNames définie sur FabricClient. Ce processus permet une authentification mutuelle entre le client et les nœuds du 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;
}

Se connecter de manière interactive à un cluster sécurisé à l’aide de Microsoft Entra ID

L’exemple suivant utilise Microsoft Entra ID pour l’identité du client et le certificat de serveur pour l’identité du serveur.

Une fenêtre de connexion interactive s’ouvre automatiquement une fois la connexion au cluster établie.

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

Se connecter de manière non-interactive à un cluster sécurisé à l’aide de Microsoft Entra ID

L’exemple suivant repose sur Microsoft.Identity.Client, version: 4.37.0.

Pour plus d’informations sur l’acquisition d’un jeton Microsoft Entra, consultez 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);
}

Se connecter à un cluster sécurisé sans connaissance préalable des métadonnées à l’aide de Microsoft Entra ID

L’exemple suivant utilise une procédure d’acquisition de jeton non interactive, mais vous pouvez suivre la même approche pour créer une expérience d’acquisition de jeton interactive personnalisée. Les métadonnées Microsoft Entra nécessaires à l’acquisition d’un jeton sont lues à partir de la configuration du 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);
}

Se connecter à un cluster sécurisé à l’aide de Service Fabric Explorer

Pour atteindre Service Fabric Explorer pour un cluster donné, dirigez votre navigateur vers :

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

L'URL complète est également disponible dans le volet des éléments essentiels du cluster dans le portail Azure.

Pour vous connecter à un cluster sécurisé sur Windows ou OS X à l’aide d’un navigateur, vous pouvez importer le certificat client et le navigateur vous demande le certificat à utiliser pour la connexion au cluster. Sur les ordinateurs Linux, le certificat devra être importé à l’aide de paramètres du navigateur avancés (chaque navigateur a ses mécanismes) et pointer vers l’emplacement du certificat sur le disque. Pour plus d'informations, consultez Configuration d'un certificat client.

Se connecter à un cluster sécurisé à l’aide de Microsoft Entra ID

Pour vous connecter à un cluster sécurisé avec Microsoft Entra ID, dirigez votre navigateur vers :

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

Vous êtes automatiquement invité à vous connecter à Microsoft Entra ID.

Se connecter à un cluster sécurisé à l’aide d’un certificat client

Pour vous connecter à un cluster sécurisé avec des certificats, pointez votre navigateur sur :

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

Vous êtes automatiquement invité à sélectionner un certificat client.

Configurer un certificat client sur l’ordinateur distant

Au moins deux certificats devraient être utilisés pour sécuriser le cluster, un pour le certificat du cluster et du serveur, et un autre pour l’accès client. Nous vous recommandons d’utiliser également des certificats secondaires supplémentaires et des certificats d’accès client. Pour sécuriser la communication entre un client et un nœud de cluster à l’aide de la sécurité par certificat, vous devez d’abord obtenir et installer le certificat client. Ce certificat peut être installé dans le magasin personnel de l’ordinateur local ou de l’utilisateur actuel. Vous avez également besoin de l’empreinte numérique du certificat du serveur afin que le client puisse authentifier le cluster.

  • Sur Windows : double-cliquez sur le fichier PFX et suivez les invites pour installer le certificat dans votre magasin personnel, Certificates - Current User\Personal\Certificates. Vous pouvez également utiliser la commande PowerShell :

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

    S’il s’agit d’un certificat auto-signé, vous devez l’importer dans le magasin de « personnes autorisées » de votre ordinateur avant de pouvoir l’utiliser pour vous connecter à un cluster sécurisé.

    Import-PfxCertificate -Exportable -CertStoreLocation Cert:\CurrentUser\TrustedPeople `
    -FilePath C:\docDemo\certs\DocDemoClusterCert.pfx `
    -Password (ConvertTo-SecureString -String test -AsPlainText -Force)
    
  • Sur Mac : double-cliquez sur le fichier PFX et suivez les invites pour installer le certificat dans votre application Keychain.

Étapes suivantes