Adicionar ou remover certificados para um cluster do Service Fabric no Azure

Recomenda-se que se familiarize com a forma como o Service Fabric utiliza certificados X.509 e esteja familiarizado com os cenários de segurança do Cluster. Tem de compreender o que é um certificado de cluster e o que é utilizado antes de avançar mais.

O comportamento de carregamento de certificados predefinido do SDK do Azure Service Fabrics é implementar e utilizar o certificado definido com a data de expiração mais longe no futuro; independentemente da definição de configuração primária ou secundária. Reverter para o comportamento clássico é uma ação avançada não recomendada e requer a definição do valor do parâmetro de definição "UseSecondaryIfNewer" como falso na configuração Fabric.Code .

O Service Fabric permite-lhe especificar dois certificados de cluster, um primário e um secundário, quando configura a segurança do certificado durante a criação do cluster, além dos certificados de cliente. Veja criar um cluster do Azure através do portal ou criar um cluster do Azure através do Azure Resource Manager para obter detalhes sobre como configurá-los no momento da criação. Se especificar apenas um certificado de cluster no momento da criação, este será utilizado como o certificado primário. Após a criação do cluster, pode adicionar um novo certificado como secundário.

Nota

Para um cluster seguro, precisará sempre de, pelo menos, um certificado de cluster válido (não revogado e não expirado) implementado (primário ou secundário) (caso contrário, o cluster deixa de funcionar). 90 dias antes de todos os certificados válidos chegarem à expiração, o sistema gera um rastreio de aviso e um evento de estado de funcionamento de aviso no nó. Atualmente, estas são as únicas notificações que o Service Fabric envia relativamente à expiração do certificado.

Nota

Recomendamos que utilize o módulo Azure Az PowerShell para interagir com o Azure. Veja Instalar o Azure PowerShell para começar. Para saber como migrar para o módulo do Az PowerShell, veja Migrar o Azure PowerShell do AzureRM para o Az.

Adicionar um certificado de cluster secundário com o portal

Não é possível adicionar o certificado de cluster secundário através do portal do Azure; utilize o Azure Resource Manager.

Remover um certificado de cluster com o portal

Para um cluster seguro, precisará sempre de pelo menos um certificado válido (não revogado e não expirado). O certificado implementado com o mais longe na data de expiração futura será utilizado e removê-lo fará com que o cluster deixe de funcionar; certifique-se de que remove apenas o certificado expirado ou um certificado não utilizado que expira mais cedo.

Para remover um certificado de segurança de cluster não utilizado, navegue para a secção Segurança e selecione a opção "Eliminar" no menu de contexto do certificado não utilizado.

Se a sua intenção for remover o certificado marcado como primário, terá de implementar um certificado secundário com uma data de expiração ainda mais no futuro do que o certificado primário, ativando o comportamento de rollover automático; elimine o certificado primário após a conclusão do rollover automático.

Adicionar um certificado secundário com o Azure Resource Manager

Estes passos partem do princípio de que está familiarizado com a forma como Resource Manager funciona e implementou pelo menos um cluster do Service Fabric com um modelo de Resource Manager e tem o modelo que utilizou para configurar o cluster à mão. Supõe-se também que está familiarizado com a utilização de JSON.

Nota

Se estiver à procura de um modelo de exemplo e parâmetros que possa utilizar para acompanhar ou como ponto de partida, transfira-o a partir deste repositório git.

Editar o modelo de Resource Manager

Para facilitar o seguimento, o exemplo 5-VM-1-NodeTypes-Secure_Step2.JSON contém todas as edições que iremos efetuar. o exemplo está disponível no git-repo.

