Segurança do Azure Service Fabric

Para saber mais sobre as práticas de segurança recomendadas para o Azure, examine as práticas de segurança recomendadas para o Azure Service Fabric

Key Vault

O Azure Key Vault é o serviço de gerenciamento de segredos recomendado para clusters e aplicativos do Service Fabric.

Observação

Se os certificados/segredos de um Key Vault são implantados em um Conjunto de dimensionamento de máquinas virtuais como um Segredo de conjunto de dimensionamento de máquinas virtuais, o Key Vault e o Conjunto de dimensionamento de máquinas virtuais devem ser colocalizados.

Criar a autoridade de certificação que emitiu o certificado do Service Fabric

O certificado do Azure Key Vault pode ser criado ou importado em um Key Vault. Quando um certificado de Key Vault é criado, a chave privada é criada dentro do Key Vault e nunca é exposta ao proprietário do certificado. Veja a seguir maneiras de criar um certificado no Key Vault:

  • Criar um certificado autoassinado para criar um par de chaves públicas-privadas e associá-lo a um certificado. O certificado será assinado por sua própria chave.
  • Criar um novo certificado manualmente para criar um par de chaves públicas-privadas e gerar uma solicitação de assinatura de certificado X.509. A solicitação de assinatura pode ser assinada por sua autoridade de registro ou a autoridade de certificação. O certificado X.509 assinado pode ser mesclado com o par de chaves pendente para concluir o certificado do KV no Key Vault. Embora esse método requeira mais etapas, ele oferece maior segurança porque a chave privada é criada no Key Vault e restrita a ele. Isso é explicado no diagrama a seguir.

Examine os métodos de criação de certificados do Azure Keyvault para obter mais detalhes.

Implantar certificados do Key Vault em Conjuntos de Dimensionamento de Máquinas Virtuais no cluster do Service Fabric

Para implantar certificados de um keyvault colocalizado em um Conjunto de dimensionamento de máquinas virtuais, use o Conjunto de dimensionamento de máquinas virtuais osProfile. Veja a seguir as propriedades de modelo do Resource Manager :

"secrets": [
   {
       "sourceVault": {
           "id": "[parameters('sourceVaultValue')]"
       },
       "vaultCertificates": [
          {
              "certificateStore": "[parameters('certificateStoreValue')]",
              "certificateUrl": "[parameters('certificateUrlValue')]"
          }
       ]
   }
]

Observação

O vault deve ser habilitado para a implantação do modelo do Resource Manager.

Aplicar uma ACL (Lista de Controle de Acesso) em seu certificado para o cluster do Service Fabric

O publicador das extensões do Conjunto de dimensionamento de máquinas virtuais Microsoft.Azure.ServiceFabric é usado para configurar a Segurança dos Nós. Para aplicar uma ACL a seus certificados para os processos de cluster do Service Fabric, use as seguintes propriedades de modelo do Resource Manager:

"certificate": {
   "commonNames": [
       "[parameters('certificateCommonName')]"
   ],
   "x509StoreName": "[parameters('certificateStoreValue')]"
}

Proteger um certificado de cluster do Service Fabric com nome comum

Para proteger o cluster do Service Fabric por certificado Common Name, use a propriedade de modelo do Resource Manager certificateCommonNames, da seguinte maneira:

"certificateCommonNames": {
    "commonNames": [
        {
            "certificateCommonName": "[parameters('certificateCommonName')]",
            "certificateIssuerThumbprint": "[parameters('certificateIssuerThumbprint')]"
        }
    ],
    "x509StoreName": "[parameters('certificateStoreValue')]"
}

Observação

Os clusters do Service Fabric usarão o primeiro certificado válido que encontrarem no repositório de certificados do host. No Windows, esse será o certificado com a data de validade mais recente que corresponde à impressão digital do seu Nome Comum e Emissor.

Os domínios do Azure, como *<SEU SUBDOMÍNIO>.cloudapp.azure.com ou <SEU SUBDOMÍNIO>.trafficmanager.net, são propriedades da Microsoft. As autoridades de certificação não emitirão certificados para domínios de usuários não autorizados. A maioria dos usuários precisará comprar um domínio de um registrador ou ser um administrador de domínio autorizado para que uma autoridade de certificação emita um certificado com esse nome comum.

Para obter detalhes adicionais sobre como configurar o serviço DNS para resolver seu domínio para um endereço IP da Microsoft, examine as informações sobre como configurar o DNS do Azure para hospedar seu domínio.

Observação

Após delegar seus servidores de nome de domínios a seus servidores de nome de zona DNS do Azure, adicione os dois registros a seguir na zona DNS:

  • Um registro 'A' para o domínio APEX que NÃO seja um Alias record set em todos os endereços IP que seu domínio personalizado resolverá.
  • Um registro de 'C' para subdomínios Microsoft que você provisionou que NÃO seja um Alias record set. Por exemplo, você pode usar o Gerenciador de Tráfego ou nome DNS do Load Balancer.

