Como Criptografar um Managed Disk no Azure com AZ CLI

Como Criptografar um Managed Disk no Azure com AZ CLI

A criptografia de Managed Disk no Azure é uma prática essencial para proteger dados em repouso e atender requisitos de conformidade como LGPD, ISO 27001 e PCI-DSS. Neste tutorial você aprenderá a criptografar um Managed Disk no Azure usando AZ CLI, Azure Key Vault e Disk Encryption Set com chaves gerenciadas pelo cliente (CMK — Customer-Managed Keys).

O que é Managed Disk Encryption?

O Azure oferece dois modelos de criptografia para Managed Disks:
  • SSE com PMK (Platform-Managed Keys) — habilitada por padrão; o Azure gerencia as chaves automaticamente sem configuração adicional.
  • SSE com CMK (Customer-Managed Keys) — você controla as chaves no Azure Key Vault, atendendo requisitos de auditoria, rotação e revogação de acesso.
Neste tutorial usaremos CMK via Disk Encryption Set, o modelo recomendado para ambientes corporativos e regulados.
Arquitetura: VM → Managed Disk → Disk Encryption Set → Key Vault → CMK
Pré-requisitos
  • AZ CLI instalado e atualizado (az upgrade)
  • Conta Azure com permissão de Contributor na subscription
  • Permissão de Key Vault Administrator ou acesso para criar Key Vaults
  • Provider Microsoft.Compute e Microsoft.KeyVault registrados
# Verificar versão do AZ CLI
az version

# Login no Azure
az login

# Registrar os providers necessários
az provider register --namespace Microsoft.Compute
az provider register --namespace Microsoft.KeyVault

# Verificar registro (aguarde o status "Registered")
az provider show --namespace Microsoft.Compute --query "registrationState"
az provider show --namespace Microsoft.KeyVault  --query "registrationState"

Variáveis de Ambiente

Defina todas as variáveis antes de executar os comandos. Isso facilita a reutilização e evita erros de digitação.
# ── Identificação ────────────────────────────────────────────────────────────
SUBSCRIPTION_ID=$(az account show --query id -o tsv)
LOCATION="eastus"

# ── Nomes dos Recursos (padrão blog-castilho) ─────────────────────────────────
RESOURCE_GROUP="rg-blog-castilho"
KEY_VAULT_NAME="kv-blog-castilho"          # Deve ser globalmente único
KEY_NAME="key-blog-castilho"
DES_NAME="des-blog-castilho"               # Disk Encryption Set
DISK_NAME="disk-blog-castilho"
VM_NAME="vm-blog-castilho"

# ── Configurações do Disk ─────────────────────────────────────────────────────
DISK_SIZE_GB=128
DISK_SKU="Premium_LRS"                     # Premium_LRS | Standard_LRS | UltraSSD_LRS

echo "Variáveis definidas com sucesso!"
echo "Subscription: $SUBSCRIPTION_ID"

Passo 1 — Criar o Resource Group

az group create \
  --name "$RESOURCE_GROUP" \
  --location "$LOCATION" \
  --tags \
    projeto="blog-castilho" \
    ambiente="producao" \
    responsavel="jefferson.castilho@outlook.com"

# Verificar criação
az group show --name "$RESOURCE_GROUP" --query "{nome:name, local:location, status:properties.provisioningState}"
Passo 2 — Criar o Key Vault O Azure Key Vault armazenará a chave de criptografia. É obrigatório habilitar --enable-purge-protection para uso com Disk Encryption Set — sem ele o Azure bloqueia a associação.
az keyvault create \
  --name "$KEY_VAULT_NAME" \
  --resource-group "$RESOURCE_GROUP" \
  --location "$LOCATION" \
  --enable-purge-protection true \
  --enable-soft-delete true \
  --soft-delete-retention-days 90 \
  --sku standard \
  --tags \
    projeto="blog-castilho" \
    ambiente="producao"

# Capturar o ID do Key Vault para uso posterior
KEY_VAULT_ID=$(az keyvault show \
  --name "$KEY_VAULT_NAME" \
  --resource-group "$RESOURCE_GROUP" \
  --query id -o tsv)

