Ce mois-ci, Jean-Baptiste, consultant senior datacenter chez AZEO vous propose un nouveau tuto d’expert. Apprenez avec lui comment chiffrer votre VM linux, hébergée dans Azure ! 

Les étapes pour chiffrer le(s) disque(s) d’une VM Linux hébergée dans Azure ne sont pas compliquées mais la documentation officielle (lien ci-dessous) est assez … dense :
https://docs.microsoft.com/en-us/azure/security/azure-security-disk-encryption

Je vous propose donc de synthétiser les différentes opérations dans un rapide tutorial, montrant comment chiffrer une VM existante. Pas de doute, cela vous fera surement gagner pas mal de temps !

Les Prérequis de ce tuto :

Les ressources Azure nécessaires pour la démonstration sont les suivantes

– 1 VM Linux
– 1 Key Vault et 1 Encryption Key
– 1 Service Principal

Vous devez avoir également installé le module Azure.RM pour PowerShell et disposer d’un compte ayant les droits suffisants sur la Subscription (Contributor) et Global Admin au niveau du Tenant Azure (sauf si l’option « Users can register applications » a été activée)

Dans un prompt PowerShell, lancer la commande Login-AzureRmAccount pour vous connecter à votre tenant. Lancer également la commande Select-AzureRmSubscription si nécessaire.

Durant tout ce tutorial, ne fermez pas la fenêtre, afin de ne pas perdre les variables en mémoire pour les différentes commandes.

La base : Créer une VM Linux

Ce tutorial ne détaille pas comment créer une VM Linux.

Celle-ci a été déployée préalablement dans un Resource Group dédié.

Caractéristiques :

  • OS Ubuntu Server 16.04
  • SKU Standard DS1_V2
  • Nom  azrwe1linux1

Je vous invite à visiter cette documentation Microsoft afin de appréhender les OS et type de disque (OS/Data) supportés pour le chiffrement :
https://docs.microsoft.com/en-us/azure/security/azure-security-disk-encryption#prerequisites

Choisissez donc une VM supportée et créez une VM Linux.

Attention, à la fin de ce tuto, vous devrez procéder à un reboot indispensable de votre VM.

Key Vault

Le Key Vault dans Azure permet notamment de stocker les mots de passe (clé de chiffrement du disque dans le cas présent).

Attention avant de continuer, le Key Vault et la VM doivent être dans la même Subscription et la même région Azure.

Création du Key Vault

Dans le prompt PowerShell :

$KVname = « kv-testvm-we1 »
$RGname = « rg-testvm-we1 »
$LOCname = « West Europe »

New-AzureRmKeyVault -VaultName $KVname -ResourceGroupName $RGname -Location $LOCname -Sku ‘Premium’ -EnabledForDiskEncryption

Creation d’une KEK

Utiliser cette comande dans votre prompt PowerShell :

$KEKName = « keyencryptionkey »
$KEK = Add-AzureKeyVaultKey -VaultName $KVname -Name $KEKName -Destination « Software »

Vérifier sa création dans le portail Azure avant de passer à l’opération suivante :

Service Principal

L’usage d’un Service Principal dans l’Azure AD est à comparer avec un compte de service dans Active Directory. Il a l’avantage de ne pas être soumis aux éventuelles policies affectant les comptes Users (expiration du mot de passe par exemple).

Voici comment créer le service principal :

Utiliser cette commande dans le prompt PowerShell :

$AADAPPname = « testvm-keyvault-encrypt »
$AADAPPsecret = « <pwd> »
$AADAPPhomepage = « https://dummyurl.lan »
$AADAPPuri = « https://dummyurl.lan »

$AzureADApplication = New-AzureRmADApplication -DisplayName $AADAPPname -HomePage $AADAPPhomepage -IdentifierUris $AADAPPuri -Password (ConvertTo-SecureString $AADAPPsecret -AsPlainText -Force)

$servicePrincipal = New-AzureRmADServicePrincipal –ApplicationId $AzureADApplication.ApplicationId

Vous pouvez vérifier sa création dans le portail Azure (Azure Active Directory\Apps registrations) :

Autoriser le Service Principal dans le Key Vault

Dans le prompt PowerShell :

Set-AzureRmKeyVaultAccessPolicy -VaultName $KVname -ServicePrincipalName $AzureADApplication.ApplicationId -PermissionsToKeys ‘WrapKey’ -PermissionsToSecrets ‘Set’ -ResourceGroupName $RGname

Vous pouvez vérifier la permission sur le Key Vault, dans la section Access policies :

Chiffrement de la VM

Une fois votre VM bien mise en place, place au chiffrement !

Utiliser cette commande dans le prompt PowerShell :

$VMname = « azrwe1linux1 »

$KeyVault = Get-AzureRmKeyVault -VaultName $KVname -ResourceGroupName $RGname
$DiskEncryptionKeyVaultUrl = $KeyVault.VaultUri
$KeyVaultResourceId = $KeyVault.ResourceId
$KeyEncryptionKeyUrl = $KEK.key.kid

Set-AzureRmVMDiskEncryptionExtension -ResourceGroupName $RGname -VMName $VMname -AadClientID $AzureADApplication.ApplicationId -AadClientSecret $AADAPPsecret -DiskEncryptionKeyVaultUrl $DiskEncryptionKeyVaultUrl -DiskEncryptionKeyVaultId $KeyVaultResourceId -KeyEncryptionKeyUrl $KeyEncryptionKeyUrl -KeyEncryptionKeyVaultId $KeyVaultResourceId -VolumeType OS -SkipVmBackup -Force

Notez le paramètre –SkipVmBackup obligatoire pour éviter le message d’erreur ci-dessous (http://www.wahidsaleemi.com/2017/03/infamous-object-reference-not-set-to-an-instance-of-an-object-for-azure-disk-encryption/)

Vérification du chiffrement

Une fois la commande Set-AzureRmVMDiskEncryptionExtension lancée, le chiffrement démarre. Le temps d’exécution varie suivant la SKU de la VM (de 30 minutes à plusieurs heures).

Notez qu’il est possible de vérifier le statut grâce à la commande Get-AzureRmVMDiskEncryptionStatus.

Utiliser cette commande dans votre prompt PowerShell pour vérifier le statut de votre VM :
Get-AzureRmVMDiskEncryptionStatus -VMName $VMname -ResourceGroupName $RGname

Une fois le chiffrement terminé, vous devriez obtenir ceci :

Pour redémarrer la VM, lancez la commande ci-dessous dans le prompt PowerShell :

Restart-AzureRmVM -ResourceGroupName $RGname -Name $VMname

Suite au reboot, la VM affiche le statut Encrypted pour le disque :