Démarrage rapide : déployer une machine virtuelle confidentielle avec un modèle ARM

Vous pouvez utiliser un modèle Azure Resource Manager (modèle ARM) pour créer rapidement une machine virtuelle confidentielle Azure. Les machines virtuelles confidentielles s’exécutent sur les processeurs AMD à technologie AMD SEV-SNP et sur les processeurs Intel à technologie Intel TDX pour obtenir le chiffrement et l’isolation de la mémoire des machines virtuelles. Pour plus d’informations, voir Vue d’ensemble des machines virtuelles confidentielles.

Ce tutoriel traite du déploiement d’une machine virtuelle confidentielle avec une configuration personnalisée.

Prérequis

Déployer un modèle de machine virtuelle confidentielle avec Azure CLI

Vous pouvez déployer un modèle de machine virtuelle confidentielle qui dispose d’un chiffrement confidentiel de disque de système d’exploitation facultatif par le biais d’une clé gérée par la plateforme.

Pour créer et déployer votre machine virtuelle confidentielle à l’aide d’un modèle ARM via l’interface Azure CLI :

  1. Connectez-vous à votre compte Azure dans Azure CLI.

    az login
    
  2. Définissez votre abonnement Azure. Remplacez <subscription-id> par l’identificateur de votre abonnement. Veillez à utiliser un abonnement qui répond aux conditions préalables.

    az account set --subscription <subscription-id>
    
  3. Définissez les variables de votre machine virtuelle confidentielle. Indiquez le nom du déploiement ($deployName), le groupe de ressources ($resourceGroup), le nom de la machine virtuelle ($vmName) et la région Azure ($region). Remplacez les valeurs d’exemple par vos propres informations.

    Notes

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

    $deployName="<deployment-name>"
    $resourceGroup="<resource-group-name>"
    $vmName= "<confidential-vm-name>"
    $region="<region-name>"
    

    Si le groupe de ressources que vous avez spécifié n’existe pas, créez un groupe de ressources portant ce nom.

    az group create -n $resourceGroup -l $region
    
  4. Déployez votre machine virtuelle sur Azure à l’aide d’un modèle ARM avec un fichier de paramètres personnalisé. Pour les déploiements TDX, voici un exemple de modèle : https://aka.ms/TDXtemplate.

    az deployment group create `
     -g $resourceGroup `
     -n $deployName `
     -u "https://aka.ms/CVMTemplate" `
     -p "<json-parameter-file-path>" `
     -p vmLocation=$region `
        vmName=$vmName
    

Définir un fichier de paramètres personnalisé

Lorsque vous créez une machine virtuelle confidentielle via l’interface de ligne de commande Azure (Azure CLI), vous devez définir un fichier de paramètres personnalisé. Pour créer un fichier de paramètres JSON personnalisé :

  1. Connectez-vous à votre compte Azure via l’interface Azure CLI.

  2. Créez un fichier de paramètres JSON. Par exemple : azuredeploy.parameters.json.

  3. En fonction de l’image du système d’exploitation que vous utilisez, copiez l’exemple de fichier de paramètres Windows ou l’exemple de fichier de paramètres Linux dans votre fichier de paramètres.

  4. Modifiez le code JSON dans le fichier de paramètres en fonction de vos besoins. Par exemple, mettez à jour le nom de l’image du système d’exploitation (osImageName) ou le nom d’utilisateur de l’administrateur (adminUsername).

  5. Configurez votre paramètre de type de sécurité (securityType). 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. Pour les références SKU Intel TDX et les images Linux uniquement, les clients peuvent choisir le type de sécurité NonPersistedTPM afin de déployer avec un vTPM éphémère. Pour le type de sécurité NonPersistedTPM, utilisez l’« apiVersion » minimale « 2023-09-01 » sous Microsoft.Compute/virtualMachines dans le fichier de modèle.

  6. Enregistrez votre fichier de paramètres.