echo "Key Vault ID: $KEY_VAULT_ID"
⚠️ Atenção: O --enable-purge-protection é irreversível.
Uma vez habilitado, o Key Vault não pode ser excluído permanentemente antes do período de retenção (90 dias). Planeje o ciclo de vida dos recursos antes de aplicar em produção.
Passo 3 — Criar a Chave de Criptografia Crie a chave RSA 4096 que será usada para criptografar o Managed Disk. O Azure suporta os tipos RSA, RSA-HSM, EC e EC-HSM.
az keyvault key create \
  --vault-name "$KEY_VAULT_NAME" \
  --name "$KEY_NAME" \
  --kty RSA \
  --size 4096 \
  --ops wrapKey unwrapKey \
  --protection software

# Capturar a URL da chave (sem versão — para rotação automática)
KEY_URL=$(az keyvault key show \
  --vault-name "$KEY_VAULT_NAME" \
  --name "$KEY_NAME" \
  --query "key.kid" -o tsv)

# Remover a versão da URL para suportar rotação automática de chave
KEY_URL_NO_VERSION=$(echo "$KEY_URL" | sed 's/\/[^/]*$//')

echo "Key URL (sem versão): $KEY_URL_NO_VERSION"

Opção: Usar Key Vault com HSM (Hardware Security Module)

Para ambientes que exigem proteção HSM (FIPS 140-2 Level 3), substitua --kty RSA por --kty RSA-HSM e use um Key Vault Premium:
# Apenas com Key Vault SKU Premium
az keyvault key create \
  --vault-name "$KEY_VAULT_NAME" \
  --name "$KEY_NAME" \
  --kty RSA-HSM \
  --size 4096 \
  --ops wrapKey unwrapKey \
  --protection hsm
Passo 4 — Criar o Disk Encryption Set O Disk Encryption Set é o objeto Azure que vincula a chave do Key Vault aos Managed Disks. Ele possui uma Managed Identity que recebe permissão de acesso à chave.
az disk-encryption-set create \
  --name "$DES_NAME" \
  --resource-group "$RESOURCE_GROUP" \
  --location "$LOCATION" \
  --key-url "$KEY_URL_NO_VERSION" \
  --source-vault "$KEY_VAULT_ID" \
  --encryption-type EncryptionAtRestWithCustomerKey \
  --mi-system-assigned \
  --tags \
    projeto="blog-castilho" \
    ambiente="producao"

# Capturar o ID do Disk Encryption Set
DES_ID=$(az disk-encryption-set show \
  --name "$DES_NAME" \
  --resource-group "$RESOURCE_GROUP" \
  --query id -o tsv)

# Capturar o Principal ID da Managed Identity do DES
DES_PRINCIPAL_ID=$(az disk-encryption-set show \
  --name "$DES_NAME" \
  --resource-group "$RESOURCE_GROUP" \
  --query "identity.principalId" -o tsv)

echo "DES ID: $DES_ID"
echo "DES Principal ID: $DES_PRINCIPAL_ID"

Tipos de Encryption disponíveis

TipoDescriçãoUso
recomendado
EncryptionAtRestWithCustomerKey Somente CMK Conformidade e auditoria
EncryptionAtRestWithPlatformAndCustomerKeys CMK + PMK (dupla camada) Máxima segurança
ConfidentialVmEncryptedWithCustomerKey CMK em Confidential VMs Workloads confidenciais
Passo 5 — Conceder Permissões ao Disk Encryption Set A Managed Identity do Disk Encryption Set precisa de permissão Key Vault Crypto Service Encryption User para acessar a chave. Verifique se o Key Vault usa RBAC ou Access Policy.

Opção A — Key Vault com Azure RBAC (recomendado)

# Verificar se o Key Vault usa RBAC
az keyvault show \
  --name "$KEY_VAULT_NAME" \
  --resource-group "$RESOURCE_GROUP" \
  --query "properties.enableRbacAuthorization"

# Habilitar RBAC no Key Vault (caso ainda não esteja habilitado)
az keyvault update \
  --name "$KEY_VAULT_NAME" \
  --resource-group "$RESOURCE_GROUP" \
  --enable-rbac-authorization true

# Atribuir a role "Key Vault Crypto Service Encryption User" ao DES
az role assignment create \
  --assignee-object-id "$DES_PRINCIPAL_ID" \
  --assignee-principal-type ServicePrincipal \
  --role "Key Vault Crypto Service Encryption User" \
  --scope "$KEY_VAULT_ID"

echo "Permissão RBAC concedida ao Disk Encryption Set!"

Opção B — Key Vault com Access Policy

# Usar quando o Key Vault NÃO está com RBAC habilitado
az keyvault set-policy \
  --name "$KEY_VAULT_NAME" \
  --resource-group "$RESOURCE_GROUP" \
  --object-id "$DES_PRINCIPAL_ID" \
  --key-permissions wrapKey unwrapKey get

echo "Access Policy concedida ao Disk Encryption Set!"
Passo 6 — Criar o Managed Disk Criptografado Com o Disk Encryption Set configurado, crie o Managed Disk vinculando-o ao DES. Todos os dados gravados neste disco serão criptografados automaticamente com a CMK.
az disk create \
  --name "$DISK_NAME" \
  --resource-group "$RESOURCE_GROUP" \
  --location "$LOCATION" \
  --size-gb "$DISK_SIZE_GB" \
  --sku "$DISK_SKU" \
  --disk-encryption-set "$DES_ID" \
  --network-access-policy DenyAll \
  --public-network-access Disabled \
  --tags \
    projeto="blog-castilho" \
    ambiente="producao" \
    criptografia="cmk"

# Capturar o ID do Disk
DISK_ID=$(az disk show \
  --name "$DISK_NAME" \
  --resource-group "$RESOURCE_GROUP" \
  --query id -o tsv)

echo "Managed Disk criado: $DISK_ID"
Passo 7 — Anexar o Disk a uma VM

7.1 — Criar uma VM com o Disk de OS Criptografado

# Criar VM com OS Disk já criptografado com CMK
az vm create \
  --name "$VM_NAME" \
  --resource-group "$RESOURCE_GROUP" \
  --location "$LOCATION" \
  --image "Ubuntu2204" \
  --size "Standard_D2s_v3" \
  --admin-username "azureuser" \
  --generate-ssh-keys \
  --os-disk-encryption-set "$DES_ID" \
  --os-disk-name "osdisk-blog-castilho" \
  --os-disk-size-gb 64 \
  --os-disk-sku "Premium_LRS" \
  --public-ip-sku Standard \
  --tags \
    projeto="blog-castilho" \
    ambiente="producao"

7.2 — Anexar o Data Disk Criptografado a uma VM existente

az vm disk attach \
  --vm-name "$VM_NAME" \
  --resource-group "$RESOURCE_GROUP" \
  --name "$DISK_NAME" \
  --lun 1

echo "Data Disk criptografado anexado à VM!"

Passo 8 — Criptografar um Managed Disk Existente

Caso você já tenha um Managed Disk sem criptografia CMK, é possível associar o Disk Encryption Set a ele com o comando az disk update. O disco precisa estar desanexado da VM ou a VM precisa estar desalocada.
# Variável com o nome do disk existente
DISK_EXISTENTE="disk-existente-blog-castilho"

# Desalocar a VM (se o disk estiver anexado)
az vm deallocate \
  --name "$VM_NAME" \
  --resource-group "$RESOURCE_GROUP"

# Associar o Disk Encryption Set ao disk existente
az disk update \
  --name "$DISK_EXISTENTE" \
  --resource-group "$RESOURCE_GROUP" \
  --disk-encryption-set "$DES_ID"

# Iniciar a VM após a atualização
az vm start \
  --name "$VM_NAME" \
  --resource-group "$RESOURCE_GROUP"

echo "Disk existente atualizado com criptografia CMK!"
Verificar a Criptografia Use os comandos abaixo para confirmar que o Managed Disk está criptografado com a chave CMK correta.
# Verificar configuração de criptografia do Disk
az disk show \
  --name "$DISK_NAME" \
  --resource-group "$RESOURCE_GROUP" \
  --query "{
    nome: name,
    tamanhoGB: diskSizeGb,
    sku: sku.name,
    criptografia: encryption.type,
    diskEncryptionSetId: encryption.diskEncryptionSetId
  }" \
  -o table

# Verificar o Disk Encryption Set
az disk-encryption-set show \
  --name "$DES_NAME" \
  --resource-group "$RESOURCE_GROUP" \
  --query "{
    nome: name,
    tipoEncryptacao: encryptionType,
    keyUrl: activeKey.keyUrl,
    provisioningState: provisioningState
  }" \
  -o table

# Listar todos os disks do Resource Group e seu estado de criptografia
az disk list \
  --resource-group "$RESOURCE_GROUP" \
  --query "[].{Nome:name, Criptografia:encryption.type, DES:encryption.diskEncryptionSetId}" \
  -o table
✅ Resultado esperado: O campo Criptografia deve exibir EncryptionAtRestWithCustomerKey e o campo DES deve conter o ID do des-blog-castilho.
Limpeza dos Recursos Para remover todos os recursos criados neste tutorial e evitar cobranças desnecessárias:
# ATENÇÃO: Este comando remove TODOS os recursos do Resource Group!
az group delete \
  --name "$RESOURCE_GROUP" \
  --yes \
  --no-wait

echo "Resource Group $RESOURCE_GROUP em processo de exclusão."

# Remover o soft-delete do Key Vault após excluir o grupo (se necessário)
az keyvault purge \
  --name "$KEY_VAULT_NAME" \
  --location "$LOCATION"
Troubleshooting — Erros Comuns
ErroCausaSolução
PurgeProtectionMustBeEnabled Key Vault sem purge protection Adicionar --enable-purge-protection true ao criar o Key Vault
KeyVaultAccessForbidden DES sem permissão na chave Verificar role assignment ou access policy do DES no Key Vault
DiskEncryptionSetNotFound DES em outro Resource Group Usar o ID completo do DES (--disk-encryption-set "$DES_ID")
OperationNotAllowed — disk is attached Tentou atualizar disk anexado Desalocar a VM antes de atualizar o disk (az vm deallocate)
LinkedAuthorizationFailed DES e Key Vault em subscriptions diferentes Manter DES e Key Vault na mesma subscription

Conclusão

Neste tutorial você aprendeu como criptografar um Managed Disk no Azure com AZ CLI usando Customer-Managed Keys (CMK). O fluxo completo envolveu:
  1. Criar o Resource Group rg-blog-castilho
  2. Criar o Key Vault kv-blog-castilho com purge protection
  3. Gerar a chave RSA 4096 key-blog-castilho
  4. Criar o Disk Encryption Set des-blog-castilho
  5. Conceder permissões à Managed Identity do DES via RBAC ou Access Policy
  6. Criar ou atualizar Managed Disks com criptografia CMK
  7. Verificar o estado de criptografia via az disk show
A criptografia com CMK garante controle total sobre as chaves, permitindo auditoria, rotação programada e revogação imediata de acesso — requisitos fundamentais em ambientes regulados.
  Interessado em saber mais sobre artigos relacionados ao Microsoft Azure CLIQUE AQUI

🚀 Vamos nos conectar?

Não perca nenhuma oportunidade! Cadastre-se nas minhas redes e no canal do YouTube para receber conteúdos de TI, Cloud, Azure, Kubernetes e DevOps em primeira mão.

Dica: No Facebook, todos os artigos do blog são publicados automaticamente. Vale a pena curtir!


💬 Dúvidas ou Problemas?

Com o intuito de ajudar a comunidade, caso você tenha dúvidas ou encontre problemas na execução dos comandos deste artigo, deixe um comentário abaixo. Responderei o mais breve possível!

Muito obrigado pela visita e até o próximo post!

Jefferson Castilho Especialista em Cloud & DevOps.

Este guia técnico é exclusivo do Blog do Castilho. Explore nossa para mais conteúdos sobre IA e Cloud.

Deixe uma resposta

Rolar para cima