Segurança do Azure Service Fabric

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

Key Vault

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

Nota

Se os certificados/segredos de um Cofre de Chaves forem implantados em um Conjunto de Dimensionamento de Máquina Virtual como um Segredo de Conjunto de Dimensionamento de Máquina Virtual, o Cofre de Chaves e o Conjunto de Dimensionamento de Máquina Virtual deverão ser colocalizados.

Criar certificado do Service Fabric emitido pela autoridade de certificação

Um certificado do Cofre da Chave do Azure pode ser criado ou importado para um Cofre da Chave. Quando um certificado do Cofre da Chave é criado, a chave privada é criada dentro do Cofre da Chave e nunca exposta ao proprietário do certificado. Aqui estão as maneiras de criar um certificado no Cofre da Chave:

  • Crie um certificado autoassinado para criar um par de chaves público-privado e associe-o a um certificado. O certificado será assinado por sua própria chave.
  • Crie um novo certificado manualmente para criar um par de chaves público-privado e gerar uma solicitação 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 mesclado com o par de chaves pendente para concluir o certificado KV no Cofre de Chaves. Embora esse método exija mais etapas, ele fornece maior segurança porque a chave privada é criada e restrita ao Cofre da Chave. Isto é explicado no diagrama abaixo.

Consulte os Métodos de Criação de Certificados do Azure Keyvault para obter detalhes adicionais.

Implantar certificados do Cofre da Chave em conjuntos de dimensionamento de máquinas virtuais de cluster do Service Fabric

Para implantar certificados de um keyvault colocalizado em um Conjunto de Dimensionamento de Máquina Virtual, use o Conjunto de Dimensionamento de Máquina Virtual osProfile. A seguir estão as propriedades do modelo do Gerenciador de Recursos:

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

Nota

O cofre deve estar habilitado para a implantação do modelo do Gerenciador de Recursos.

Aplicar uma Lista de Controle de Acesso (ACL) ao certificado do cluster do Service Fabric

O editor de extensões do Conjunto de Dimensionamento de Máquina Virtual Microsoft.Azure.ServiceFabric é usado para configurar a Segurança dos Nós. Para aplicar uma ACL aos seus certificados para seus processos de Cluster do Service Fabric, use as seguintes propriedades de modelo do Gerenciador de Recursos:

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

Proteger um certificado de cluster do Service Fabric por nome comum

Para proteger seu cluster do Service Fabric por certificado Common Name, use a propriedade de modelo do Gerenciador de Recursos certificateCommonNames, da seguinte maneira:

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

Nota

Os clusters do Service Fabric usarão o primeiro certificado válido encontrado no armazenamento de certificados do host. 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.

Os domínios do Azure, como *<YOUR SUBDOMAIN.cloudapp.azure.com ou <YOUR SUBDOMAIN.trafficmanager.net>>, pertencem à Microsoft. As Autoridades de Certificação não emitirão certificados para domínios para 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 como configurar o DNS do Azure para hospedar seu domínio.

Nota

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

  • Um registro 'A' para APEX de domínio que NÃO é um Alias record set para todos os endereços IP que seu domínio personalizado resolverá.
  • Um registro 'C' para subdomínios da Microsoft provisionados que NÃO são um Alias record setarquivo . Por exemplo, você pode usar o nome DNS do Gerenciador de Tráfego ou do Balanceador de Carga.

Para atualizar seu portal para exibir um nome DNS personalizado para seu Cluster "managementEndpoint"do Service Fabric , atualize as seguintes propriedades do modelo Gerenciador de Recursos de Cluster do Service Fabric:

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

Criptografando valores secretos do pacote do Service Fabric

Os valores comuns criptografados nos Pacotes do Service Fabric incluem credenciais do Registro de Contêiner do Azure (ACR), variáveis de ambiente, configurações e chaves de conta de armazenamento do plug-in do Azure Volume.

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 Cofre de Chaves em conjuntos de dimensionamento de máquina virtual de cluster do Service Fabric para implantar Certificados do Cofre de Chaves nos Conjuntos de Dimensionamento de Máquina Virtual do Cluster do Service Fabric.

Criptografe seu segredo usando o seguinte comando do PowerShell e atualize o manifesto do aplicativo 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 Linux:

Gere um certificado autoassinado para criptografar seus segredos:

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

Use as instruções em Implantar certificados do Cofre da Chave em conjuntos de dimensionamento de máquina virtual de cluster do Service Fabric para os Conjuntos de Dimensionamento de Máquina Virtual do Cluster do Service Fabric.

Criptografe seu segredo usando os seguintes comandos e atualize o manifesto do aplicativo 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 seus valores protegidos, especifique segredos criptografados no Aplicativo Service Fabric e descriptografe segredos criptografados do código de serviço.

