Usar a CLI do Azure para habilitar a criptografia do lado do servidor com as chaves gerenciadas pelo cliente para discos gerenciados

Aplica-se a: ✔️ VMs do Linux ✔️ VMs do Windows ✔️ Conjuntos de dimensionamento flexíveis ✔️ Conjuntos de dimensionamento uniformes

O Armazenamento em Disco do Azure permite que você gerencie as próprias chaves ao usar a SSE (criptografia do lado do servidor) para discos gerenciados, se você escolher. Para obter informações conceituais sobre a SSE com chaves gerenciadas pelo cliente, bem como outros tipos de criptografia de disco gerenciado, confira a seção Chaves gerenciadas pelo cliente do nosso artigo sobre criptografia de disco.

Restrições

Por enquanto, as chaves gerenciadas pelo cliente têm as seguintes restrições:

  • Se esse recurso estiver habilitado para um disco com instantâneos incrementais, ele não poderá ser desabilitado nesse disco ou em seus instantâneos. Para contornar isso, copie todos os dados para um disco gerenciado totalmente diferente que não use chaves gerenciadas pelo cliente. Você pode fazer isso com a CLI do Azure ou com o módulo do Azure PowerShell.
  • chaves de software e chaves RSA HSM de tamanhos 2.048, 3.072 e 4.096 bits são suportadas. Não são aceitas outras chaves ou tamanhos.
    • As chaves HSM exigem a camada Premium de cofres de chaves do Azure.
  • Somente para Discos Ultra e discos SSD Premium v2:
    • Os instantâneos criados a partir de discos criptografados com criptografia do lado do servidor e chaves gerenciadas pelo cliente devem ser criptografados com as mesmas chaves gerenciadas pelo cliente.
    • Não há suporte para identidades gerenciadas atribuídas pelo usuário em Discos Ultra e discos SSD Premium v2 criptografados com chaves gerenciadas pelo cliente.
    • Atualmente, não há suporte no Azure Governamental ou no Azure China.
  • A maioria dos recursos relacionados às chaves gerenciadas pelo cliente (conjuntos de criptografia de disco, VMs, discos e instantâneos) precisa estar na mesma assinatura e região.
    • Os cofres de chaves do Azure podem ser usados em outra assinatura, mas precisam estar na mesma região do conjunto de criptografia de disco. Com o acesso à versão prévia, você poderá usar os Azure Key Vaults de diferentes locatários do Microsoft Entra.
  • Os discos criptografados com chaves gerenciadas pelo cliente só poderão ser movidos para outro grupo de recursos se a VM à qual estão anexados for desalocada.
  • Os discos, os instantâneos e as imagens criptografadas com chaves gerenciadas pelo cliente não podem ser movidas entre assinaturas.
  • Os discos gerenciados atualmente ou criptografados anteriormente usando Azure Disk Encryption não podem ser criptografados usando chaves gerenciadas pelo cliente.
  • Só é possível criar até 5 mil conjuntos de criptografia de disco por região e assinatura.
  • Para obter informações sobre o uso de chaves gerenciadas pelo cliente com galerias de imagens compartilhadas, confira Preview: Use chaves gerenciadas pelo cliente para criptografar imagens.

Criar recursos

Depois que o recurso estiver habilitado, você precisará configurar um DiskEncryptionSet e um Azure Key Vault ou um HSM Gerenciado do Azure Key Vault.

Cofre de Chave do Azure

  • Instale a CLI do Azure mais recente e faça logon em uma conta do Azure com az login.
  • Criar um Azure Key Vault e uma chave de criptografia.

Ao criar o Key Vault, você deve habilitar a proteção contra limpeza. A proteção de limpeza garante que uma chave excluída não seja excluída permanentemente até que o período de retenção termine. Essas configurações protegem você contra a perda de dados devido à exclusão acidental. Essas configurações são obrigatórias ao usar um Key Vault para criptografar discos gerenciados.

Importante

Não use camelCase na região. Isso pode causar problemas na atribuição de discos adicionais ao recurso no portal do Azure.