Certifique-se de que segue todos os passos

  1. Abra o modelo de Resource Manager que utilizou para implementar o cluster. (Se transferiu o exemplo do repositório anterior, utilize 5-VM-1-NodeTypes-Secure_Step1.JSON para implementar um cluster seguro e, em seguida, abra esse modelo).

  2. Adicione dois novos parâmetros "secCertificateThumbprint" e "secCertificateUrlValue" do tipo "string" à secção de parâmetros do modelo. Pode copiar o seguinte fragmento de código e adicioná-lo ao modelo. Consoante a origem do seu modelo, poderá já ter estes definidos, se assim for, avançar para o passo seguinte.

       "secCertificateThumbprint": {
          "type": "string",
          "metadata": {
            "description": "Certificate Thumbprint"
          }
        },
        "secCertificateUrlValue": {
          "type": "string",
          "metadata": {
            "description": "Refers to the location URL in your key vault where the certificate was uploaded, it is should be in the format of https://<name of the vault>.vault.azure.net:443/secrets/<exact location>"
          }
        },
    
    
  3. Efetuar alterações ao recurso Microsoft.ServiceFabric/clusters – localize a definição de recurso "Microsoft.ServiceFabric/clusters" no seu modelo. Em propriedades dessa definição, encontrará a etiqueta JSON "Certificado", que deverá ter um aspeto semelhante ao seguinte fragmento JSON:

          "properties": {
            "certificate": {
              "thumbprint": "[parameters('certificateThumbprint')]",
              "x509StoreName": "[parameters('certificateStoreValue')]"
         }
    

    Adicione uma nova etiqueta "thumbprintSecondary" e atribua-lhe um valor "[parameters('secCertificateThumbprint')]".

    Agora, a definição do recurso deverá ter o seguinte aspeto (consoante a origem do modelo, pode não ser exatamente semelhante ao fragmento abaixo).

          "properties": {
            "certificate": {
              "thumbprint": "[parameters('certificateThumbprint')]",
              "thumbprintSecondary": "[parameters('secCertificateThumbprint')]",
              "x509StoreName": "[parameters('certificateStoreValue')]"
         }
    

    Se pretender passar por cima do certificado, especifique o novo certificado como primário e moa a primária atual como secundária. Isto resulta no rollover do certificado primário atual para o novo certificado num único passo de implementação.

          "properties": {
            "certificate": {
              "thumbprint": "[parameters('secCertificateThumbprint')]",
              "thumbprintSecondary": "[parameters('certificateThumbprint')]",
              "x509StoreName": "[parameters('certificateStoreValue')]"
         }
    
  4. Efetue alterações a todas as definições de recursos Microsoft.Compute/virtualMachineScaleSets – localize a definição de recurso Microsoft.Compute/virtualMachineScaleSets. Desloque-se para "publisher": "Microsoft.Azure.ServiceFabric", em "virtualMachineProfile".

    Nas definições do publicador do Service Fabric, deverá ver algo semelhante a este.

    Json_Pub_Setting1

    Adicionar as novas entradas de certificado ao mesmo

                   "certificateSecondary": {
                        "thumbprint": "[parameters('secCertificateThumbprint')]",
                        "x509StoreName": "[parameters('certificateStoreValue')]"
                        }
                      },
    
    

    As propriedades devem agora ter o seguinte aspeto

    Json_Pub_Setting2

    Se pretender passar por cima do certificado, especifique o novo certificado como primário e moa a primária atual como secundária. Isto resulta no rollover do certificado atual para o novo certificado num único passo de implementação.

                   "certificate": {
                       "thumbprint": "[parameters('secCertificateThumbprint')]",
                       "x509StoreName": "[parameters('certificateStoreValue')]"
                         },
                   "certificateSecondary": {
                        "thumbprint": "[parameters('certificateThumbprint')]",
                        "x509StoreName": "[parameters('certificateStoreValue')]"
                        }
                      },
    

    As propriedades devem agora ter o seguinte aspeto
    Json_Pub_Setting3

  5. Efetuar Alterações a todas as definições de recursos Microsoft.Compute/virtualMachineScaleSets – localize a definição de recurso Microsoft.Compute/virtualMachineScaleSets. Desloque-se para "vaultCertificates": , em "OSProfile". deve ter um aspeto semelhante a este.

    Json_Pub_Setting4

    Adicione o secCertificateUrlValue ao mesmo. utilize o seguinte fragmento:

                      {
                        "certificateStore": "[parameters('certificateStoreValue')]",
                        "certificateUrl": "[parameters('secCertificateUrlValue')]"
                      }
    
    

    Agora, o Json resultante deve ter um aspeto semelhante a este. Json_Pub_Setting5

Nota

Certifique-se de que tem os passos 4 e 5 repetidos para todas as definições de recursos Nodetypes/Microsoft.Compute/virtualMachineScaleSets no seu modelo. Se perder um deles, o certificado não será instalado nesse conjunto de dimensionamento de máquinas virtuais e terá resultados imprevisíveis no cluster, incluindo a descida do cluster (se acabar sem certificados válidos que o cluster possa utilizar para segurança. Então verifique novamente, antes de continuar.

Editar o ficheiro de modelo para refletir os novos parâmetros que adicionou acima

Se estiver a utilizar o exemplo do git-repo para acompanhar, pode começar a fazer alterações em O exemplo de 5-VM-1-NodeTypes-Secure.parameters_Step2.JSON

Edite o Resource Manager Parâmetro de modelo Ficheiro, adicione os dois novos parâmetros para secCertificateThumbprint e secCertificateUrlValue.

    "secCertificateThumbprint": {
      "value": "thumbprint value"
    },
    "secCertificateUrlValue": {
      "value": "Refers to the location URL in your key vault where the certificate was uploaded, it is should be in the format of https://<name of the vault>.vault.azure.net:443/secrets/<exact location>"
     },

Implementar o modelo no Azure

  • Está agora pronto para implementar o modelo no Azure. Abra uma linha de comandos Azure PowerShell versão 1 ou superior.
  • Inicie sessão na sua Conta do Azure e selecione a subscrição específica do Azure. Este é um passo importante para as pessoas que têm acesso a mais do que uma subscrição do Azure.
Connect-AzAccount
Select-AzSubscription -SubscriptionId <Subscription ID> 

Teste o modelo antes de o implementar. Utilize o mesmo Grupo de Recursos no qual o cluster está atualmente implementado.

Test-AzResourceGroupDeployment -ResourceGroupName <Resource Group that your cluster is currently deployed to> -TemplateFile <PathToTemplate>

Implemente o modelo no seu grupo de recursos. Utilize o mesmo Grupo de Recursos no qual o cluster está atualmente implementado. Execute o comando New-AzResourceGroupDeployment. Não precisa de especificar o modo, uma vez que o valor predefinido é incremental.

Nota

Se definir Modo como Concluído, pode eliminar inadvertidamente os recursos que não estão no seu modelo. Por isso, não o utilize neste cenário.

New-AzResourceGroupDeployment -Name ExampleDeployment -ResourceGroupName <Resource Group that your cluster is currently deployed to> -TemplateFile <PathToTemplate>

Eis um exemplo preenchido do mesmo PowerShell.

$ResourceGroup2 = "chackosecure5"
$TemplateFile = "C:\GitHub\Service-Fabric\ARM Templates\Cert Rollover Sample\5-VM-1-NodeTypes-Secure_Step2.json"
$TemplateParmFile = "C:\GitHub\Service-Fabric\ARM Templates\Cert Rollover Sample\5-VM-1-NodeTypes-Secure.parameters_Step2.json"

New-AzResourceGroupDeployment -ResourceGroupName $ResourceGroup2 -TemplateParameterFile $TemplateParmFile -TemplateUri $TemplateFile -clusterName $ResourceGroup2

Assim que a implementação estiver concluída, ligue-se ao cluster com o novo Certificado e execute algumas consultas. Se conseguir fazê-lo. Em seguida, pode eliminar o certificado antigo.

Se estiver a utilizar um certificado autoassinado, não se esqueça de importá-los para o seu arquivo de certificados TrustedPeople local.

######## Set up the certs on your local box
Import-PfxCertificate -Exportable -CertStoreLocation Cert:\CurrentUser\TrustedPeople -FilePath c:\Mycertificates\chackdanTestCertificate9.pfx -Password (ConvertTo-SecureString -String abcd123 -AsPlainText -Force)
Import-PfxCertificate -Exportable -CertStoreLocation Cert:\CurrentUser\My -FilePath c:\Mycertificates\chackdanTestCertificate9.pfx -Password (ConvertTo-SecureString -String abcd123 -AsPlainText -Force)

Para referência rápida, aqui está o comando para ligar a um cluster seguro

$ClusterName= "chackosecure5.westus.cloudapp.azure.com:19000"
$CertThumbprint= "70EF5E22ADB649799DA3C8B6A6BF7SD1D630F8F3" 

Connect-serviceFabricCluster -ConnectionEndpoint $ClusterName -KeepAliveIntervalInSec 10 `
    -X509Credential `
    -ServerCertThumbprint $CertThumbprint  `
    -FindType FindByThumbprint `
    -FindValue $CertThumbprint `
    -StoreLocation CurrentUser `
    -StoreName My

Para referência rápida, aqui está o comando para obter o estado de funcionamento do cluster

Get-ServiceFabricClusterHealth 

Implementar certificados de cliente no cluster.

Pode utilizar os mesmos passos descritos nos Passos 5 anteriores para que os certificados tenham sido implementados a partir de um keyvault para os Nós. Só precisa de definir e utilizar parâmetros diferentes.

Adicionar ou remover certificados de Cliente

Além dos certificados de cluster, pode adicionar certificados de cliente para realizar operações de gestão num cluster do Service Fabric.

Pode adicionar dois tipos de certificados de cliente : Administração ou Só de leitura. Em seguida, estes podem ser utilizados para controlar o acesso às operações de administração e às operações de Consulta no cluster. Por predefinição, os certificados de cluster são adicionados à lista de certificados de Administração permitidos.

Pode especificar qualquer número de certificados de cliente. Cada adição/eliminação resulta numa atualização de configuração para o cluster do Service Fabric.

Adicionar certificados de cliente - Administração ou Read-Only através do portal

  1. Navegue para a secção Segurança e selecione o botão "+ Autenticação" na parte superior da secção de segurança.
  2. Na secção "Adicionar Autenticação", selecione "Tipo de Autenticação" – "Cliente só de leitura" ou "cliente Administração"
  3. Agora, escolha o Método de autorização. Isto indica ao Service Fabric se deve procurar este certificado com o nome do requerente ou o thumbprint. Em geral, não é uma boa prática de segurança utilizar o método de autorização do nome do requerente.

Adicionar certificado de Cliente

Eliminação de Certificados de Cliente - Administração ou Read-Only através do portal

Para remover um certificado secundário de ser utilizado para a segurança do cluster, navegue para a secção Segurança e selecione a opção "Eliminar" no menu de contexto do certificado específico.

Adicionar certificados de aplicação a um conjunto de dimensionamento de máquinas virtuais

Para implementar um certificado que utiliza para as suas aplicações no cluster, veja este script do PowerShell de exemplo.

Passos seguintes

Leia estes artigos para obter mais informações sobre a gestão de clusters: