Fundamentação Teórica: Configure Encryption at Host for Azure Virtual Machines
1. Intuição Inicial
Imagine que você tem um servidor físico em um datacenter. Os dados no disco estão criptografados. Mas quando o servidor lê esses dados para processá-los, eles passam por uma área de armazenamento temporário no próprio servidor físico, chamada de cache, antes de chegarem à CPU. Essa área temporária pode ficar em texto claro (não criptografado), mesmo que o disco principal esteja criptografado.
No Azure, o mesmo cenário existe. Uma VM tem seu disco criptografado, mas o servidor físico (o host) que hospeda aquela VM tem áreas de cache e armazenamento temporário onde dados podem existir momentaneamente sem criptografia.
Encryption at Host resolve exatamente esse ponto cego: garante que todos os dados associados a uma VM sejam criptografados mesmo no host físico do Azure, cobrindo o cache de discos de SO e dados, discos temporários e fluxos de dados em cache, formando uma proteção de criptografia de ponta a ponta completa.
É a diferença entre criptografar apenas o cofre e criptografar também a mesa onde o cofre é aberto.
2. Contexto
O panorama de criptografia de discos no Azure
Para entender Encryption at Host, é necessário primeiro entender as outras formas de criptografia de disco no Azure:
SSE (Storage Service Encryption) é automática e cobre os dados em repouso nos discos gerenciados, mas não cobre o cache do host físico onde a VM roda.
Azure Disk Encryption (ADE) criptografa dentro da VM usando BitLocker (Windows) ou DM-Crypt (Linux), mas não elimina a lacuna do host para discos temporários e cache.
Encryption at Host fecha a lacuna: aplica criptografia diretamente no host físico antes que qualquer dado seja escrito no armazenamento do Azure Storage, cobrindo o que as outras opções deixam descoberto.
Por que Encryption at Host existe
A lacuna técnica que motiva o Encryption at Host é o seguinte: discos gerenciados têm criptografia SSE por padrão, mas antes dos dados serem gravados de volta ao armazenamento, eles passam pelo cache do host (RAM ou NVMe temporário no servidor físico). Esse cache pode não estar criptografado, criando uma janela onde dados sensíveis ficam expostos no hardware do Azure.
Para cargas de trabalho com requisitos de compliance como PCI-DSS, HIPAA ou ISO 27001, esta lacuna é inaceitável. Encryption at Host garante que não há nenhum ponto no ciclo de vida dos dados onde eles existam sem criptografia, mesmo no hardware físico do Azure.
3. Construção dos Conceitos
3.1 O que é o "host" no contexto do Azure
No Azure, suas VMs rodam em servidores físicos chamados de hosts (ou nós físicos). Esses hosts são máquinas de alta densidade que hospedam múltiplas VMs de clientes diferentes, com isolamento por hypervisor (Hyper-V).
O host físico tem seus próprios componentes de hardware, incluindo:
- Cache de disco: área de armazenamento temporário de alta velocidade para dados de discos gerenciados
- Disco temporário (Temp Disk): um disco efêmero presente em muitos SKUs de VM, não persistente, que existe apenas no host local
Esses componentes ficam fora do escopo da criptografia SSE padrão e do ADE.
3.2 O que Encryption at Host criptografa especificamente
Com Encryption at Host habilitado:
- Cache dos discos de SO e dados: criptografado com chaves PMK (Platform Managed Keys) ou CMK (Customer Managed Keys)
- Disco temporário: criptografado com PMK ou CMK (quando configurado com CMK, requer Disk Encryption Set)
- Fluxos de dados em cache: o pipeline completo de dados é criptografado
3.3 Chaves de criptografia: PMK vs. CMK
Platform Managed Keys (PMK): chaves geradas, armazenadas e gerenciadas completamente pela Microsoft. O cliente não tem acesso ou controle sobre as chaves. É o modo padrão.
Customer Managed Keys (CMK): chaves geradas e armazenadas pelo cliente no Azure Key Vault ou Azure Managed HSM. O cliente controla o ciclo de vida das chaves (rotação, revogação, expiração). Requer um Disk Encryption Set como intermediário.
3.4 Disk Encryption Set
O Disk Encryption Set é um recurso ARM que serve como intermediário entre os discos gerenciados (e Encryption at Host) e o Key Vault. Ele:
- Recebe uma identidade gerenciada (System-assigned Managed Identity)
- Essa identidade recebe permissão de
Get,WrapKey,UnwrapKeyno Key Vault - Os discos usam o Disk Encryption Set para acessar as chaves do Key Vault
3.5 Pré-requisito: registrar o feature no subscription
Antes de usar Encryption at Host, o feature precisa ser registrado na subscription:
az feature register \
--name EncryptionAtHost \
--namespace Microsoft.Compute
Isso é diferente de outros recursos: Encryption at Host requer um opt-in explícito no nível da subscription antes de poder ser habilitado nas VMs.
3.6 Suporte por SKU de VM
Encryption at Host não é suportado em todos os SKUs de VM. Os SKUs sem suporte incluem alguns tipos mais antigos ou de capacidade básica:
- Não suportados: série B (Burstable), série A (básico), Lsv2 algumas versões
- Suportados: Dsv3, Dsv4, Esv3, Esv4, Fsv2, M-series, e a maioria dos SKUs modernos
Para verificar se um SKU específico suporta Encryption at Host:
az vm list-skus \
--location "brazilsouth" \
--resource-type virtualMachines \
--query "[?capabilities[?name=='EncryptionAtHostSupported' && value=='True']].name" \
--output table
4. Visão Estrutural
Comparação de cobertura entre métodos de criptografia
Fluxo de dados com Encryption at Host habilitado
O ponto crítico é que a criptografia e descriptografia ocorrem no host físico, não dentro da VM. A VM em si opera com dados em texto claro (como sempre fez), mas o host nunca mantém dados em claro fora do escopo da VM.
5. Funcionamento na Prática
Ciclo de habilitação de Encryption at Host
Comportamentos não óbvios
Habilitar em VM existente requer desalocação. Não é possível habilitar Encryption at Host em uma VM em execução. A VM deve ser stopped (deallocated), não apenas parada. "Stopped" no Azure não libera o hardware; apenas "deallocated" libera o host físico e permite a reconfiguração.
O disco temporário não é persistente, mas pode conter dados sensíveis. O disco temporário (D: no Windows, /dev/sdb em muitas distros Linux) é recriado a cada alocação da VM. Sem Encryption at Host, dados deixados nele podem potencialmente ser acessados se o host físico for reutilizado por outra VM do mesmo ou de outro cliente (embora o Azure zere a memória entre alocações). Com EoH, esses dados estão criptografados mesmo no host.
Encryption at Host não substitui Azure Disk Encryption. São complementares. ADE criptografa dentro da VM (proteção contra acesso ao arquivo VHD) enquanto EoH criptografa no host (proteção contra acesso ao hardware físico). Usar ambos é o nível mais alto de proteção disponível fora de Confidential Computing.
Combinação com ADE tem considerações específicas. Quando ADE e EoH são usados juntos, o disco de SO é duplamente criptografado: primeiro pelo ADE (dentro da VM) e depois pelo EoH (no host). O disco temporário, que ADE não criptografa nativamente no Linux, passa a ser coberto pelo EoH.
Discos Ultra e Premium SSD v2 têm comportamento diferente. Para esses tipos de disco, Encryption at Host se comporta como SSE com CMK para o cache, mas a implementação pode variar. Verifique a documentação mais recente para detalhes específicos de cada tipo de disco.
6. Formas de Implementação
Portal do Azure
Quando usar: configuração manual de VMs individuais, verificação visual
Para nova VM:
- Portal > Virtual Machines > + Create
- Aba Disks
- Seção Encryption > habilitar Encryption at host
- Se usando CMK: selecionar Key management e escolher o Disk Encryption Set
- Concluir a criação normalmente
Para VM existente (deve estar desalocada):
- Stop VM (garantir que está Deallocated, não apenas Stopped)
- Portal > VM > Disks > Additional settings
- Habilitar Encryption at host
- Save
- Iniciar a VM
Limitação: não reproduzível, sem controle de versão.
Azure CLI
# Passo 1: Verificar e registrar o feature na subscription
az feature show \
--name EncryptionAtHost \
--namespace Microsoft.Compute \
--query "properties.state" \
--output tsv
# Se não estiver "Registered":
az feature register \
--name EncryptionAtHost \
--namespace Microsoft.Compute
# Aguardar registro (pode levar alguns minutos)
az feature show \
--name EncryptionAtHost \
--namespace Microsoft.Compute
# Após registro, propagar para o resource provider
az provider register --namespace Microsoft.Compute
# Passo 2: Verificar se o SKU suporta EoH
az vm list-skus \
--location "brazilsouth" \
--resource-type virtualMachines \
--query "[?name=='Standard_D4s_v5'].capabilities[?name=='EncryptionAtHostSupported'].value" \
--output tsv
# Passo 3a: Criar VM com EoH habilitado (PMK - Platform Managed Keys)
az vm create \
--resource-group "rg-vms-seguras" \
--name "vm-prod-001" \
--image "Win2022Datacenter" \
--size "Standard_D4s_v5" \
--encryption-at-host \
--admin-username "azureadmin" \
--admin-password "<senha-segura>" \
--location "brazilsouth"
# Passo 3b: Criar VM com EoH habilitado e CMK (Customer Managed Keys)
# Primeiro criar Key Vault e Disk Encryption Set
# Criar Key Vault com purge protection (obrigatório para CMK em discos)
az keyvault create \
--name "kv-disk-encryption" \
--resource-group "rg-vms-seguras" \
--location "brazilsouth" \
--enable-purge-protection true \
--sku premium
# Criar chave no Key Vault
az keyvault key create \
--vault-name "kv-disk-encryption" \
--name "disk-encryption-key" \
--protection software \
--kty RSA \
--size 4096
KEY_URL=$(az keyvault key show \
--vault-name "kv-disk-encryption" \
--name "disk-encryption-key" \
--query "key.kid" --output tsv)
KV_ID=$(az keyvault show \
--name "kv-disk-encryption" \
--resource-group "rg-vms-seguras" \
--query "id" --output tsv)
# Criar Disk Encryption Set
az disk-encryption-set create \
--name "des-prod" \
--resource-group "rg-vms-seguras" \
--location "brazilsouth" \
--key-url "$KEY_URL" \
--source-vault "$KV_ID" \
--encryption-type EncryptionAtRestWithCustomerKey
# Dar permissão ao Disk Encryption Set no Key Vault
DES_IDENTITY=$(az disk-encryption-set show \
--name "des-prod" \
--resource-group "rg-vms-seguras" \
--query "identity.principalId" --output tsv)
az keyvault set-policy \
--name "kv-disk-encryption" \
--object-id "$DES_IDENTITY" \
--key-permissions get wrapKey unwrapKey
DES_ID=$(az disk-encryption-set show \
--name "des-prod" \
--resource-group "rg-vms-seguras" \
--query "id" --output tsv)
# Criar VM com EoH + CMK
az vm create \
--resource-group "rg-vms-seguras" \
--name "vm-prod-cmk-001" \
--image "Ubuntu2204" \
--size "Standard_D4s_v5" \
--encryption-at-host \
--os-disk-encryption-set "$DES_ID" \
--admin-username "azureadmin" \
--ssh-key-values ~/.ssh/id_rsa.pub \
--location "brazilsouth"
# Passo 4: Habilitar EoH em VM existente (deve estar desalocada)
# Desalocar a VM primeiro
az vm deallocate \
--resource-group "rg-vms-seguras" \
--name "vm-existente"
# Habilitar Encryption at Host
az vm update \
--resource-group "rg-vms-seguras" \
--name "vm-existente" \
--set securityProfile.encryptionAtHost=true
# Iniciar a VM novamente
az vm start \
--resource-group "rg-vms-seguras" \
--name "vm-existente"
# Verificar se EoH está habilitado
az vm show \
--resource-group "rg-vms-seguras" \
--name "vm-prod-001" \
--query "securityProfile.encryptionAtHost" \
--output tsv
# Desabilitar EoH (também requer desalocação)
az vm deallocate \
--resource-group "rg-vms-seguras" \
--name "vm-prod-001"
az vm update \
--resource-group "rg-vms-seguras" \
--name "vm-prod-001" \
--set securityProfile.encryptionAtHost=false
az vm start \
--resource-group "rg-vms-seguras" \
--name "vm-prod-001"
Azure PowerShell
# Verificar registro do feature
Get-AzProviderFeature `
-FeatureName "EncryptionAtHost" `
-ProviderNamespace "Microsoft.Compute"
# Registrar se necessário
Register-AzProviderFeature `
-FeatureName "EncryptionAtHost" `
-ProviderNamespace "Microsoft.Compute"
# Verificar suporte no SKU
Get-AzVMSize -Location "brazilsouth" |
Where-Object { $_.Name -eq "Standard_D4s_v5" } |
Select-Object Name
# Criar VM com EoH via PowerShell
$vmConfig = New-AzVMConfig -VMName "vm-prod-001" -VMSize "Standard_D4s_v5"
# Habilitar EoH no config
$vmConfig = Set-AzVMSecurityProfile `
-VM $vmConfig `
-EncryptionAtHost $true
$cred = Get-Credential -Message "Admin credentials"
$vmConfig = Set-AzVMOperatingSystem `
-VM $vmConfig `
-Windows `
-ComputerName "vm-prod-001" `
-Credential $cred
$vmConfig = Set-AzVMSourceImage `
-VM $vmConfig `
-PublisherName "MicrosoftWindowsServer" `
-Offer "WindowsServer" `
-Skus "2022-Datacenter" `
-Version "latest"
$vmConfig = Add-AzVMNetworkInterface `
-VM $vmConfig `
-Id $nicId
New-AzVM `
-ResourceGroupName "rg-vms-seguras" `
-Location "brazilsouth" `
-VM $vmConfig
# Habilitar em VM existente
Stop-AzVM `
-ResourceGroupName "rg-vms-seguras" `
-Name "vm-existente" `
-Force
Update-AzVM `
-ResourceGroupName "rg-vms-seguras" `
-VM (Get-AzVM -ResourceGroupName "rg-vms-seguras" -Name "vm-existente") `
-EncryptionAtHost $true
Start-AzVM `
-ResourceGroupName "rg-vms-seguras" `
-Name "vm-existente"
# Verificar status
(Get-AzVM -ResourceGroupName "rg-vms-seguras" -Name "vm-prod-001").SecurityProfile.EncryptionAtHost
Bicep
// Disk Encryption Set para CMK
resource diskEncryptionSet 'Microsoft.Compute/diskEncryptionSets@2022-07-02' = {
name: 'des-prod'
location: 'brazilsouth'
identity: {
type: 'SystemAssigned' // Managed Identity para acessar Key Vault
}
properties: {
encryptionType: 'EncryptionAtRestWithCustomerKey'
activeKey: {
keyUrl: keyVaultKeyUri
sourceVault: {
id: keyVaultId
}
}
}
}
// VM com Encryption at Host habilitado
resource vm 'Microsoft.Compute/virtualMachines@2023-03-01' = {
name: 'vm-prod-001'
location: 'brazilsouth'
properties: {
hardwareProfile: {
vmSize: 'Standard_D4s_v5'
}
securityProfile: {
encryptionAtHost: true // Habilita Encryption at Host
}
storageProfile: {
imageReference: {
publisher: 'MicrosoftWindowsServer'
offer: 'WindowsServer'
sku: '2022-Datacenter'
version: 'latest'
}
osDisk: {
name: 'vm-prod-001-osdisk'
createOption: 'FromImage'
managedDisk: {
storageAccountType: 'Premium_LRS'
// Se usando CMK, adicionar diskEncryptionSet
diskEncryptionSet: {
id: diskEncryptionSet.id
}
}
}
dataDisks: [
{
lun: 0
name: 'vm-prod-001-datadisk'
createOption: 'Empty'
diskSizeGB: 128
managedDisk: {
storageAccountType: 'Premium_LRS'
diskEncryptionSet: {
id: diskEncryptionSet.id
}
}
}
]
}
osProfile: {
computerName: 'vm-prod-001'
adminUsername: adminUsername
adminPassword: adminPassword
}
networkProfile: {
networkInterfaces: [
{
id: nic.id
}
]
}
}
}
7. Controle e Segurança
Azure Policy para enforçar Encryption at Host
Para garantir que todas as VMs criadas na organização tenham Encryption at Host habilitado, use Azure Policy:
# Built-in policy: "Virtual machines should encrypt temp disks, caches, and data flows"
# Policy ID: 0961003e-5a0a-4549-abde-af6a37f2724d
az policy assignment create \
--name "enforce-encryption-at-host" \
--display-name "VMs must have Encryption at Host enabled" \
--policy "0961003e-5a0a-4549-abde-af6a37f2724d" \
--scope "/subscriptions/<sub-id>" \
--params '{"effect": {"value": "Deny"}}'
Com essa policy como Deny, qualquer tentativa de criar uma VM sem EoH será bloqueada.
Auditoria de VMs sem Encryption at Host
# Listar todas as VMs sem Encryption at Host habilitado
az graph query -q "
Resources
| where type == 'microsoft.compute/virtualmachines'
| where isnull(properties.securityProfile.encryptionAtHost) or properties.securityProfile.encryptionAtHost == false
| project name, resourceGroup, location, subscriptionId"
# Via CLI em uma subscription
az vm list \
--query "[?securityProfile.encryptionAtHost != true].{Name:name, RG:resourceGroup, EoH:securityProfile.encryptionAtHost}" \
--output table
Rotação de chaves CMK
Para Customer Managed Keys, a rotação regular é uma prática de segurança obrigatória:
# Criar nova versão da chave no Key Vault
az keyvault key rotate \
--vault-name "kv-disk-encryption" \
--name "disk-encryption-key"
# Obter URL da nova versão
NEW_KEY_URL=$(az keyvault key show \
--vault-name "kv-disk-encryption" \
--name "disk-encryption-key" \
--query "key.kid" --output tsv)
# Atualizar Disk Encryption Set com nova versão da chave
az disk-encryption-set update \
--name "des-prod" \
--resource-group "rg-vms-seguras" \
--key-url "$NEW_KEY_URL"
# O Azure automaticamente re-criptografa os discos com a nova chave
# (processo assíncrono, leva alguns minutos)
8. Tomada de Decisão
Quando usar cada abordagem de criptografia
| Situação | Solução | Motivo |
|---|---|---|
| Requisito básico de compliance (dados em repouso) | SSE padrão (automático) | Já habilitado por padrão, sem configuração adicional |
| Dados sensíveis com requisito de não exposição no host | Encryption at Host (PMK) | Cobre lacuna do cache do host sem complexidade de CMK |
| Compliance máximo (PCI-DSS Level 1, HIPAA, GDPR) | Encryption at Host + CMK | Controle total sobre chaves + cobertura completa |
| Proteção dentro da VM também (acesso ao VHD) | ADE + Encryption at Host | ADE protege dentro da VM, EoH protege no host |
| Necessidade de revogar acesso imediatamente a todos os dados | CMK (desabilitar chave no Key Vault) | Revogar CMK torna todos os dados inacessíveis instantaneamente |
| VM efêmera de curta duração (< 1 hora) | SSE padrão pode ser suficiente | O risco é menor; avaliar requisito de compliance específico |
PMK vs. CMK para Encryption at Host
| Aspecto | PMK (Platform Managed) | CMK (Customer Managed) |
|---|---|---|
| Controle sobre chaves | Nenhum | Total |
| Complexidade operacional | Mínima | Requer Key Vault, Disk Encryption Set, IAM |
| Rotação de chaves | Automática pela Microsoft | Manual ou automática via Key Vault |
| Custo adicional | Nenhum | Key Vault Premium + operações de chave |
| Revogação de emergência | Não disponível | Sim (desabilitar chave no Key Vault) |
| Requisito de compliance | Maioria dos cenários | PCI-DSS, HIPAA, requisitos governamentais |
9. Boas Práticas
Habilite Encryption at Host em todas as VMs de produção por padrão. O overhead de performance é mínimo (praticamente imperceptível para a maioria dos workloads) e o ganho de segurança é significativo. Use Azure Policy com efeito Deny para garantir que nenhuma VM de produção seja criada sem EoH.
Registre o feature na subscription antes de precisar, não no momento do deploy.
O registro do feature EncryptionAtHost é assíncrono e pode levar alguns minutos. Em pipelines de deploy automatizados, esse delay pode causar falhas se o feature não estiver registrado. Registre com antecedência como parte do processo de provisioning de novas subscriptions.
Use CMK apenas quando há real necessidade de controle de chaves. CMK adiciona complexidade operacional significativa: Key Vault precisa de purge protection, Disk Encryption Set precisa de permissões corretas, rotação de chaves precisa ser gerenciada. Para a maioria dos cenários, PMK com EoH é suficiente. Use CMK apenas quando compliance exigir controle de chaves pelo cliente.
Se usar CMK, habilite soft delete e purge protection no Key Vault. Esses são pré-requisitos para usar Key Vault com CMK em discos. Soft delete retém chaves deletadas por um período (padrão 90 dias), e purge protection impede a exclusão permanente antes do período expirar. Sem purge protection, você poderia acidentalmente tornar VMs inacessíveis.
Verifique o SKU antes de planejar EoH.
Não assuma que todos os SKUs suportam EoH. Valide com az vm list-skus antes de commitar a arquitetura. Isso é especialmente importante ao migrar VMs legadas para novos SKUs.
Para VMs existentes, planeje a janela de manutenção. Habilitar EoH requer desalocação da VM. Para VMs críticas, coordene uma janela de manutenção. A VM ficará indisponível por alguns minutos durante a desalocação, habilitação e inicialização.
10. Erros Comuns
| Erro | Por que acontece | Como evitar |
|---|---|---|
| Falha na criação de VM com EoH: "EncryptionAtHost not registered" | Feature não registrado na subscription | Registrar o feature antes de criar qualquer VM com EoH |
| Falha na criação: "SKU does not support EncryptionAtHost" | SKU incompatível selecionado | Verificar suporte do SKU antes do deploy |
| VM não pode ser atualizada para habilitar EoH sem desalocação | VM em execução, tentativa sem deallocate | Sempre deallocate antes de habilitar/desabilitar EoH |
| Disk Encryption Set sem permissão no Key Vault | Managed Identity não configurada corretamente | Verificar role assignment do DES no Key Vault após criação |
| Confundir EoH com ADE | Nomes similares, funções diferentes | EoH: criptografia no host físico; ADE: criptografia dentro da VM com BitLocker/DM-Crypt |
| Key Vault sem purge protection falhando para CMK | Requisito obrigatório não atendido | Habilitar purge protection na criação do Key Vault |
| Assumir que EoH substitui ADE | Falta de compreensão das camadas | São complementares; EoH não criptografa dentro da VM |
O erro mais crítico
Criar VMs de produção sem registrar o feature de EoH na subscription e sem policy que enforçe isso. O resultado é uma frota de VMs que parece estar em conformidade (SSE ativo) mas tem a lacuna do cache do host exposta. Em uma auditoria de compliance, essa lacuna pode resultar em não conformidade com requisitos como PCI-DSS.
11. Operação e Manutenção
Monitorar status de EoH em toda a organização
# Resource Graph: todas as VMs com/sem EoH em toda a organização
az graph query -q "
Resources
| where type == 'microsoft.compute/virtualmachines'
| extend eohEnabled = tobool(properties.securityProfile.encryptionAtHost)
| summarize count() by eohEnabled
| order by eohEnabled desc"
# Listar VMs específicas sem EoH por subscription
az graph query -q "
Resources
| where type == 'microsoft.compute/virtualmachines'
| where isnull(properties.securityProfile.encryptionAtHost)
or properties.securityProfile.encryptionAtHost == false
| project name, resourceGroup, location, subscriptionId, vmSize=properties.hardwareProfile.vmSize
| order by subscriptionId, resourceGroup"
# Verificar conformidade via Azure Policy
az policy state list \
--policy-assignment "enforce-encryption-at-host" \
--filter "complianceState eq 'NonCompliant'" \
--query "[].{VM: resourceId, Estado: complianceState}" \
--output table
Verificar status de re-criptografia após rotação de CMK
# Verificar se discos estão usando a versão mais recente da chave
az disk list \
--resource-group "rg-vms-seguras" \
--query "[?encryption.diskEncryptionSetId!=null].{Name:name, KeyVersion:encryption.diskEncryptionSetId}" \
--output table
# Verificar status de migration do Disk Encryption Set
az disk-encryption-set show \
--name "des-prod" \
--resource-group "rg-vms-seguras" \
--query "provisioningState"
Limites e considerações
| Aspecto | Valor/Detalhe |
|---|---|
| SKUs suportados | Maioria dos SKUs modernos (verificar por região) |
| Overhead de performance | Mínimo (~1-3% em workloads I/O intensivos) |
| Compatibilidade com ADE | Pode ser usado em conjunto |
| Compatibilidade com Azure Spot VMs | Suportado |
| Compatibilidade com Scale Sets | Suportado (definir na policy do Scale Set) |
| Disponibilidade por região | Verificar: algumas regiões podem não suportar todos os SKUs |
12. Integração e Automação
Habilitar EoH em Scale Sets
resource vmss 'Microsoft.Compute/virtualMachineScaleSets@2023-03-01' = {
name: 'vmss-prod'
location: 'brazilsouth'
properties: {
virtualMachineProfile: {
securityProfile: {
encryptionAtHost: true // EoH para todas as VMs do Scale Set
}
storageProfile: {
imageReference: {
publisher: 'Canonical'
offer: '0001-com-ubuntu-server-jammy'
sku: '22_04-lts-gen2'
version: 'latest'
}
osDisk: {
createOption: 'FromImage'
managedDisk: {
storageAccountType: 'Premium_LRS'
}
}
}
}
}
}
Azure Policy Initiative para segurança de VMs
# Criar initiative que combina múltiplas policies de segurança de VM
az policy set-definition create \
--name "vm-security-baseline" \
--display-name "VM Security Baseline" \
--definitions '[
{
"policyDefinitionId": "/providers/Microsoft.Authorization/policyDefinitions/0961003e-5a0a-4549-abde-af6a37f2724d",
"policyDefinitionReferenceId": "encryption-at-host"
},
{
"policyDefinitionId": "/providers/Microsoft.Authorization/policyDefinitions/2b66f9f6-c26a-4e3f-ae73-2e2b13e53d35",
"policyDefinitionReferenceId": "azure-disk-encryption"
}
]' \
--params '{}'
# Atribuir initiative na subscription
az policy assignment create \
--name "vm-security-baseline-assignment" \
--policy-set-definition "vm-security-baseline" \
--scope "/subscriptions/<sub-id>"
Automação de habilitação em massa
# Habilitar EoH em todas as VMs de um Resource Group (com janela de manutenção)
$vms = Get-AzVM -ResourceGroupName "rg-producao"
foreach ($vm in $vms) {
if (-not $vm.SecurityProfile.EncryptionAtHost) {
Write-Output "Habilitando EoH em: $($vm.Name)"
# Desalocar
Stop-AzVM -ResourceGroupName $vm.ResourceGroupName -Name $vm.Name -Force
# Habilitar EoH
$vm.SecurityProfile = New-Object Microsoft.Azure.Management.Compute.Models.SecurityProfile
$vm.SecurityProfile.EncryptionAtHost = $true
Update-AzVM -ResourceGroupName $vm.ResourceGroupName -VM $vm
# Iniciar
Start-AzVM -ResourceGroupName $vm.ResourceGroupName -Name $vm.Name
Write-Output "EoH habilitado e VM reiniciada: $($vm.Name)"
} else {
Write-Output "EoH já habilitado: $($vm.Name)"
}
}
13. Resumo Final
Pontos essenciais:
- Encryption at Host criptografa dados no host físico Azure antes de qualquer escrita em storage, cobrindo o cache de discos de SO e dados e o disco temporário
- SSE padrão não cobre o cache do host; EoH preenche essa lacuna, criando criptografia de ponta a ponta
- Requer registro do feature
EncryptionAtHostna subscription antes de uso - Habilitar/desabilitar em VMs existentes requer que a VM esteja deallocated (não apenas parada)
- Suporta PMK (chaves gerenciadas pela Microsoft) ou CMK (chaves gerenciadas pelo cliente via Key Vault + Disk Encryption Set)
- Não é suportado em todos os SKUs de VM; verificar com
az vm list-skus
Diferenças críticas:
- EoH vs. ADE (Azure Disk Encryption): EoH criptografa no host físico (cache, disco temporário); ADE criptografa dentro da VM com BitLocker/DM-Crypt. São complementares, não substitutos
- EoH vs. SSE: SSE é automática no Azure Storage (não cobre host cache); EoH cobre o que SSE deixa descoberto
- PMK vs. CMK: PMK é gerenciado pela Microsoft (simples, sem controle); CMK dá controle total ao cliente mas requer Key Vault com purge protection e Disk Encryption Set
- Stopped vs. Deallocated: para alterar EoH é necessário Deallocated (hardware liberado), não apenas Stopped (VM pausada mas ainda no host)
O que precisa ser lembrado para o AZ-104:
- O feature deve ser registrado com
az feature register --name EncryptionAtHost --namespace Microsoft.Compute - O parâmetro na CLI é
--encryption-at-host - Na ARM/Bicep é
securityProfile.encryptionAtHost: true - Requer VM deallocated para habilitar em VM existente
- O disco temporário (efêmero) é criptografado com EoH mas não é persistente entre desalocações
- Para CMK, o Key Vault obrigatoriamente precisa de
--enable-purge-protection true - A built-in policy que verifica EoH é: "Virtual machines should encrypt temp disks, caches, and data flows between Compute and Storage resources" (ID:
0961003e-5a0a-4549-abde-af6a37f2724d)