Ligar a um cluster seguro

Quando um cliente se conecta a um nó de cluster do Service Fabric, o cliente pode ser autenticado e a comunicação segura estabelecida usando segurança de certificado ou ID do Microsoft Entra. Essa autenticação garante que apenas usuários autorizados possam acessar o cluster e os aplicativos implantados e executar tarefas de gerenciamento. O certificado ou a segurança do Microsoft Entra deve ter sido habilitada anteriormente no cluster quando o cluster foi criado. Para obter mais informações sobre cenários de segurança de cluster, consulte Segurança de cluster. Se você estiver se conectando a um cluster protegido com certificados, configure o certificado do cliente no computador que se conecta ao cluster.

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

Há algumas maneiras diferentes de se conectar a um cluster seguro usando a CLI do Service Fabric (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. Se o seu certificado tiver Autoridades de Certificação (CAs), você precisará especificar adicionalmente as CAs confiáveis.

Você pode se conectar a um cluster usando o sfctl cluster select comando.

Os certificados de cliente podem ser especificados de duas maneiras diferentes, como um par de certificados e chaves ou como um único arquivo PFX. Para ficheiros PEM protegidos por palavra-passe, ser-lhe-á pedido automaticamente que introduza a palavra-passe. Se você obteve o certificado do cliente como um arquivo PFX, primeiro converta o arquivo PFX em um arquivo PEM usando o seguinte comando.

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

Se o seu arquivo .pfx não estiver protegido por senha, use -passin pass: para o último parâmetro.

Para especificar o certificado do cliente como um arquivo pem, especifique o caminho do --pem arquivo no argumento. Por exemplo:

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.

Para especificar um cert, o par de chaves use os --cert argumentos e --key para especificar os caminhos de arquivo para cada arquivo respetivo.

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

Às vezes, os certificados usados para proteger clusters de teste ou desenvolvimento falham na validação do certificado. Para ignorar a verificação de certificado, especifique a --no-verify opção. Por exemplo:

Aviso

Não use a no-verify opção ao se conectar a clusters do Service Fabric de produção.

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 CA confiáveis ou certificados individuais. Para especificar esses caminhos, use o --ca argumento. Por exemplo:

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

Depois de se conectar, você deve ser capaz de executar outros comandos sfctl para interagir com o cluster.

Conectar-se a um cluster usando o PowerShell

Antes de executar operações em um cluster por meio do PowerShell, primeiro estabeleça uma conexão com o cluster. A conexão de cluster é usada para todos os comandos subsequentes em determinada sessão do PowerShell.

Conectar-se a um cluster não seguro

Para se conectar a um cluster não seguro, forneça o endereço do ponto de extremidade do cluster ao comando Connect-ServiceFabricCluster :

Connect-ServiceFabricCluster -ConnectionEndpoint <Cluster FQDN>:19000 

Conectar-se a um cluster seguro usando o Microsoft Entra ID

Para se conectar a um cluster seguro que usa a ID do Microsoft Entra para autorizar o acesso de administrador do cluster, forneça a impressão digital do certificado do cluster e use o sinalizador AzureActiveDirectory .

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

Conectar-se a um cluster seguro usando um certificado de cliente

Execute o seguinte comando do PowerShell para se conectar a um cluster seguro que usa certificados de cliente para autorizar o acesso de administrador.

Conectar-se usando o nome comum do certificado

Forneça o nome comum do certificado de cluster e o nome comum do certificado de cliente ao qual foram concedidas permissões para gerenciamento de cluster. Os detalhes do certificado devem corresponder a um certificado nos nós do cluster.

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. FindValue é o nome comum do certificado do cliente administrador. Quando os parâmetros são preenchidos, o comando se parece com o exemplo a seguir:

$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-se usando a impressão digital do certificado

Forneça a impressão digital do certificado de cluster e a impressão digital do certificado de cliente ao qual foram concedidas permissões para gerenciamento de cluster. Os detalhes do certificado devem corresponder a um certificado nos nós do cluster.

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. FindValue é a impressão digital do certificado do cliente administrador. Quando os parâmetros são preenchidos, o comando se parece com o exemplo a seguir:

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 Ative Directory

Se o cluster autônomo for implantado usando a segurança do AD, conecte-se ao cluster anexando a opção "WindowsCredential".

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

Conectar-se a um cluster usando as APIs do FabricClient

O SDK do Service Fabric fornece a classe FabricClient para gerenciamento de cluster. Para usar as APIs do FabricClient, obtenha o pacote NuGet do Microsoft.ServiceFabric.

Conectar-se a um cluster não seguro

Para se conectar a um cluster remoto não seguro, crie uma instância FabricClient e forneça o endereço do cluster:

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

Para 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. FabricClient se conecta ao gateway de gerenciamento local no nó em que o código está sendo executado no momento, evitando um salto de rede extra.

FabricClient fabricClient = new FabricClient();

Conectar-se a um cluster seguro usando um certificado de cliente

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

Conectar-se a um cluster seguro interativamente usando o Microsoft Entra ID

O exemplo a seguir usa o Microsoft Entra ID para identidade de cliente e certificado de servidor para identidade de servidor.

Uma janela de diálogo aparece automaticamente para entrada interativa ao se conectar ao 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 não interativamente usando a ID do Microsoft Entra

O exemplo a seguir depende de Microsoft.Identity.Client, Version: 4.37.0.

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

Conectar-se a um cluster seguro sem conhecimento prévio de metadados usando o Microsoft Entra ID

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 interativa personalizada. Os metadados do Microsoft Entra necessários para a aquisição de tokens são lidos a partir da configuração do 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);
}