Exemple de fichier de paramètres Windows

Utilisez cet exemple pour créer un fichier de paramètres personnalisé pour une machine virtuelle Windows confidentielle.

{
  "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {

    "vmSize": {
      "value": "Standard_DC2as_v5"
    },
    "osImageName": {
      "value": "Windows Server 2022 Gen 2"
    },
    "securityType": {
      "value": "DiskWithVMGuestState"
    },
    "adminUsername": {
      "value": "testuser"
    },
    "adminPasswordOrKey": {
      "value": "<your password>"
    }
  }
}

Exemple de fichier de paramètres Linux

Utilisez cet exemple pour créer un fichier de paramètres personnalisé pour une machine virtuelle Linux confidentielle.

{
  "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {

    "vmSize": {
      "value": "Standard_DC2as_v5"
    },
    "osImageName": {
      "value": "Ubuntu 20.04 LTS Gen 2"
    },
    "securityType": {
      "value": "DiskWithVMGuestState"
    },
    "adminUsername": {
      "value": "testuser"
    },
    "authenticationType": {
      "value": "sshPublicKey"
    },
    "adminPasswordOrKey": {
      "value": <your SSH public key>
    }
  }
}

Notes

Remplace par conséquent la valeur oslmageName.

Déployer un modèle de machine virtuelle confidentielle avec chiffrement confidentiel du disque du système d’exploitation via une clé gérée par le client

  1. Connectez-vous à votre compte Azure via l’interface Azure CLI.

    az login
    
  2. Définissez votre abonnement Azure. Remplacez <subscription-id> par l’identificateur de votre abonnement. Veillez à utiliser un abonnement qui répond aux conditions préalables.

    az account set --subscription <subscription-id>
    
  3. 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"
    
  4. Configurez votre coffre de clés Azure. Pour savoir comment utiliser un HSM managé Azure Key Vault à la place, consultez l’étape suivante.

    1. Créez un groupe de ressources pour votre coffre de clés. Votre instance de coffre de clés et votre machine virtuelle confidentielle doivent se trouver dans la même région Azure.

      $resourceGroup = <key vault resource group>
      $region = <Azure region>
      az group create --name $resourceGroup --location $region
      
    2. Créez une instance de coffre de clés avec une référence SKU Premium dans votre région préférée. La référence SKU Standard n’est pas prise en charge.

      $KeyVault = <name of key vault>
      az keyvault create --name $KeyVault --resource-group $resourceGroup --location $region --sku Premium --enable-purge-protection
      
    3. Assurez-vous que vous disposez d’un rôle Propriétaire dans ce coffre de clés.

    4. 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 $KeyVault --object-id $cvmAgent.Id --key-permissions get release
      
  5. (Facultatif) Si vous ne souhaitez pas utiliser un coffre de clés Azure, vous pouvez créer un HSM managé Azure Key Vault à la place.

    1. Suivez le guide de démarrage rapide pour créer un HSM managé Azure Key Vault afin de provisionner et d’activer un HSM managé Azure Key Vault.

    2. Activez la protection contre le vidage sur le HSM managé Azure. Cette étape est nécessaire pour activer la libération de clé.

      az keyvault update-hsm --subscription $subscriptionId -g $resourceGroup --hsm-name $hsm --enable-purge-protection true
      
    3. Accordez des autorisations Confidential VM Orchestrator au HSM managé.

      $cvmAgent = az ad sp show --id "bf7b6499-ff71-4aa2-97a4-f372087be7f0" | Out-String | ConvertFrom-Json
      az keyvault role assignment create --hsm-name $hsm --assignee $cvmAgent.Id --role "Managed HSM Crypto Service Release User" --scope /keys/$KeyName
      
  6. Créez une clé à l’aide d’Azure Key Vault. Pour savoir comment utiliser un HSM managé Azure à la place, consultez l’étape suivante.

    1. Préparez et téléchargez la stratégie de libération de clé sur votre disque local.

    2. Créez une clé.

      $KeyName = <name of key>
      $KeySize = 3072
      az keyvault key create --vault-name $KeyVault --name $KeyName --ops wrapKey unwrapkey --kty RSA-HSM --size $KeySize --exportable true --policy "@.\skr-policy.json"
      
    3. Obtenez des informations sur la clé que vous avez créée.

      $encryptionKeyVaultId = ((az keyvault show -n $KeyVault -g $resourceGroup) | ConvertFrom-Json).id
      $encryptionKeyURL= ((az keyvault key show --vault-name $KeyVault --name $KeyName) | ConvertFrom-Json).key.kid
      
    4. Déployez un jeu de chiffrement de disque (DES) à l’aide d’un modèle ARM DES (deployDES.json).

      $desName = <name of DES>
      $deployName = <name of deployment>
      $desArmTemplate = <name of DES ARM template file>
      az deployment group create `
          -g $resourceGroup `
          -n $deployName `
          -f $desArmTemplate `
          -p desName=$desName `
          -p encryptionKeyURL=$encryptionKeyURL `
          -p encryptionKeyVaultId=$encryptionKeyVaultId `
          -p region=$region
      
    5. Attribuez l’accès par clé au fichier DES.

      $desIdentity= (az disk-encryption-set show -n $desName -g
      $resourceGroup --query [identity.principalId] -o tsv)
      az keyvault set-policy -n $KeyVault `
          -g $resourceGroup `
          --object-id $desIdentity `
          --key-permissions wrapkey unwrapkey get
      
  7. (Facultatif) Créez une clé à partir d’un HSM managé Azure.

    1. Préparez et téléchargez la stratégie de libération de clé sur votre disque local.

    2. Créez la clé.

      $KeyName = <name of key>
      $KeySize = 3072
      az keyvault key create --hsm-name $hsm --name $KeyName --ops wrapKey unwrapkey --kty RSA-HSM --size $KeySize --exportable true --policy "@.\skr-policy.json"
      
    3. Obtenez des informations sur la clé que vous avez créée.

      $encryptionKeyURL = ((az keyvault key show --hsm-name $hsm --name $KeyName) | ConvertFrom-Json).key.kid
      
    4. Déployez un jeu DES.

      $desName = <name of DES>
      az disk-encryption-set create -n $desName `
       -g $resourceGroup `
       --key-url $encryptionKeyURL
      
    5. Attribuez l’accès par clé au jeu DES.

      desIdentity=$(az disk-encryption-set show -n $desName -g $resourceGroup --query [identity.principalId] -o tsv)
      az keyvault set-policy -n $hsm `
          -g $resourceGroup `
          --object-id $desIdentity `
          --key-permissions wrapkey unwrapkey get
      
  8. Déployez votre machine virtuelle confidentielle avec la clé gérée par le client.

    1. Obtenez l’ID de ressource du jeu DES.

      $desID = (az disk-encryption-set show -n $desName -g $resourceGroup --query [id] -o tsv)
      
    2. Déployez votre machine virtuelle confidentielle à l’aide d’un modèle ARM de machine virtuelle confidentielle pour AMD SEV-SNP ou Intel TDX et d’un fichier de paramètres de déploiement (par exemple, azuredeploy.parameters.win2022.json) avec la clé gérée par le client.

      $deployName = <name of deployment>
      $vmName = <name of confidential VM>
      $cvmArmTemplate = <name of confidential VM ARM template file>
      $cvmParameterFile = <name of confidential VM parameter file>
      
      az deployment group create `
          -g $resourceGroup `
          -n $deployName `
          -f $cvmArmTemplate `
          -p $cvmParameterFile `
          -p diskEncryptionSetId=$desID `
          -p vmName=$vmName
      
  9. Connectez-vous à votre machine virtuelle confidentielle pour vérifier que la création a réussi.

Étapes suivantes