subscriptionId=yourSubscriptionID
rgName=yourResourceGroupName
location=westcentralus
keyVaultName=yourKeyVaultName
keyName=yourKeyName
diskEncryptionSetName=yourDiskEncryptionSetName
diskName=yourDiskName

az account set --subscription $subscriptionId

az group create --resource-group $rgName --location $location

az keyvault create -n $keyVaultName \
-g $rgName \
-l $location \
--enable-purge-protection true 

az keyvault key create --vault-name $keyVaultName \
-n $keyName \
--protection software
  • Criar um DiskEncryptionSet. Você pode definir “enable-auto-key-rotation” como “true” para habilitar a rotação automática da chave. Quando você habilita a rotação automática, o sistema atualiza automaticamente todos os discos gerenciados, instantâneos e imagens que fazem referência ao conjunto de criptografia de disco para usar a nova versão da chave em uma hora.
keyVaultKeyUrl=$(az keyvault key show --vault-name $keyVaultName --name $keyName --query [key.kid] -o tsv)

az disk-encryption-set create -n $diskEncryptionSetName \
-l $location \
-g $rgName \
--key-url $keyVaultKeyUrl \
--enable-auto-key-rotation false
  • Conceda o acesso ao recurso DiskEncryptionSet para o Key Vault.

Observação

Pode levar alguns minutos para o Azure criar a identidade do DiskEncryptionSet no seu Microsoft Entra ID. Se você receber um erro como "não é possível encontrar o objeto Active Directory" ao executar o comando a seguir, aguarde alguns minutos e tente novamente.

desIdentity=$(az disk-encryption-set show -n $diskEncryptionSetName -g $rgName --query [identity.principalId] -o tsv)

az keyvault set-policy -n $keyVaultName \
-g $rgName \
--object-id $desIdentity \
--key-permissions wrapkey unwrapkey get

Sobre o HSM Gerenciado do Azure Key Vault

Como alternativa, você pode usar um HSM gerenciado para lidar com as chaves.

Para isso, conclua os pré-requisitos a seguir:

Configuração

Depois de criar um HSM gerenciado e adicionar permissões, habilite a proteção contra limpeza e crie uma chave de criptografia.

subscriptionId=yourSubscriptionID
rgName=yourResourceGroupName
location=westcentralus
keyVaultName=yourKeyVaultName
keyName=yourKeyName
diskEncryptionSetName=yourDiskEncryptionSetName
diskName=yourDiskName
    
az account set --subscription $subscriptionId
    
az keyvault update-hsm --subscription $subscriptionId -g $rgName --hsm-name $keyVaultName --enable-purge-protection true
    
az keyvault key create --hsm-name  $keyVaultName --name $keyName --ops wrapKey unwrapKey --kty RSA-HSM --size 2048

Depois crie um DiskEncryptionSet.

keyVaultKeyUrl=$(az keyvault key show --vault-name $keyVaultName --name $keyName --query [key.kid] -o tsv)
    
az disk-encryption-set create -n $diskEncryptionSetName \
-l $location \
-g $rgName \
--key-url $keyVaultKeyUrl \
--enable-auto-key-rotation false

Por fim, permita que o DiskEncryptionSet acesse o HSM gerenciado.

desIdentity=$(az disk-encryption-set show -n $diskEncryptionSetName -g $rgName --query [identity.principalId] -o tsv)
    
az keyvault role assignment create --hsm-name $keyVaultName --role "Managed HSM Crypto Service Encryption User" --assignee $desIdentity --scope /keys

Agora que você criou e configurou esses recursos, pode usá-los para proteger seus discos gerenciados. Os seguintes links contém scripts de exemplo, cada um com um cenário respectivo, que você pode usar para proteger seus discos gerenciados.

Exemplos

Crie uma VM usando uma imagem do Marketplace, criptografando o sistema operacional e os discos de dados com chaves gerenciadas pelo cliente

rgName=yourResourceGroupName
vmName=yourVMName
location=westcentralus
vmSize=Standard_DS3_V2
image=LinuxImageURN
diskEncryptionSetName=yourDiskencryptionSetName

