Ligar a um cluster seguroConnect to a secure cluster

Quando um cliente se conecta a um nó de Cluster Service Fabric, o cliente pode ser autenticado e proteger a comunicação estabelecida usando o AAD (segurança de certificado ou Azure Active Directory).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). Essa autenticação garante que somente usuários autorizados possam acessar o cluster e aplicativos implantados e executar tarefas de gerenciamento.This authentication ensures that only authorized users can access the cluster and deployed applications and perform management tasks. O certificado ou a segurança do AAD deve ter sido habilitada anteriormente no cluster quando o cluster foi criado.Certificate or AAD security must have been previously enabled on the cluster when the cluster was created. Para obter mais informações sobre cenários de segurança de cluster, consulte segurança de cluster.For more information on cluster security scenarios, see Cluster security. Se você estiver se conectando a um cluster protegido com certificados, Configure o certificado do cliente no computador que se conecta ao cluster.If you are connecting to a cluster secured with certificates, set up the client certificate on the computer that connects to the cluster.

Conectar-se a um cluster seguro usando a CLI do Azure Service Fabric (sfctl)Connect to a secure cluster using Azure Service Fabric CLI (sfctl)

Há algumas maneiras diferentes de se conectar a um cluster seguro usando a CLI do Service Fabric (sfctl).There are a few different ways to connect to a secure cluster using the Service Fabric CLI (sfctl). Quando utilizar um certificado de cliente para autenticação, os detalhes do certificado têm de coincidir com um certificado implementado nos nós do cluster.When using a client certificate for authentication, the certificate details must match a certificate deployed to the cluster nodes. Se o certificado tiver autoridades de certificação (CAs), você precisará especificar também as CAs confiáveis.If your certificate has Certificate Authorities (CAs), you need to additionally specify the trusted CAs.

Você pode se conectar a um cluster usando sfctl cluster select o comando.You can connect to a cluster using the sfctl cluster select command.

Certificados de cliente podem ser especificados de duas maneiras diferentes, como um certificado e um par de chaves, ou como um único arquivo PFX.Client certificates can be specified in two different fashions, either as a cert and key pair, or as a single PFX file. Para arquivos PEM protegidos por senha, você será solicitado a inserir a senha automaticamente.For password protected PEM files, you will be prompted automatically to enter the password. Se você tiver obtido o certificado do cliente como um arquivo PFX, primeiro converta o arquivo PFX em um arquivo PEM usando o comando a seguir.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

Se seu arquivo. pfx não for protegido por senha, use-passe Pass: para o último parâmetro.If your .pfx file is not password protected, use -passin pass: for the last parameter.

Para especificar o certificado do cliente como um arquivo PEM, especifique o caminho do arquivo --pem no argumento.To specify the client certificate as a pem file, specify the file path in the --pem argument. Por exemplo:For example:

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

Os arquivos PEM protegidos por senha solicitarão a senha antes de executar qualquer comando.Password protected pem files will prompt for password prior to running any command.

Para especificar um certificado, o par de chaves --cert usa --key os argumentos e para especificar os caminhos de arquivo para cada arquivo respectivo.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

Às vezes, os certificados usados para proteger os clusters de teste ou desenvolvimento falham na validação do certificado.Sometimes certificates used to secure test or dev clusters fail certificate validation. Para ignorar a verificação de certificado, --no-verify especifique a opção.To bypass certificate verification, specify the --no-verify option. Por exemplo:For example:

Aviso

Não use a no-verify opção ao se conectar a clusters de Service Fabric de produção.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

Além disso, você pode especificar caminhos para diretórios de certificados de autoridade de certificação confiáveis ou certificados individuais.In addition, you can specify paths to directories of trusted CA certs, or individual certs. Para especificar esses caminhos, use o --ca argumento.To specify these paths, use the --ca argument. Por exemplo:For example:

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

Depois de se conectar, você poderá executar outros comandos do sfctl para interagir com o cluster.After you connect, you should be able to run other sfctl commands to interact with the cluster.

Conectar-se a um cluster usando o PowerShellConnect to a cluster using PowerShell

Antes de executar operações em um cluster por meio do PowerShell, primeiro estabeleça uma conexão com o cluster.Before you perform operations on a cluster through PowerShell, first establish a connection to the cluster. A conexão de cluster é usada para todos os comandos subsequentes na sessão do PowerShell especificada.The cluster connection is used for all subsequent commands in the given PowerShell session.

