Segurança do Azure Service Fabric

Para mais informações sobre as Melhores Práticas de Segurança do Azure, consulte as melhores práticas de segurança do Azure Service Fabric

Cofre de Chaves

O Azure Key Vault é o serviço recomendado de gestão de segredos para aplicações e clusters Azure Service Fabric.

Observação

Se certificados/segredos de um Key Vault forem implementados num Conjunto de Escala de Máquina Virtual como um segredo de Conjunto de Escala de Máquina Virtual, então o Key Vault e o Conjunto de Escala de Máquina Virtual devem ser colocalizados.

Criar certificado Service Fabric emitido por autoridade certificadora

Um certificado Azure Key Vault pode ser criado ou importado para um Key Vault. Quando um certificado de Cofre de Chaves é criado, a chave privada é criada dentro do Cofre de Chaves e nunca é exposta ao titular do certificado. Aqui estão as formas de criar um certificado no Key Vault:

  • Crie um certificado auto-assinado para criar um par de chaves público-privada e associe-o a um certificado. O certificado será assinado pela sua própria chave.
  • Criar manualmente um novo certificado para criar um par de chaves público-privada e gerar um pedido de assinatura de certificado X.509. O pedido de assinatura pode ser assinado pela sua autoridade de registo ou autoridade de certificação. O certificado x509 assinado pode ser fundido com o par de chaves pendente para completar o certificado KV no Key Vault. Embora este método exija mais passos, oferece maior segurança porque a chave privada é criada e restrita ao Key Vault. Isto é explicado no diagrama abaixo.

Consulte Azure Keyvault Certificate Creation Methods para mais detalhes.

Implementar certificados Key Vault em conjuntos de escalas de máquinas virtuais do cluster Service Fabric

Para implementar certificados de um keyvault colocalizado para um Virtual Machine Scale Set, use o Virtual Machine Scale Set osProfile. As seguintes são as propriedades do modelo do Gestor de Recursos:

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

Observação

O cofre deve estar ativado para a implementação de templates do Resource Manager.

Aplique uma Lista de Controlo de Acesso (ACL) ao seu certificado para o seu cluster Service Fabric

As extensões do Virtual Machine Scale Set do editor Microsoft.Azure.ServiceFabric são usadas para configurar a segurança dos seus nós. Para aplicar uma ACL aos seus certificados para os processos do Cluster Service Fabric, utilize as seguintes propriedades do modelo Resource Manager:

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

Proteja um certificado de cluster do Service Fabric pelo nome comum

Para proteger o seu cluster Service Fabric por certificado Common Name, utilize a propriedade do modelo do Gestor de Recursos certificateCommonNames, da seguinte forma:

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

Observação

Os clusters Service Fabric usarão o primeiro certificado válido que encontrarem na loja de certificados do seu anfitrião. No Windows, este será o certificado com a data de expiração mais recente que corresponde ao seu Nome Comum e à impressão digital do emissor.

Domínios Azure, como *<YOUR SUBDOMAIN.cloudapp.azure.com> ou <YOUR SUBDOMAIN.trafficmanager.net>, pertencem à Microsoft. As Autoridades Certificadoras não emitirão certificados para domínios a utilizadores não autorizados. A maioria dos utilizadores terá de comprar um domínio a um registador, ou ser um administrador autorizado de domínio, para que uma autoridade certificadora lhe emita um certificado com esse nome comum.

Para mais detalhes sobre como configurar o Serviço DNS para resolver o seu domínio num endereço IP Microsoft, veja como configurar o Azure DNS para hospedar o seu domínio.

Observação

Depois de delegar os servidores de nomes dos seus domínios aos servidores de nomes da zona DNS Azure, adicione os seguintes dois registos à sua Zona DNS:

  • Um registo 'A' para o domínio APEX que NÃO é um Alias record set para todos os endereços IP que o teu domínio personalizado irá resolver.
  • Um registo tipo 'C' para subdomínios Microsoft que provisionou e que NÃO são um Alias record set. Por exemplo, podes usar o nome DNS do teu Gestor de Tráfego ou do Balanceador de Carga.

Para atualizar o seu portal e mostrar um nome DNS personalizado para o seu Service Fabric Cluster "managementEndpoint", atualize as propriedades do modelo Service Fabric Cluster Resource Manager:

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