diskEncryptionSetId=$(az disk-encryption-set show -n $diskEncryptionSetName -g $rgName --query [id] -o tsv)

az vm create -g $rgName -n $vmName -l $location --image $image --size $vmSize --generate-ssh-keys --os-disk-encryption-set $diskEncryptionSetId --data-disk-sizes-gb 128 128 --data-disk-encryption-sets $diskEncryptionSetId $diskEncryptionSetId

Criptografe os discos gerenciados existentes

Os discos existentes não devem ser anexados a uma VM em execução para que você possa criptografá-los usando o seguinte script:

rgName=yourResourceGroupName
diskName=yourDiskName
diskEncryptionSetName=yourDiskEncryptionSetName

az disk update -n $diskName -g $rgName --encryption-type EncryptionAtRestWithCustomerKey --disk-encryption-set $diskEncryptionSetId

Crie um conjunto de dimensionamento de máquinas virtuais usando uma imagem do Marketplace, criptografando o sistema operacional e os discos de dados com chaves gerenciadas pelo cliente

rgName=yourResourceGroupName
vmssName=yourVMSSName
location=westcentralus
vmSize=Standard_DS3_V2
image=LinuxImageURN
diskEncryptionSetName=yourDiskencryptionSetName

diskEncryptionSetId=$(az disk-encryption-set show -n $diskEncryptionSetName -g $rgName --query [id] -o tsv)
az vmss create -g $rgName -n $vmssName --image $image --upgrade-policy automatic --admin-username azureuser --generate-ssh-keys --os-disk-encryption-set $diskEncryptionSetId --data-disk-sizes-gb 64 128 --data-disk-encryption-sets $diskEncryptionSetId $diskEncryptionSetId

Crie um disco vazio criptografado usando a criptografia do lado do servidor com chaves gerenciadas pelo cliente e anexe-o a uma VM

vmName=yourVMName
rgName=yourResourceGroupName
diskName=yourDiskName
diskSkuName=Premium_LRS
diskSizeinGiB=30
location=westcentralus
diskLUN=2
diskEncryptionSetName=yourDiskEncryptionSetName


diskEncryptionSetId=$(az disk-encryption-set show -n $diskEncryptionSetName -g $rgName --query [id] -o tsv)

az disk create -n $diskName -g $rgName -l $location --encryption-type EncryptionAtRestWithCustomerKey --disk-encryption-set $diskEncryptionSetId --size-gb $diskSizeinGiB --sku $diskSkuName

diskId=$(az disk show -n $diskName -g $rgName --query [id] -o tsv)

az vm disk attach --vm-name $vmName --lun $diskLUN --ids $diskId

Mude a chave de um DiskEncryptionSet para alternar a chave de todos os recursos que fazem referência ao DiskEncryptionSet


rgName=yourResourceGroupName
keyVaultName=yourKeyVaultName
keyName=yourKeyName
diskEncryptionSetName=yourDiskEncryptionSetName


keyVaultId=$(az keyvault show --name $keyVaultName--query [id] -o tsv)

keyVaultKeyUrl=$(az keyvault key show --vault-name $keyVaultName --name $keyName --query [key.kid] -o tsv)

az disk-encryption-set update -n keyrotationdes -g keyrotationtesting --key-url $keyVaultKeyUrl --source-vault $keyVaultId

Encontre o status da criptografia do lado do servidor de um disco

az disk show -g yourResourceGroupName -n yourDiskName --query [encryption.type] -o tsv

Importante

As chaves gerenciadas pelo cliente dependem de identidades gerenciadas para recursos do Azure, um recurso do Microsoft Entra ID. Ao configurar chaves gerenciadas pelo cliente, uma identidade gerenciada é atribuída automaticamente aos recursos nos bastidores. Caso mova posteriormente a assinatura, o grupo de recursos ou o disco gerenciado de um diretório do Microsoft Entra para outro, a identidade gerenciada associada aos discos gerenciados não será transferida para o novo locatário, portanto, as chaves gerenciadas pelo cliente poderão não funcionar mais. Para obter mais informações, confira Como transferir uma assinatura entre os diretórios do Microsoft Entra.

Próximas etapas