Conectar-se a um cluster não seguroConnect to an unsecure cluster

Para se conectar a um cluster não seguro, forneça o endereço do ponto de extremidade do cluster para o 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 

Conectar-se a um cluster seguro usando o Azure Active DirectoryConnect to a secure cluster using Azure Active Directory

Para se conectar a um cluster seguro que usa Azure Active Directory para autorizar o acesso de administrador de cluster, forneça a impressão digital do certificado de cluster e use o sinalizador 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

Conectar-se a um cluster seguro usando um certificado de clienteConnect to a secure cluster using a client certificate

Execute o seguinte comando do PowerShell para se conectar a um cluster seguro que usa certificados de cliente para autorizar o acesso de administrador.Run the following PowerShell command to connect to a secure cluster that uses client certificates to authorize administrator access.

Conectar usando o nome comum do certificadoConnect using certificate common name

Forneça o nome comum do certificado de cluster e o nome comum do certificado de cliente que recebeu permissões para o gerenciamento de cluster.Provide the cluster certificate common name and the common name of the client certificate that has been granted permissions for cluster management. Os detalhes do certificado devem corresponder a um certificado nos nós do cluster.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 é o nome comum do certificado do servidor instalado nos nós do cluster.ServerCommonName is the common name of the server certificate installed on the cluster nodes. FindValue é o nome comum do certificado do cliente de administrador.FindValue is the common name of the admin client certificate. Quando os parâmetros são preenchidos, o comando é semelhante ao exemplo a seguir: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 

Conectar usando a impressão digital do certificadoConnect using certificate thumbprint

Forneça a impressão digital do certificado do cluster e a impressão digital do certificado do cliente que recebeu permissões para o gerenciamento de cluster.Provide the cluster certificate thumbprint and the thumbprint of the client certificate that has been granted permissions for cluster management. Os detalhes do certificado devem corresponder a um certificado nos nós do 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 é a impressão digital do certificado do servidor instalado nos nós do cluster.ServerCertThumbprint is the thumbprint of the server certificate installed on the cluster nodes. FindValue é a impressão digital do certificado do cliente de administrador.FindValue is the thumbprint of the admin client certificate. Quando os parâmetros são preenchidos, o comando é semelhante ao exemplo a seguir: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 

Conectar-se a um cluster seguro usando o Windows Active DirectoryConnect to a secure cluster using Windows Active Directory

Se o cluster autônomo for implantado usando a segurança do AD, conecte-se ao cluster acrescentando o comutador "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

Conectar-se a um cluster usando as APIs do FabricClientConnect to a cluster using the FabricClient APIs

O SDK do Service Fabric fornece a classe FabricClient para o gerenciamento de cluster.The Service Fabric SDK provides the FabricClient class for cluster management. Para usar as APIs do FabricClient, obtenha o pacote NuGet do Microsoft. Fabric.To use the FabricClient APIs, get the Microsoft.ServiceFabric NuGet package.

Conectar-se a um cluster não seguroConnect to an unsecure cluster

Para se conectar a um cluster remoto não seguro, crie uma instância do FabricClient e forneça o endereço do 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");

Para o código que está sendo executado de dentro de um cluster, por exemplo, em um serviço confiável, crie um FabricClient sem especificar o endereço do 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 conecta-se ao gateway de gerenciamento local no nó em que o código está sendo executado, evitando um salto extra de rede.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();

Conectar-se a um cluster seguro usando um certificado de clienteConnect to a secure cluster using a client certificate

Os nós no cluster devem ter certificados válidos cujo nome comum ou nome DNS em SAN apareçam na Propriedade RemoteCommonNames definida em 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. Seguir esse processo habilita a autenticação mútua entre o cliente e os nós de 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;
}

Conectar-se a um cluster seguro interativamente usando o Azure Active DirectoryConnect to a secure cluster interactively using Azure Active Directory

O exemplo a seguir usa Azure Active Directory para identidade do cliente e certificado do servidor para a identidade do servidor.The following example uses Azure Active Directory for client identity and server certificate for server identity.

Uma janela de caixa de diálogo automaticamente é exibida para entrada interativa quando se conecta ao cluster.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);
}

