Introduction

Here is a small tutorial on encrypting a Microsoft Azure virtual machine disk.

Preparing the Azure Virtual Machine

Enable the Azure Key Vault provider within your Azure subscription.

$ az provider register -n Microsoft.KeyVault

Create a resource group in your favorite location (keep in mind different locations enable different features, some VM sizes are not available in other locations).

$ az group create \
    --name testResourceGroup \
    --location centralus

Create an Azure Key Vault and enable the Key Vault for use with disk encryption.

$ az keyvault create \
    --name testKeyVault \
    --resource-group testResourceGroup \
    --location centralus \
    --enabled-for-disk-encryption True

Create a cryptographic key in your Key Vault.

$ az keyvault key create \
    --vault-name testKeyVault \
    --name testKey \
    --protection software

Create a service principal using Azure Active Directory , which handles the authentication and exchange of cryptographic keys from Key Vault.

$ az ad sp create-for-rbac

Set permissions on your Key Vault.

$ az keyvault set-policy \
    --name testKeyVault --spn $sp_id \
    --key-permissions wrapKey \
    --secret-permissions set

Create a VM and attach a 10Gb data disk. Keep in mind that only certain marketplace images support disk encryption .

$ az vm create \
    --resource-group testResourceGroup \
    --name testVM \
    --image UbuntuLTS \
    --admin-username azureuser \
    --generate-ssh-keys \
    --data-disk-sizes-gb 10

SSH to your VM using the publicIpAddress shown in the output of the preceding command, create a partition and filesystem, then mount the data disk. Start encrypting your VM.

$ az vm encryption enable \
    --resource-group testResourceGroup \
    --name testVM \
    --aad-client-id $sp_id \
    --aad-client-secret $sp_password \
    --disk-encryption-keyvault testKeyVault \
    --key-encryption-key testKey \
    --volume-type all

Encryption process will take some time to complete, you can monitor the status of the encryption; for now, it will show EncryptionInProgress:

$ az vm encryption show \
    --resource-group testResourceGroup \
    --name testVM

When the status for the OS disk reports VMRestartPending, restart your virtual machine.

$ az vm restart \
    --resource-group testResourceGroup \
    --name testVM

The disk encryption process is finalised during the boot process, so wait a few minutes before checking the status of encryption again. The status should report that both OS disk and data disk are Encrypted.

$ az vm encryption show \
    --resource-group testResourceGroup \
    --name testVM

Additional info