Condividi tramite


Guida di avvio rapido: distribuire una VM riservata con un modello di ARM

È possibile usare un modello di Azure Resource Manager (modello di ARM) per creare rapidamente una VM riservata di Azure. Le macchine virtuali riservate vengono eseguite sui processori AMD supportati dai processori AMD SEV-SNP e sui processori Intel supportati da Intel TDX, per ottenere la crittografia e l'isolamento della memoria delle VM. Per altre informazioni, vedere Panoramica delle macchine virtuali riservate.

In questa esercitazione viene illustrata la distribuzione di una VM riservata con una configurazione personalizzata.

Prerequisiti

Distribuire un modello di macchina virtuale riservata con l'interfaccia della riga di comando di Azure

È possibile distribuire un modello di macchina virtuale riservata, con crittografia riservata del disco del sistema operativo facoltativa, tramite una chiave gestita dalla piattaforma.

Per creare e distribuire la macchina virtuale riservata usando un modello di ARM tramite l'interfaccia della riga di comando di Azure:

  1. Accedere all'account Azure nell'interfaccia della riga di comando di Azure.

    az login
    
  2. Impostare la sottoscrizione di Azure. Sostituire <subscription-id> con l'identificatore della sottoscrizione. Assicurarsi di usare una sottoscrizione che soddisfi i prerequisiti.

    az account set --subscription <subscription-id>
    
  3. Impostare le variabili per la macchina virtuale riservata. Specificare il nome della distribuzione ($deployName), il gruppo di risorse ($resourceGroup), il nome della macchina virtuale ($vmName) e l'area di Azure ($region). Sostituire i valori di esempio con i propri dati.

    Nota

    Le macchine virtuali riservate non sono disponibili in tutte le posizioni. Per le posizioni attualmente supportate, vedere quali prodotti VM sono disponibili in base all'area di Azure.

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

    Se il gruppo di risorse specificato non esiste, creare un gruppo di risorse definito da tale nome.

    az group create -n $resourceGroup -l $region
    
  4. Distribuire la macchina virtuale in Azure usando un modello di Resource Manager con un file di parametri personalizzato e un file modello.

    az deployment group create `
     -g $resourceGroup `
     -n $deployName `
     -u "<json-template-file-path>" `
     -p "<json-parameter-file-path>" `
     -p vmLocation=$region `
        vmName=$vmName
    

Definire un file dei parametri personalizzato

Quando si crea una macchina virtuale riservata tramite l'interfaccia della riga di comando di Azure, è necessario definire un file dei parametri personalizzato. Per creare un file dei parametri JSON personalizzato:

  1. Accedere all'account Azure tramite l'interfaccia della riga di comando di Azure.

  2. Creare un file dei parametri JSON. Ad esempio, azuredeploy.parameters.json.

  3. A seconda dell'immagine del sistema operativo in uso, copiare il file dei parametri di Windows di esempio o il file dei parametri Linux di esempio nel nuovo file dei parametri.

  4. Modificare il codice JSON nel file di parametri in base alle esigenze. Ad esempio, aggiornare il nome dell'immagine del sistema operativo (osImageName) o il nome utente dell'amministratore (adminUsername).

  5. Configurare l'impostazione del tipo di sicurezza (securityType). Scegliere VMGuestStateOnly per non applicare la crittografia riservata del disco del sistema operativo. Oppure, scegliere DiskWithVMGuestState per la crittografia riservata del disco del sistema operativo con una chiave gestita dalla piattaforma. Solo per gli SKU Intel TDX e per le immagini basate su Linux, i clienti possono scegliere il tipo di sicurezza NonPersistedTPM da distribuire con un vTPM temporaneo. Per il tipo di sicurezza NonPersistedTPM usare il valore minimo "apiVersion": "2023-09-01" Microsoft.Compute/virtualMachines nel file modello.

  6. Salvare il file dei parametri.

File dei parametri di Windows di esempio

Usare questo esempio per creare un file dei parametri personalizzato per una macchina virtuale riservata basata su Windows.

{
  "$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>"
    }
  }
}

File dei parametri di Linux di esempio

Usare questo esempio per creare un file dei parametri personalizzato per una macchina virtuale riservata basata su Linux.

{
  "$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>
    }
  }
}

Nota

Sostituire il valore osImageName di conseguenza.