Conectar-se a um cluster seguro de forma não interativa usando Azure Active DirectoryConnect to a secure cluster non-interactively using Azure Active Directory

O exemplo a seguir se baseia em Microsoft. IdentityModel. clients. ActiveDirectory, versão: 2.19.208020213.The following example relies on Microsoft.IdentityModel.Clients.ActiveDirectory, Version: 2.19.208020213.

Para obter mais informações sobre a aquisição de token do AAD, consulte 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;
}

Conectar-se a um cluster seguro sem conhecimento de metadados anterior usando Azure Active DirectoryConnect to a secure cluster without prior metadata knowledge using Azure Active Directory

O exemplo a seguir usa a aquisição de token não interativa, mas a mesma abordagem pode ser usada para criar uma experiência de aquisição de token interativo personalizada.The following example uses non-interactive token acquisition, but the same approach can be used to build a custom interactive token acquisition experience. Os metadados de Azure Active Directory necessários para a aquisição de token são lidos na configuração do 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;
}

Conectar-se a um cluster seguro usando o Service Fabric ExplorerConnect to a secure cluster using Service Fabric Explorer

Para alcançar Service Fabric Explorer para um determinado cluster, aponte seu navegador para:To reach Service Fabric Explorer for a given cluster, point your browser to:

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

A URL completa também está disponível no painel do Essentials do cluster do portal do Azure.The full URL is also available in the cluster essentials pane of the Azure portal.

Para se conectar a um cluster seguro no Windows ou no OS X usando um navegador, você pode importar o certificado do cliente e o navegador solicitará que o certificado seja usado para conexão com o 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. Em computadores Linux, o certificado terá de ser importado usando configurações avançadas do navegador (cada navegador tem mecanismos diferentes) e o apontará para o local do certificado no disco.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. Leia configurar um certificado do cliente para obter mais informações.Read Set up a client certificate for more information.

Conectar-se a um cluster seguro usando o Azure Active DirectoryConnect to a secure cluster using Azure Active Directory

Para se conectar a um cluster protegido com o AAD, aponte seu navegador para:To connect to a cluster that is secured with AAD, point your browser to:

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

Você será automaticamente solicitado a entrar com o AAD.You are automatically be prompted to sign in with AAD.

Conectar-se a um cluster seguro usando um certificado de clienteConnect to a secure cluster using a client certificate

Para se conectar a um cluster protegido com certificados, aponte seu navegador para:To connect to a cluster that is secured with certificates, point your browser to:

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

Você será automaticamente solicitado a selecionar um certificado de cliente.You are automatically be prompted to select a client certificate.

Configurar um certificado de cliente no computador remotoSet up a client certificate on the remote computer

Pelo menos dois certificados devem ser usados para proteger o cluster, um para o cluster e o certificado do servidor e outro para acesso de cliente.At least two certificates should be used for securing the cluster, one for the cluster and server certificate and another for client access. Recomendamos que você também use certificados secundários adicionais e certificados de acesso para cliente.We recommend that you also use additional secondary certificates and client access certificates. Para proteger a comunicação entre um cliente e um nó de cluster usando a segurança do certificado, primeiro você precisa obter e instalar o certificado do cliente.To secure the communication between a client and a cluster node using certificate security, you first need to obtain and install the client certificate. O certificado pode ser instalado no repositório pessoal (meu) do computador local ou no usuário atual.The certificate can be installed into the Personal (My) store of the local computer or the current user. Você também precisa da impressão digital do certificado do servidor para que o cliente possa autenticar o cluster.You also need the thumbprint of the server certificate so that the client can authenticate the cluster.

  • No Windows: Clique duas vezes no arquivo PFX e siga os prompts para instalar o certificado em seu repositório pessoal, 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. Como alternativa, você pode usar o comando do 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)
    

    Se for um certificado autoassinado, você precisará importá-lo para o repositório "pessoas confiáveis" do seu computador antes de poder usar esse certificado para se conectar a um cluster seguro.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)
    
  • No Mac: Clique duas vezes no arquivo PFX e siga os prompts para instalar o certificado em seu conjunto de chaves.On Mac: Double-click the PFX file and follow the prompts to install the certificate in your Keychain.

Passos SeguintesNext steps