Para atualizar seu portal a fim de exibir um nome DNS personalizado de seu cluster do Service Fabric "managementEndpoint", atualize as seguintes propriedades de modelo do Resource Manager do Cluster do Service Fabric:

 "managementEndpoint": "[concat('https://<YOUR CUSTOM DOMAIN>:',parameters('nt0fabricHttpGatewayPort'))]",

Criptografar os valores de segredo de pacote do Service Fabric

Os valores comuns que são criptografados em pacotes do Service Fabric incluem as credenciais de Registro de Contêiner do Azure (ACR), variáveis de ambiente, configurações e chaves de conta de armazenamento de plug-in do volume do Azure.

Para configurar um certificado de criptografia e criptografar segredos em clusters do Windows:

Gere um certificado autoassinado para criptografar seu segredo:

New-SelfSignedCertificate -Type DocumentEncryptionCert -KeyUsage DataEncipherment -Subject mydataenciphermentcert -Provider 'Microsoft Enhanced Cryptographic Provider v1.0'

Use as instruções em Implantar certificados do Key Vault no Conjunto de dimensionamento de máquinas virtuais do cluster do Service Fabric para implantar os certificados do Key Vault em seus Conjuntos de Dimensionamento de Máquinas Virtuais do Cluster do Service Fabric.

Criptografe seu segredo usando o seguinte comando do PowerShell e, em seguida, atualize o manifesto do aplicativo do Service Fabric com o valor criptografado:

Invoke-ServiceFabricEncryptText -CertStore -CertThumbprint "<thumbprint>" -Text "mysecret" -StoreLocation CurrentUser -StoreName My

Para configurar um certificado de criptografia e criptografar segredos em clusters do Linux:

Gerar um certificado autoassinado para criptografar segredos:

openssl req -newkey rsa:2048 -nodes -keyout TestCert.prv -x509 -days 365 -out TestCert.pem
cat TestCert.prv >> TestCert.pem

Siga as instruções descritas em Implantar certificados do Key Vault em Conjunto de dimensionamento de máquinas virtuais do cluster do Service Fabric em seus Conjuntos de Dimensionamento de Máquinas Virtuais do Cluster do Service Fabric.

Criptografe seu segredo usando os seguintes comandos e, em seguida, atualize o Manifesto do aplicativo do Service Fabric com o valor criptografado:

echo "Hello World!" > plaintext.txt
iconv -f ASCII -t UTF-16LE plaintext.txt -o plaintext_UTF-16.txt
openssl smime -encrypt -in plaintext_UTF-16.txt -binary -outform der TestCert.pem | base64 > encrypted.txt

Depois de criptografar os valores protegidos, especifique os segredos criptografados no aplicativo do Service Fabric e descriptografe os segredos criptografados no código de serviço.

Incluir um certificado de ponto de extremidade em aplicativos do Service Fabric

Para configurar o certificado de ponto de extremidade do aplicativo, inclua o certificado no manifesto do aplicativo adicionando um elemento EndpointCertificate junto com o elemento User da conta da entidade de segurança. Por padrão, a conta da entidade de segurança é NetworkService. Essa opção fornecerá o gerenciamento da ACL de chave privada de certificado de aplicativo à entidade de segurança definida.

<ApplicationManifest … >
  ...
  <Principals>
    <Users>
      <User Name="Service1" AccountType="NetworkService" />
    </Users>
  </Principals>
  <Certificates>
    <EndpointCertificate Name="MyCert" X509FindType="FindByThumbprint" X509FindValue="[YourCertThumbprint]"/>
  </Certificates>
</ApplicationManifest>

Incluir um certificado de segredo em aplicativos do Service Fabric

Para conceder ao seu aplicativo acesso aos segredos, inclua o certificado adicionando um elemento SecretsCertificate ao manifesto do aplicativo.

<ApplicationManifest … >
  ...
  <Certificates>
    <SecretsCertificate Name="MyCert" X509FindType="FindByThumbprint" X509FindValue="[YourCertThumbprint]"/>
  </Certificates>
</ApplicationManifest>

Autenticar aplicativos do Service Fabric para recursos do Azure usando a Identidade de Serviço Gerenciada (MSI)

Para saber mais sobre as identidades gerenciadas para os recursos do Azure, confira o artigo O que são as identidades gerenciadas para recursos do Azure?. Os clusters do Azure Service Fabric são hospedados em Conjuntos de Dimensionamento de Máquinas Virtuais que dão suporte à Identidade de Serviço Gerenciada. Para ver uma lista de serviços nos quais a MSI pode ser usada para autenticação, confira Serviços do Azure que dão suporte à autenticação do Microsoft Entra.

