Démarrage rapide : créer une machine virtuelle confidentielle avec Azure CLI

S’applique à : ✔️ Machines virtuelles Linux ✔️ Machines virtuelles Windows

Ce guide de démarrage rapide explique comment utiliser l’interface de ligne de commande Azure (Azure CLI) pour déployer une machine virtuelle confidentielle dans Azure. L’interface Azure CLI permet de créer et gérer des ressources Azure par le biais de la ligne de commande ou de scripts.

Prérequis

Si vous n’avez pas d’abonnement Azure, créez un compte Azure gratuit avant de commencer.

Lancement d’Azure Cloud Shell

Azure Cloud Shell est un interpréteur de commandes interactif et gratuit que vous pouvez utiliser pour exécuter les étapes de cet article. Il contient des outils Azure courants préinstallés et configurés pour être utilisés avec votre compte.

Pour ouvrir Cloud Shell, sélectionnez simplement Essayer en haut à droite d’un bloc de code. Vous pouvez également ouvrir Cloud Shell dans un onglet distinct du navigateur en accédant à https://shell.azure.com/bash. Sélectionnez Copier pour copier les blocs de code, collez-les dans Cloud Shell et sélectionnez Entrée pour les exécuter.

Si vous préférez installer et utiliser l’interface CLI localement, ce guide de démarrage rapide nécessite Azure CLI 2.38.0 ou ultérieur. Exécutez az--version pour trouver la version. Si vous devez installer ou mettre à niveau, voir Installer Azure CLI.

Créer un groupe de ressources

Créez un groupe de ressources avec la commande az group create. Un groupe de ressources Azure est un conteneur logique dans lequel les ressources Azure sont déployées et gérées. L’exemple suivant crée un groupe de ressources nommé myResourceGroup dans la région northeurope :

Remarque

Les machines virtuelles confidentielles ne sont pas disponibles dans tous les emplacements. Pour les emplacements actuellement pris en charge, consultez la disponibilité des produits de machines virtuelles par région Azure.

az group create --name myResourceGroup --location northeurope

Créer une machine virtuelle confidentielle à l’aide d’une clé gérée par la plateforme

Créez une machine virtuelle avec la commande az vm create.

L’exemple suivant crée une machine virtuelle nommée myVM et ajoute un compte d’utilisateur nommé azureuser. Le paramètre --generate-ssh-keys permet de générer automatiquement une clé SSH et de la placer dans l’emplacement de clé par défaut (~/.ssh). Pour utiliser un ensemble spécifique de clés à la place, utilisez l’option --ssh-key-values. Pour size, sélectionnez une taille de machine virtuelle confidentielle. Pour plus d’informations, consultez les familles de machines virtuelles confidentielles prises en charge.

Choisissez VMGuestStateOnly pour ne pas avoir de chiffrement confidentiel du disque du système d’exploitation. Ou choisissez DiskWithVMGuestState pour avoir un chiffrement confidentiel du disque du système d’exploitation avec une clé gérée par la plateforme. Le démarrage sécurisé est activé par défaut, mais est facultatif pour VMGuestStateOnly. Pour plus d’informations, consultez démarrage sécurisé et vTPM. Pour plus d’informations sur le chiffrement de disque et le chiffrement sur l’hôte, consultez les sections Chiffrement de disque de système d’exploitation confidentiel et Chiffrement sur l’hôte.

az vm create \
  --resource-group myResourceGroup \
  --name myVM \
  --size Standard_DC4es_v5 \
  --admin-username <azure-username> \
  --admin-password <azure-password> \
  --enable-vtpm true \
  --image "Canonical:0001-com-ubuntu-confidential-vm-jammy:22_04-lts-cvm:latest" \
  --public-ip-sku Standard \
  --security-type ConfidentialVM \
  --os-disk-security-encryption-type VMGuestStateOnly \
  --enable-secure-boot true

La création de la machine virtuelle et des ressources de support ne nécessite que quelques minutes. L’exemple de sortie suivant illustre la réussite de l’opération de création d’une machine virtuelle.

{
  "fqdns": "",
  "id": "/subscriptions/<guid>/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/myVM",
  "location": "northeurope",
  "macAddress": "<MAC-address>",
  "powerState": "VM running",
  "privateIpAddress": "10.20.255.255",
  "publicIpAddress": "192.168.255.255",
  "resourceGroup": "myResourceGroup",
  "zones": ""
}

Notez publicIpAddress afin de pouvoir l’utiliser plus tard.

Créer une machine virtuelle confidentielle à l’aide d’une clé gérée par le client

Pour créer un jeu de chiffrement de disque confidentiel, vous avez deux options : Utiliser Azure Key Vault ou le Module managé de sécurité matérielle (HSM) Azure Key Vault. En fonction de vos besoins en matière de sécurité et de conformité, vous pouvez choisir l’une ou l’autre option. Toutefois, il est important de noter que la référence SKU standard n’est pas prise en charge. L’exemple suivant utilise Azure Key Vault Premium.

  1. Accordez un principal de service de machine virtuelle confidentielle Confidential VM Orchestrator au locataire. Pour cette étape, vous devez être un Administration global ou disposer du rôle RBAC Administrateur de l’accès utilisateur. Installez le SDK Microsoft Graph pour exécuter les commandes ci-dessous.
Connect-Graph -Tenant "your tenant ID" Application.ReadWrite.All
New-MgServicePrincipal -AppId bf7b6499-ff71-4aa2-97a4-f372087be7f0 -DisplayName "Confidential VM Orchestrator"
  1. Créez une instance Azure Key Vault à l’aide de la commande az keyvault create. Pour le niveau tarifaire, sélectionnez Premium (inclut la prise en charge des clés sauvegardées par HSM). Assurez-vous que vous disposez d’un rôle Propriétaire dans ce coffre de clés.