Incluir certificado de ponto de extremidade em aplicativos do Service Fabric

Para configurar o certificado de ponto de extremidade do aplicativo, inclua o certificado adicionando um elemento EndpointCertificate junto com o elemento User da conta principal ao manifesto do aplicativo. Por padrão, a conta principal é NetworkService. Isso fornecerá gerenciamento da ACL de chave privada do certificado de aplicativo para a entidade fornecida.

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

Incluir certificado secreto em aplicativos do Service Fabric

Para dar ao seu aplicativo acesso a 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 nos Recursos do Azure usando a Identidade de Serviço Gerenciado (MSI)

Para saber mais sobre identidades gerenciadas para recursos do Azure, consulte O que são identidades gerenciadas para recursos do Azure?. Os clusters do Azure Service Fabric são hospedados em Conjuntos de Escala de Máquina Virtual, que dão suporte à Identidade de Serviço Gerenciado. Para obter uma lista de serviços nos quais o MSI pode ser usado para autenticar, consulte Serviços do Azure que oferecem suporte à autenticação do Microsoft Entra.

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

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

Consulte O que são identidades gerenciadas para recursos do Azure? para obter mais informações.

Se você criou uma identidade gerenciada atribuída pelo usuário, declare o seguinte recurso em seu modelo para atribuí-lo ao seu conjunto de dimensionamento de máquina virtual. Substitua \<USERASSIGNEDIDENTITYNAME\> pelo nome da identidade gerenciada atribuída pelo usuário que você criou:

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

Antes que seu aplicativo do Service Fabric possa usar uma identidade gerenciada, as permissões devem ser concedidas aos Recursos do Azure com os quais ele precisa 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 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']")

Seu aplicativo Service Fabric pode usar o token de acesso para autenticar nos Recursos do Azure que dão suporte ao Ative Directory. O exemplo a seguir mostra como fazer isso para 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 linhas de base de segurança da Microsoft, em vez de criar uma linha de base por conta própria, uma opção para provisioná-las em seus Conjuntos de Escala de Máquina Virtual é usar o manipulador de extensão DSC (Configuração de Estado Desejado) do Azure para configurar as VMs à medida que ficam online, para que elas estejam executando 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 total monitoração de estado como um serviço com elevada disponibilidade incorporada e escalabilidade da cloud sem restrições.; isso permite a capacidade de limitar o tráfego HTTP/S de saída a uma lista especificada de nomes de domínio totalmente qualificados (FQDN), incluindo curingas. Este recurso não requer terminação TLS/SSL. É recomendável que você aproveite as tags FQDN do Firewall do Azure para Atualizações do Windows e para habilitar o tráfego de rede para pontos de extremidade do Microsoft Windows Update possa fluir através do firewall. Implantar o Firewall do Azure usando um modelo fornece um exemplo para a definição de modelo de recurso Microsoft.Network/azureFirewalls. As regras de firewall comuns aos aplicativos do Service Fabric permitem o seguinte para sua rede virtual de clusters:

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

Essas regras de firewall complementam os Grupos de Segurança de Rede de saída permitidos, que incluiriam 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 que ofereçam suporte à segurança da camada de transporte (TLS) 1.2 e para garantir que o TLS 1.2 seja usado por padrão.

Os serviços do 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 completo aos clientes que desejam ter suas cargas de trabalho configuradas para aceitar e iniciar apenas conexões TLS 1.2.

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

Windows Defender

Por padrão, o antivírus do Windows Defender é instalado no Windows Server 2016. Para obter detalhes, consulte Windows Defender Antivírus no Windows Server 2016. A interface do usuário é instalada por padrão em algumas SKUs, mas não é necessária. Para reduzir qualquer impacto no desempenho e sobrecarga de consumo de recursos incorridos pelo Windows Defender e se suas políticas de segurança permitirem excluir processos e caminhos para software de código aberto, declare as seguintes propriedades de modelo do Gerenciador de Recursos de Extensão do Conjunto de Dimensionamento de Máquina Virtual 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
    }
}

Nota

Consulte a documentação do Antimalware para obter as regras de configuração se não estiver a utilizar o Windows Defender. O Windows Defender não é suportado no Linux.

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

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

Se você estiver considerando hospedar aplicativos não confiáveis, deverá executar etapas adicionais para definir e possuir a experiência multilocatária hostil para seu cluster do Service Fabric. Isso exigirá que você considere vários aspetos, no contexto do seu cenário, incluindo, entre outros, os seguintes:

  • Uma análise 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 de sandboxing 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 sandboxing, 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 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 seção Políticas do manifesto do aplicativo:

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

Próximos passos