Безопасное подключение к кластеруConnect to a secure cluster

Когда клиент подключается к узлу кластера Service Fabric, он может пройти проверку подлинности и установить безопасную связь на основе сертификатов или с помощью 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). Такая проверка подлинности гарантирует, что только авторизованные пользователи могут получить доступ к кластеру и развернутым приложениям для выполнения задач управления.This authentication ensures that only authorized users can access the cluster and deployed applications and perform management tasks. Конфигурацию обеспечения безопасности на основе сертификатов или AAD необходимо предварительно включить в кластере при его создании.Certificate or AAD security must have been previously enabled on the cluster when the cluster was created. Дополнительные сведения о сценариях обеспечения безопасности кластеров см. в разделе Безопасность кластера.For more information on cluster security scenarios, see Cluster security. Если безопасность в кластере обеспечивается сертификатами, то на компьютере, который подключается к нему, необходимо настроить сертификат клиента.If you are connecting to a cluster secured with certificates, set up the client certificate on the computer that connects to the cluster.

Подключение к защищенному кластеру с помощью интерфейса командной строки Azure Service Fabric CLI (sfctl)Connect to a secure cluster using Azure Service Fabric CLI (sfctl)

К защищенному кластеру можно подключиться с помощью интерфейса командной строки Service Fabric CLI (sfctl) несколькими способами.There are a few different ways to connect to a secure cluster using the Service Fabric CLI (sfctl). При использовании сертификата клиента для проверки подлинности сведения о сертификате должны соответствовать сертификату, развернутому в узлах кластера.When using a client certificate for authentication, the certificate details must match a certificate deployed to the cluster nodes. Если сертификат выдан центром сертификации (ЦС), необходимо дополнительно указать доверенные ЦС.If your certificate has Certificate Authorities (CAs), you need to additionally specify the trusted CAs.

Можно подключиться к кластеру с помощью команды sfctl cluster select.You can connect to a cluster using the sfctl cluster select command.

Сертификаты клиента можно указать как сертификат и пару ключей или как отдельный PFX-файл.Client certificates can be specified in two different fashions, either as a cert and key pair, or as a single PFX file. Вам автоматически будет предложено ввести пароль для защищенных файлов формата PEM.For password protected PEM files, you will be prompted automatically to enter the password. Если вы получили сертификат клиента в файле формата PFX, сначала преобразуйте формат PFX в PEM, используя следующую команду.If you obtained the client certificate as a PFX file, first convert the PFX file to a PEM file using the following command.

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

Если PFX-файл не защищен паролем, укажите -passin pass: в качестве последнего параметра.If your .pfx file is not password protected, use -passin pass: for the last parameter.

Чтобы указать сертификат клиента как PEM-файл, укажите путь к файлу в аргументе --pem.To specify the client certificate as a pem file, specify the file path in the --pem argument. Пример:For example:

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

Прежде чем выполнять любые команды, для защищенных паролем PEM-файлов необходимо будет ввести пароль.Password protected pem files will prompt for password prior to running any command.

Чтобы указать сертификат, пара ключей использует аргументы --cert и --key, чтобы указать пути для каждого соответствующего файла.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

Иногда сертификаты, используемые для защиты тестового кластера и кластера для разработки не проходят проверку сертификата.Sometimes certificates used to secure test or dev clusters fail certificate validation. Чтобы не выполнять проверку сертификата, укажите параметр --no-verify.To bypass certificate verification, specify the --no-verify option. Пример:For example:

Предупреждение

При подключении к производственным кластерам Service Fabric не используйте параметр no-verify.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

Кроме того, вы можете указать пути к каталогам доверенных сертификатов ЦС или отдельных сертификатов.In addition, you can specify paths to directories of trusted CA certs, or individual certs. Чтобы указать эти пути, используйте аргумент --ca.To specify these paths, use the --ca argument. Пример:For example:

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

После подключения вы сможете взаимодействовать с кластером с помощью других команд sfctl.After you connect, you should be able to run other sfctl commands to interact with the cluster.

Подключение к кластеру с помощью PowerShellConnect to a cluster using PowerShell

Перед выполнением операций в кластере с помощью PowerShell к этому кластеру сначала нужно подключиться.Before you perform operations on a cluster through PowerShell, first establish a connection to the cluster. Это подключение используется для выполнения всех последующих команд в течение определенного сеанса PowerShell.The cluster connection is used for all subsequent commands in the given PowerShell session.

Подключение к незащищенному кластеруConnect to an unsecure cluster