az keyvault create -n keyVaultName -g myResourceGroup --enabled-for-disk-encryption true --sku premium --enable-purge-protection true --enable-rbac-authorization false
  1. Accordez des autorisations Confidential VM Orchestrator pour obtenir (get) et libérer (release) le coffre de clés.
$cvmAgent = az ad sp show --id "bf7b6499-ff71-4aa2-97a4-f372087be7f0" | Out-String | ConvertFrom-Json
az keyvault set-policy --name keyVaultName --object-id $cvmAgent.Id --key-permissions get release
  1. Créez une clé dans le coffre de clés avec az keyvault key create. Pour le type de clé, utilisez RSA-HSM.
az keyvault key create --name mykey --vault-name keyVaultName --default-cvm-policy --exportable --kty RSA-HSM
  1. Créez le jeu de chiffrement de disque avec az disk-encryption-set create. Définissez le type de chiffrement sur ConfidentialVmEncryptedWithCustomerKey.
$keyVaultKeyUrl=(az keyvault key show --vault-name keyVaultName --name mykey--query [key.kid] -o tsv)

az disk-encryption-set create --resource-group myResourceGroup --name diskEncryptionSetName --key-url $keyVaultKeyUrl  --encryption-type ConfidentialVmEncryptedWithCustomerKey
  1. Accordez au jeu de chiffrement de disque l’accès aux ressources du coffre de clés avec de az key vault set-policy.
$desIdentity=(az disk-encryption-set show -n diskEncryptionSetName -g myResourceGroup --query [identity.principalId] -o tsv)

az keyvault set-policy -n keyVaultName -g myResourceGroup --object-id $desIdentity --key-permissions wrapkey unwrapkey get
  1. Utilisez l’ID du jeu de chiffrement de disque pour créer la machine virtuelle.
$diskEncryptionSetID=(az disk-encryption-set show -n diskEncryptionSetName -g myResourceGroup --query [id] -o tsv)
  1. Créez une machine virtuelle avec la commande az vm create. Choisissez DiskWithVMGuestState pour avoir un chiffrement confidentiel du disque du système d’exploitation avec une clé gérée par le client. L’activation du démarrage sécurisé est facultative, mais recommandée. Pour plus d’informations, consultez démarrage sécurisé et vTPM. Pour plus d’informations sur le chiffrement de disque, consultez Chiffrement de disque de système d’exploitation confidentiel.
az vm create \
--resource-group myResourceGroup \
--name myVM \
--size Standard_DC4as_v5 \
--admin-username <azure-user> \
--admin-password <azure-password> \
--enable-vtpm true \
--enable-secure-boot true \
--image "Canonical:0001-com-ubuntu-confidential-vm-focal:20_04-lts-cvm:latest" \
--public-ip-sku Standard \
--security-type ConfidentialVM \
--os-disk-security-encryption-type DiskWithVMGuestState \
--os-disk-secure-vm-disk-encryption-set $diskEncryptionSetID \

La création de la machine virtuelle et des ressources de support ne nécessite que quelques minutes. L’exemple de sortie suivant illustre la réussite de l’opération de création d’une machine virtuelle.

{
  "fqdns": "",
  "id": "/subscriptions/<guid>/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/myVM",
  "location": "eastus",
  "macAddress": "<MAC-address>",
  "powerState": "VM running",
  "privateIpAddress": "10.20.255.255",
  "publicIpAddress": "192.168.255.255",
  "resourceGroup": "myResourceGroup",
  "zones": ""
}

Notez publicIpAddress afin de pouvoir l’utiliser plus tard.

Connecter et attester la machine virtuelle confidentielle basée sur AMD via l’exemple d’application Microsoft Azure Attestation

Pour utiliser un exemple d’application en C++ à utiliser avec les API d’attestation d’invité, procédez comme suit. Cet exemple utilise une machine virtuelle confidentielle Linux. Pour Windows, consultez les instructions de génération pour Windows.

  1. Connectez-vous à votre machine virtuelle confidentielle à l’aide de son adresse IP publique.

  2. Clonez l’exemple d’application Linux.

  3. Installez le package build-essential. Ce package installe tout ce qui est nécessaire pour compiler l’exemple d’application.

sudo apt-get install build-essential
  1. Installez les packages ci-dessous.
sudo apt-get install libcurl4-openssl-dev
sudo apt-get install libjsoncpp-dev
sudo apt-get install libboost-all-dev
sudo apt install nlohmann-json3-dev
  1. Téléchargez le package d’attestation.

  2. Installez le package d’attestation. Veillez à remplacer <version> par la version que vous avez téléchargée.

sudo dpkg -i azguestattestation1_<latest-version>_amd64.deb
  1. Une fois les packages ci-dessus installés, effectuez les étapes ci-dessous pour générer et exécuter l’application.
cd confidential-computing-cvm-guest-attestation/cvm-attestation-sample-app
sudo cmake . && make
sudo ./AttestationClient -o token
  1. Pour convertir le jeton web en JSON, suivez les étapes ci-dessous.
sudo ./AttestationClient -o token>> /attestation_output

JWT=$(cat /attestation_output)

echo -n $JWT | cut -d "." -f 1 | base64 -d 2>/dev/null | jq .
echo -n $JWT | cut -d "." -f 2 | base64 -d 2>/dev/null | jq .

Étapes suivantes