Conectar-se a um cluster seguro usando o Service Fabric Explorer

Para acessar o Service Fabric Explorer para um determinado cluster, aponte seu navegador para:

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

A URL completa também está disponível no painel de fundamentos do cluster do portal do Azure.

Para se conectar a um cluster seguro no Windows ou OS X usando um navegador, você pode importar o certificado do cliente e o navegador solicitará o certificado a ser usado para se conectar ao cluster. Em máquinas Linux, o certificado terá que ser importado usando configurações avançadas do navegador (cada navegador tem mecanismos diferentes) e apontá-lo para o local do certificado no disco. Leia Configurar um certificado de cliente para obter mais informações.

Conectar-se a um cluster seguro usando o Microsoft Entra ID

Para se conectar a um cluster protegido com o Microsoft Entra ID, aponte seu navegador para:

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

Você será automaticamente solicitado a entrar com o Microsoft Entra ID.

Conectar-se a um cluster seguro usando um certificado de cliente

Para se conectar a um cluster protegido com certificados, aponte o navegador para:

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

Você será automaticamente solicitado a selecionar um certificado de cliente.

Configurar um certificado de cliente no computador remoto

Pelo menos dois certificados devem ser usados para proteger o cluster, um para o certificado de cluster e servidor e outro para acesso de cliente. Recomendamos que você também use certificados secundários adicionais e certificados de acesso para cliente. Para proteger a comunicação entre um cliente e um nó de cluster usando a segurança de certificado, primeiro você precisa obter e instalar o certificado de cliente. O certificado pode ser instalado no armazenamento Pessoal (Meu) do computador local ou do usuário atual. Você também precisa da impressão digital do certificado do servidor para que o cliente possa autenticar o cluster.

  • No Windows: faça duplo clique no ficheiro PFX e siga as instruções para instalar o certificado no seu arquivo pessoal, Certificates - Current User\Personal\Certificates. Como alternativa, você pode usar o comando PowerShell:

    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 armazenamento de "pessoas confiáveis" da sua máquina antes de poder usar esse certificado para se conectar a um cluster seguro.

    Import-PfxCertificate -Exportable -CertStoreLocation Cert:\CurrentUser\TrustedPeople `
    -FilePath C:\docDemo\certs\DocDemoClusterCert.pfx `
    -Password (ConvertTo-SecureString -String test -AsPlainText -Force)
    
  • No Mac: faça duplo clique no ficheiro PFX e siga as instruções para instalar o certificado na sua Keychain.

Próximos passos