Чтобы подключиться к незащищенному кластеру, добавьте в следующую команду Connect-ServiceFabricCluster адрес конечной точки кластера.To connect to an unsecure cluster, provide the cluster endpoint address to the Connect-ServiceFabricCluster command:

Connect-ServiceFabricCluster -ConnectionEndpoint <Cluster FQDN>:19000 

Подключение к защищенному кластеру с помощью Azure Active DirectoryConnect to a secure cluster using Azure Active Directory

Чтобы подключиться к защищенному кластеру, использующему Azure Active Directory для проверки подлинности административного доступа, предоставьте отпечаток сертификата кластера и используйте флаг 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

Подключение к защищенному кластеру с использованием сертификата клиентаConnect to a secure cluster using a client certificate

Чтобы подключиться к защищенному кластеру, использующему сертификаты клиента для проверки подлинности административного доступа, выполните следующую команду PowerShell.Run the following PowerShell command to connect to a secure cluster that uses client certificates to authorize administrator access.

Подключение с помощью общего имени сертификатаConnect using certificate common name

Предоставьте общее имя сертификата кластера, а также общее имя сертификата клиента с разрешениями на управление кластером.Provide the cluster certificate common name and the common name of the client certificate that has been granted permissions for cluster management. Сведения о сертификате должны соответствовать сертификату на узлах кластера.The certificate details must match a certificate on the cluster nodes.

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

ServerCommonName — общее имя сертификата сервера, установленного на узлах кластера.ServerCommonName is the common name of the server certificate installed on the cluster nodes. FindValue — общее имя сертификата клиента администрирования.FindValue is the common name of the admin client certificate. Когда все параметры указаны, команда выглядит так:When the parameters are filled in, the command looks like the following example:

$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 

Подключение с помощью отпечатка сертификатаConnect using certificate thumbprint

Предоставьте отпечаток сертификата кластера, а также отпечаток сертификата клиента с разрешениями на управление кластером.Provide the cluster certificate thumbprint and the thumbprint of the client certificate that has been granted permissions for cluster management. Сведения о сертификате должны соответствовать сертификату на узлах кластера.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 — отпечаток сертификата сервера, установленного на узлах кластера.ServerCertThumbprint is the thumbprint of the server certificate installed on the cluster nodes. FindValue — отпечаток сертификата клиента администрирования.FindValue is the thumbprint of the admin client certificate. Когда все параметры указаны, команда выглядит так: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 

Подключение к защищенному кластеру с помощью Windows Active DirectoryConnect to a secure cluster using Windows Active Directory

При развертывании автономного кластера с помощью группы безопасности Active Directory подключитесь к кластеру, добавив параметр "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

Подключение к кластеру с помощью интерфейсов API FabricClientConnect to a cluster using the FabricClient APIs

В пакете SDK для Service Fabric предусмотрен класс FabricClient для управления кластером.The Service Fabric SDK provides the FabricClient class for cluster management. Чтобы использовать интерфейсы API FabricClient, получите пакет NuGet Microsoft.ServiceFabric.To use the FabricClient APIs, get the Microsoft.ServiceFabric NuGet package.

Подключение к незащищенному кластеруConnect to an unsecure cluster

Чтобы подключиться к удаленному незащищенному кластеру, создайте экземпляр FabricClient и укажите адрес кластера.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");

В коде, выполняемом в кластере (например, в надежной службе), создайте класс FabricClient, не указывая адрес кластера.For code that is running from within a cluster, for example, in a Reliable Service, create a FabricClient without specifying the cluster address. Класс FabricClient подключается к локальному шлюзу управления на узле, где в настоящее время выполняется код, без дополнительного перехода по сети.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();

Подключение к защищенному кластеру с использованием сертификата клиентаConnect to a secure cluster using a client certificate

У узлов в кластере должны быть действительные сертификаты, общее имя или DNS-имя которых в сети SAN отображается в свойстве RemoteCommonNames, заданном для 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. Это обеспечивает взаимную проверку подлинности между клиентом и узлами кластера.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;
}

Интерактивное подключение к защищенному кластеру с помощью Azure Active DirectoryConnect to a secure cluster interactively using Azure Active Directory

В следующем примере в качестве удостоверения клиента используется Azure Active Directory, а сертификат сервера — в качестве удостоверения сервера.The following example uses Azure Active Directory for client identity and server certificate for server identity.

При подключении к кластеру автоматически появляется всплывающее окно интерактивного входа в систему.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);
}

Неинтерактивное подключение к защищенному кластеру с помощью Azure Active DirectoryConnect to a secure cluster non-interactively using Azure Active Directory