Encriptação dos valores secretos do pacote Service Fabric

Valores comuns que são encriptados nos pacotes Service Fabric incluem credenciais Azure Container Registry (ACR), variáveis de ambiente, definições e chaves de conta de armazenamento do plugin Azure Volume.

Para configurar um certificado de encriptação e encriptar segredos em clusters Windows:

Gere um certificado auto-assinado para encriptar o teu segredo:

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

Use as instruções em Implementar certificados Key Vault para conjuntos de escalas de máquinas virtuais do cluster Service Fabric para implantar Certificados Key Vault nos Conjuntos de Escala de Máquinas Virtuais do seu Cluster Service Fabric.

Encripte o seu segredo usando o seguinte comando PowerShell e depois atualize o manifesto da sua aplicação Service Fabric com o valor encriptado:

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

Para configurar um certificado de encriptação e encriptar segredos em clusters Linux:

Gere um certificado auto-assinado para encriptar os teus segredos:

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

Utilize as instruções em Deploy Key Vault certificates to Service Fabric cluster virtual machine scale sets para os Virtual Machine Scale Sets do cluster Service Fabric.

Encripte o seu segredo usando os seguintes comandos e depois atualize o seu Manifesto de Aplicação Service Fabric com o valor encriptado:

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 encriptar os seus valores protegidos, especifique segredos encriptados na Application Service Fabric e desencripte segredos encriptados do código de serviço.

Incluir certificado de endpoint em aplicações Service Fabric

Para configurar o certificado do endpoint da sua aplicação, inclua o certificado adicionando um elemento EndpointCertificate juntamente com o elemento User para a conta principal ao manifesto da aplicação. Por defeito, a conta principal é a NetworkService. Isto proporcionará a gestão do certificado de aplicação ACL de chave privada para o principal fornecido.

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

Incluir certificado secreto em aplicações Service Fabric

Para dar acesso à sua aplicação aos segredos, inclua o certificado adicionando um elemento SecretsCertificate ao manifesto da aplicação.

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

Autenticar aplicações Service Fabric em Recursos Azure usando Managed Service Identity (MSI)

Para saber mais sobre identidades geridas para recursos Azure, veja O que são identidades geridas para recursos Azure?. Os clusters Azure Service Fabric são alojados em Conjuntos de Escala de Máquinas Virtuais, que suportam a Identidade de Serviço Gerido. Para obter uma lista de serviços para os quais a MSI pode ser usada para autenticação, consulte Azure Services que suportam a autenticação Microsoft Entra.

Para ativar a atribuição de identidade gerida pelo sistema durante a criação de um conjunto de dimensionamento de máquinas virtuais ou de um conjunto de dimensionamento de máquinas virtuais existente, declare a seguinte propriedade "Microsoft.Compute/virtualMachinesScaleSets":

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

Veja O que são identidades geridas para recursos Azure? para mais informações.

Se criou uma identidade gerida atribuída pelo utilizador, declare o recurso seguinte no seu modelo para o atribuir ao conjunto de escalas da sua máquina virtual. Substitua \<USERASSIGNEDIDENTITYNAME\> pelo nome da identidade gerida atribuída pelo utilizador que você criou:

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

Antes de a sua aplicação Service Fabric poder utilizar uma identidade gerida, devem ser concedidas permissões aos Recursos Azure com que precisa de autenticação. Os seguintes comandos concedem acesso a um Azure Resource:

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 seu código de aplicação Service Fabric, obtenha um token de acesso para o Azure Resource Manager criando 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']")

A sua aplicação Service Fabric pode então usar o token de acesso para autenticar-se nos Recursos Azure que suportam Active Directory. O exemplo seguinte mostra como fazer isto para um recurso 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'])")

Bases de segurança do Windows

Recomendamos que implemente uma configuração padrão da indústria, amplamente conhecida e bem testada, como as linhas de base de segurança da Microsoft, em vez de criar uma linha de base por si próprio; uma opção para provisionar estes dispositivos nos seus Conjuntos de Escala de Máquina Virtual é usar o handler de extensão Azure Desired State Configuration (DSC), para configurar as VMs à medida que entram online, para que corram o software de produção.

Azure Firewall