Para habilitar a identidade gerenciada atribuída ao sistema durante a criação de um conjunto de dimensionamento de máquinas virtuais ou um conjunto de dimensionamento de máquinas virtuais existente, declare a seguinte propriedade "Microsoft.Compute/virtualMachinesScaleSets":

"identity": { 
    "type": "SystemAssigned"
}

Confira o artigo O que são as identidades gerenciadas para recursos do Azure? para saber mais.

Se você tiver criado uma identidade gerenciada atribuída ao usuário, declare o recurso a seguir em seu modelo para atribuí-la a seu conjunto de dimensionamento de máquinas virtuais. Substitua \<USERASSIGNEDIDENTITYNAME\> pelo nome da identidade gerenciada atribuída ao usuário que você criou:

"identity": {
    "type": "userAssigned",
    "userAssignedIdentities": {
        "[resourceID('Microsoft.ManagedIdentity/userAssignedIdentities/',variables('<USERASSIGNEDIDENTITYNAME>'))]": {}
    }
}

Para que o aplicativo do Service Fabric possa usar a identidade gerenciada, é necessário conceder permissões aos Recursos do Azure de que ele necessita para se autenticar. Os comandos a seguir concedem acesso a um Recurso do Azure:

PRINCIPAL_ID=$(az resource show --id /subscriptions/<YOUR SUBSCRIPTON>/resourceGroups/<YOUR RG>/providers/Microsoft.Compute/virtualMachineScaleSets/<YOUR SCALE SET> --api-version 2018-06-01 | python -c "import sys, json; print(json.load(sys.stdin)['identity']['principalId'])")

az role assignment create --assignee $PRINCIPAL_ID --role 'Contributor' --scope "/subscriptions/<YOUR SUBSCRIPTION>/resourceGroups/<YOUR RG>/providers/<PROVIDER NAME>/<RESOURCE TYPE>/<RESOURCE NAME>"

No código do aplicativo do Service Fabric, obtenha um token de acesso para o Azure Resource Manager fazendo um REST semelhante ao seguinte:

ACCESS_TOKEN=$(curl 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https%3A%2F%2Fmanagement.azure.com%2F' -H Metadata:true | python -c "import sys, json; print json.load(sys.stdin)['access_token']")

O aplicativo do Service Fabric poderá, então, usar o token de acesso para se autenticar nos Recursos do Azure que dão suporte ao Active Directory. O exemplo a seguir mostra como fazer isso em um recurso do Azure Cosmos DB:

COSMOS_DB_PASSWORD=$(curl 'https://management.azure.com/subscriptions/<YOUR SUBSCRIPTION>/resourceGroups/<YOUR RG>/providers/Microsoft.DocumentDB/databaseAccounts/<YOUR ACCOUNT>/listKeys?api-version=2016-03-31' -X POST -d "" -H "Authorization: Bearer $ACCESS_TOKEN" | python -c "import sys, json; print(json.load(sys.stdin)['primaryMasterKey'])")

Linhas de base de segurança do Windows

Recomendamos que você implemente uma configuração padrão do setor que seja amplamente conhecida e bem testada, como as linhas de base de segurança da Microsoft, em vez de criar uma linha de base por conta própria; uma opção para provisionamento delas em seus Conjuntos de Dimensionamento de Máquinas Virtuais é usar o manipulador de extensão da Configuração de Estado Desejado (DSC) do Azure, para configurar as VMs à medida que elas fiquem online, para que estejam executando o software de produção.

Firewall do Azure

Firewall do Azure é um serviço de segurança de rede gerenciado e baseado em nuvem que protege seus recursos de Rede Virtual do Azure. É um firewall totalmente com estado como serviço, com alta disponibilidade interna e escalabilidade de nuvem sem restrições.; isso habilita a capacidade de limitar o tráfego HTTP/S de saída para uma lista especificada FQDNs (nomes de domínio totalmente qualificados), incluindo caracteres curinga. Esse recurso não exige a terminação TLS/SSL. É recomendável que você aproveite as marcas de FQDN do Firewall do Azure para atualizações do Windows e para habilitar o tráfego de rede para os pontos de extremidade do Microsoft Windows Update que podem fluir pelo firewall. Implantar o Firewall do Azure usando um modelo fornece um exemplo para a definição do modelo de recurso Microsoft.Network/azureFirewalls. Regras de firewall comuns a aplicativos do Service Fabric é permitir o seguinte para sua rede virtual de clusters:

  • *download.microsoft.com
  • *servicefabric.azure.com
  • *.core.windows.net

Essas regras de firewall complementam seus Grupos de Segurança de Rede de saída permitidos, que incluem o ServiceFabric e Armazenamento, como destinos permitidos de sua rede virtual.

TLS 1.2

O Microsoft Azure recomenda que todos os clientes concluam a migração para soluções compatíveis com o protocolo TLS 1.2 e certifiquem-se de que o TLS 1.2 seja usado por padrão.

Os serviços do Azure, incluindo Service Fabric, concluíram o trabalho de engenharia para remover a dependência em protocolos TLS 1.0/1.1 e fornecem suporte total aos clientes que desejam ter suas cargas de trabalho configuradas para aceitar e iniciar somente conexões TLS 1.2.

Os clientes devem configurar suas cargas de trabalho hospedadas no Azure e os aplicativos locais interagindo com os serviços do Azure para usar o TLS 1.2 por padrão. Veja como configurar o Service Fabric nós de cluster e aplicativos para usar uma versão específica do TLS.

Windows Defender

Por padrão, o antivírus Windows Defender está instalado no Windows Server 2016. Para obter detalhes, confira o artigo Antivírus Windows Defender no Windows Server 2016. A interface do usuário é instalada por padrão em alguns SKUs, mas não é necessária. Para reduzir qualquer impacto no desempenho e uma sobrecarga de consumo de recurso incorridos pelo Windows Defender, e se as políticas de segurança permitirem excluir processos e caminhos do software livre, declare as seguintes propriedades no modelo do Resource Manager da Extensão do Conjunto de dimensionamento de máquinas virtuais para excluir o cluster do Service Fabric das verificações:

 {
    "name": "[concat('VMIaaSAntimalware','_vmNodeType0Name')]",
    "properties": {
        "publisher": "Microsoft.Azure.Security",
        "type": "IaaSAntimalware",
        "typeHandlerVersion": "1.5",
        "settings": {
            "AntimalwareEnabled": "true",
            "Exclusions": {
                "Paths": "[concat(parameters('svcFabData'), ';', parameters('svcFabLogs'), ';', parameters('svcFabRuntime'))]",
                "Processes": "Fabric.exe;FabricHost.exe;FabricInstallerService.exe;FabricSetup.exe;FabricDeployer.exe;ImageBuilder.exe;FabricGateway.exe;FabricDCA.exe;FabricFAS.exe;FabricUOS.exe;FabricRM.exe;FileStoreService.exe;FabricBRS.exe;BackupCopier.exe"
            },
            "RealtimeProtectionEnabled": "true",
            "ScheduledScanSettings": {
                "isEnabled": "true",
                "scanType": "Quick",
                "day": "7",
                "time": "120"
            }
        },
        "protectedSettings": null
    }
}

Observação

Confira a documentação sobre antimalware para obter as regras de configuração, caso não esteja usando o Windows Defender. O Windows Defender não tem suporte no Linux.

Hospedar aplicativos não confiáveis em um cluster do Service Fabric

Um cluster do Service Fabric é um locatário único por design e os aplicativos hospedados são considerados confiáveis. Os aplicativos, portanto, têm acesso concedido ao runtime do Service Fabric, que se manifesta em diferentes formas, algumas das quais são: variáveis de ambiente que apontam para caminhos de arquivos no host correspondentes aos arquivos do aplicativo e do Fabric, caminhos do hosts montados com acesso de gravação nas cargas de trabalho do contêiner, um ponto de extremidade de comunicação entre processos que aceita solicitações específicas do aplicativo e o certificado do cliente que o Fabric espera que o aplicativo use para se autenticar.

Se estiver pensando em hospedar aplicativos não confiáveis, você deverá executar etapas adicionais para definir e possuir a experiência de multilocatário hostil para o cluster do Service Fabric. Isso exigirá que você considere vários aspectos, no contexto do seu cenário, incluindo, mas não limitado ao seguinte:

  • Uma revisão de segurança completa das interações dos aplicativos não confiáveis com outros aplicativos, o próprio cluster e a infraestrutura de computação subjacente.
  • Uso da tecnologia em área restrita mais forte aplicável (por exemplo, modos de isolamento apropriados para cargas de trabalho de contêiner).
  • Avaliação de risco dos aplicativos não confiáveis que escapam da tecnologia de área restrita, pois o próximo limite de confiança e segurança é o próprio cluster.
  • Remoção do acesso dos aplicativos não confiáveis ao runtime do Service Fabric.

RemoveServiceFabricRuntimeAccess

O acesso ao runtime do Service Fabric pode ser removido usando a seguinte declaração na seção Políticas do manifesto do aplicativo:

<ServiceManifestImport>
    <Policies>
        <ServiceFabricRuntimeAccessPolicy RemoveServiceFabricRuntimeAccess="true"/>
    </Policies>
</ServiceManifestImport>

Próximas etapas