Distribuire un modello di macchina virtuale riservata con crittografia riservata del disco del sistema operativo tramite la chiave gestita dal cliente

  1. Accedere all'account Azure tramite l'interfaccia della riga di comando di Azure.

    az login
    
  2. Impostare la sottoscrizione di Azure. Sostituire <subscription-id> con l'identificatore della sottoscrizione. Assicurarsi di usare una sottoscrizione che soddisfi i prerequisiti.

    az account set --subscription <subscription-id>
    
  3. Concedere al tenant il ruolo di entità servizio della macchina virtuale riservata Confidential VM Orchestrator

    Per questo passaggio è necessario essere un amministratore globale o avere il ruolo Controllo degli accessi in base al ruolo di Amministratore accesso utente. Installare Microsoft Graph SDK per eseguire i comandi seguenti.

    Connect-Graph -Tenant "your tenant ID" Application.ReadWrite.All
    New-MgServicePrincipal -AppId bf7b6499-ff71-4aa2-97a4-f372087be7f0 -DisplayName "Confidential VM Orchestrator"
    
  4. Configurare l'insieme di credenziali delle chiavi di Azure. Per informazioni su come usare un modulo di protezione hardware gestito di Azure Key Vault, vedere il passaggio successivo.

    1. Creare un gruppo di risorse per l'insieme di credenziali delle chiavi. L'istanza dell'insieme di credenziali delle chiavi e la macchina virtuale riservata devono trovarsi nella stessa area di Azure.

      $resourceGroup = <key vault resource group>
      $region = <Azure region>
      az group create --name $resourceGroup --location $region
      
    2. Creare un'istanza dell'insieme di credenziali delle chiavi con uno SKU Premium e selezionare l'area preferita. Lo SKU standard non è supportato.

      $KeyVault = <name of key vault>
      az keyvault create --name $KeyVault --resource-group $resourceGroup --location $region --sku Premium --enable-purge-protection
      
    3. Assicurarsi di avere un ruolo di proprietario in questo insieme di credenziali delle chiavi.

    4. Concedere le autorizzazioni Confidential VM Orchestrator per le operazioni get e release per l'insieme di credenziali delle chiavi.

      $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. (Facoltativo) Se non si desidera usare un insieme di credenziali delle chiavi di Azure, in alternativa è possibile creare un modulo di protezione hardware gestito di Azure Key Vault.

    1. Seguire le istruzioni della guida di avvio rapido per creare un modulo di protezione hardware gestito di Azure Key Vault per effettuare il provisioning e attivare il modulo di protezione hardware gestito di Azure Key Vault.

    2. Abilitare la protezione dalla rimozione definitiva nel modulo di protezione hardware gestito di Azure. Questo passaggio è obbligatorio per abilitare il rilascio delle chiavi.

      az keyvault update-hsm --subscription $subscriptionId -g $resourceGroup --hsm-name $hsm --enable-purge-protection true
      
    3. Concedere le autorizzazioni Confidential VM Orchestrator al modulo di protezione hardware gestito.

      $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. Creare una nuova chiave con Azure Key Vault. Per informazioni su come usare un modulo di protezione hardware gestito di Azure, vedere il passaggio successivo.

    1. Preparare e scaricare i criteri di rilascio delle chiavi nel disco locale.

    2. Creare una nuova chiave.

      $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. Ottenere informazioni sulla chiave creata.

      $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. Distribuire un set di crittografia dischi (DES) usando un modello DI Resource Manager 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. Assegnare l'accesso alla chiave al file 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. (Facoltativo) Creare una nuova chiave da un modulo di protezione hardware gestito di Azure.

    1. Preparare e scaricare i criteri di rilascio delle chiavi nel disco locale.

    2. Creare la nuova chiave.

      $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. Ottenere informazioni sulla chiave creata.

      $encryptionKeyURL = ((az keyvault key show --hsm-name $hsm --name $KeyName) | ConvertFrom-Json).key.kid
      
    4. Distribuire un set di crittografia dischi.

      $desName = <name of DES>
      az disk-encryption-set create -n $desName `
       -g $resourceGroup `
       --key-url $encryptionKeyURL
      
    5. Assegnare l'accesso alla chiave al set di crittografia dischi.

      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. Distribuire la macchina virtuale riservata con la chiave gestita dal cliente.

    1. Ottenere l'ID risorsa per il set di crittografia dischi.

      $desID = (az disk-encryption-set show -n $desName -g $resourceGroup --query [id] -o tsv)
      
    2. Distribuire la macchina virtuale riservata usando un modello DI Resource Manager riservato per Intel TDX e un file di parametri di distribuzione (ad esempio, azuredeploy.parameters.win2022.json) con la chiave gestita dal cliente.

      $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. Connettersi alla VM riservata per assicurarsi che la creazione abbia avuto esito positivo.

Passaggi successivi