O Azure Firewall é um serviço de segurança de rede gerido e com base na cloud que protege os recursos da Rede Virtual do Azure. É uma firewall com estado integralmente mantido como um serviço, com elevada disponibilidade incorporada e escalabilidade em nuvem sem restrições.; isto possibilita a capacidade de limitar o tráfego HTTP/S de saída a uma lista específica de nomes de domínio completamente qualificados (FQDN), inclusive com utilização de caracteres curinga. Esta funcionalidade não requer terminação TLS/SSL. Recomenda-se que aproveite as etiquetas FQDN do Azure Firewall para atualizações do Windows e, para permitir que o tráfego de rede para os endpoints Microsoft Windows Update possa passar pelo seu firewall. Deploy Azure Firewall usando um template fornece um exemplo para a definição do modelo de recursos Microsoft.Network/azureFirewalls. As regras de firewall comuns às aplicações Service Fabric permitem o seguinte para a rede virtual do seu cluster:

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

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

TLS 1,2

O Microsoft Azure recomenda que todos os clientes façam a migração para soluções que suportem a segurança da camada de transporte (TLS) 1.2 e assegurem que o TLS 1.2 é usado por defeito.

Os serviços Azure, incluindo o Service Fabric, concluíram o trabalho de engenharia para remover a dependência dos protocolos TLS 1.0/1.1 e fornecer suporte total a clientes que queiram configurar as suas cargas de trabalho para aceitar e iniciar apenas ligações TLS 1.2.

Os clientes devem configurar as suas cargas de trabalho alojadas no Azure e as aplicações locais a interagir com os serviços do Azure para usarem o TLS 1.2 por padrão. Aqui está como configurar os nós e aplicações do cluster Service Fabric para usarem uma versão específica do TLS.

Windows Defender

Por defeito, o antivírus Windows Defender está instalado no Windows Server 2016. Para mais detalhes, consulte o Windows Defender Antivirus no Windows Server 2016. A interface de utilizador está instalada por defeito em alguns SKUs, mas não é obrigatória. Para reduzir qualquer impacto de desempenho e sobrecarga no consumo de recursos causada pelo Windows Defender, e se as suas políticas de segurança permitirem excluir processos e caminhos para software open-source, declare as seguintes propriedades do modelo Virtual Scale Set Extension Resource Manager para excluir o seu cluster Service Fabric das varreduras:

 {
    "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

Consulte a sua documentação anti-malware para as regras de configuração se não estiver a usar o Windows Defender. O Windows Defender não é suportado no Linux.

Alojar aplicações não confiáveis num cluster Service Fabric

Um cluster do Service Fabric é um único locatário por design e os aplicativos hospedados são considerados confiáveis. As aplicações têm, portanto, acesso ao tempo de execução do Service Fabric, que se manifesta em diferentes formas, algumas das quais são: variáveis de ambiente que apontam para caminhos de ficheiro no host correspondentes a ficheiros de aplicação e Fabric, caminhos de host montados com acesso de escrita a cargas de trabalho de contentores, um endpoint de comunicação entre processos que aceita pedidos específicos da aplicação, e o certificado do cliente que o Fabric espera que a aplicação use para se autenticar.

Se está a considerar alojar aplicações não confiáveis, deve tomar medidas adicionais para definir e gerir o ambiente hostil de multi-inquilino do seu cluster Service Fabric. Isto exigirá que considere múltiplos aspetos, no contexto do seu cenário, incluindo, mas não se limitando a, os seguintes:

  • Uma revisão de segurança minuciosa das interações das aplicações não confiáveis com outras aplicações, o próprio cluster e a infraestrutura de computação subjacente.
  • Utilização da tecnologia de sandboxing mais potente aplicável (por exemplo, modos de isolamento apropriados para cargas de trabalho de contentores).
  • Avaliação de risco das aplicações não confiáveis que escapam à tecnologia sandboxing, já que o próximo limite de confiança e segurança é o próprio cluster.
  • Remoção do acesso das aplicações não confiáveis ao tempo de execução do Service Fabric.

RemoveServiceFabricRuntimeAccess

O acesso ao tempo de execução do Service Fabric pode ser removido usando a seguinte declaração na secção de Políticas do manifesto da aplicação:

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

Próximos passos