Приведенный ниже пример основан на пространстве имен Microsoft.IdentityModel.Clients.ActiveDirectory версии 2.19.208020213.The following example relies on Microsoft.IdentityModel.Clients.ActiveDirectory, Version: 2.19.208020213.

Дополнительные сведения о получении маркеров AAD см. в описании 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;
}

Подключение к защищенному кластеру без предварительного получения метаданных с помощью Azure Active DirectoryConnect to a secure cluster without prior metadata knowledge using Azure Active Directory

В следующем примере используется неинтерактивное получение маркера, но используемый подход пригоден и для реализации интерактивного получения маркера.The following example uses non-interactive token acquisition, but the same approach can be used to build a custom interactive token acquisition experience. Метаданные Azure Active Directory, необходимые для получения маркера, считываются из конфигурации кластера.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;
}

Подключение к защищенному кластеру с помощью Service Fabric ExplorerConnect to a secure cluster using Service Fabric Explorer

Чтобы подключиться к Service Fabric Explorer для заданного кластера, просто перейдите в браузере по адресу:To reach Service Fabric Explorer for a given cluster, point your browser to:

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

Полный URL-адрес доступен также на панели основных компонентов кластера портала Azure.The full URL is also available in the cluster essentials pane of the Azure portal.

Чтобы подключиться к безопасному кластеру в Windows или OS X с помощью браузера, можно импортировать сертификат клиента. Браузер запросит его, чтобы подключиться к кластеру.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. Для компьютеров Linux необходимо импортировать сертификат с помощью расширенных параметров браузера (в каждом браузере используется свой механизм), а затем указать его расположение на диске.On Linux machines, the certificate will have to be imported using advanced browser settings (each browser has different mechanisms) and point it to the certificate location on disk. Дополнительные сведения см. в разделе Настройка сертификата клиента на удаленном компьютере.Read Set up a client certificate for more information.

Подключение к защищенному кластеру с помощью Azure Active DirectoryConnect to a secure cluster using Azure Active Directory

Чтобы подключиться к кластеру, защищенному с помощью AAD, перейдите в браузере по адресу:To connect to a cluster that is secured with AAD, point your browser to:

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

Вам будет автоматически предложено войти в систему с помощью AAD.You are automatically be prompted to sign in with AAD.

Подключение к защищенному кластеру с использованием сертификата клиентаConnect to a secure cluster using a client certificate

Чтобы подключиться к кластеру, защищенному с использованием сертификатов, перейдите в браузере по адресу:To connect to a cluster that is secured with certificates, point your browser to:

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

После этого автоматически появится запрос на выбор сертификата клиента.You are automatically be prompted to select a client certificate.

Настройка сертификата клиента на удаленном компьютереSet up a client certificate on the remote computer

Для обеспечения безопасности кластера следует использовать по крайней мере два сертификата: один для кластера и сервера, а второй для клиентского доступа.At least two certificates should be used for securing the cluster, one for the cluster and server certificate and another for client access. Рекомендуется также использовать дополнительные сертификаты и сертификаты клиентского доступа.We recommend that you also use additional secondary certificates and client access certificates. Чтобы защитить обмен данными между клиентом и узлом кластера с помощью сертификатов, сначала необходимо получить и установить сертификат клиента.To secure the communication between a client and a cluster node using certificate security, you first need to obtain and install the client certificate. Его можно установить в личное хранилище на локальном компьютере или в личное хранилище текущего пользователя.The certificate can be installed into the Personal (My) store of the local computer or the current user. Отпечаток в сертификате сервера также нужен, чтобы клиент мог аутентифицировать кластер.You also need the thumbprint of the server certificate so that the client can authenticate the cluster.

  • В Windows: дважды щелкните PFX-файл и следуйте инструкциям на экране для установки сертификата в личном хранилище, Certificates - Current User\Personal\Certificates.On Windows: Double-click the PFX file and follow the prompts to install the certificate in your personal store, Certificates - Current User\Personal\Certificates. Кроме того, вы можете использовать команду PowerShell.Alternatively, you can use the PowerShell command:

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

    Если это самозаверяющий сертификат, то перед использованием для подключения к безопасному кластеру его необходимо импортировать в хранилище "Доверенные лица" на своем компьютере.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)
    
  • В Mac: дважды щелкните PFX-файл и следуйте инструкциям на экране, чтобы установить сертификат в цепочке ключей.On Mac: Double-click the PFX file and follow the prompts to install the certificate in your Keychain.

Дальнейшие действияNext steps