Share via


Avvio rapido: Distribuire una macchina virtuale riservata con un modello di ARM

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

Questa esercitazione illustra la distribuzione di una macchina virtuale 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.

    Nota

    Le macchine virtuali riservate non sono disponibili in tutte le posizioni. Per le posizioni attualmente supportate, vedere quali prodotti macchina virtuale 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 con 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. Per le distribuzioni TDX di seguito è riportato un modello di esempio: 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
    

Definire un file di parametri personalizzato

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

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

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

  3. A seconda dell'immagine del sistema operativo in uso, copiare il file di parametri di Windows di esempio o il file di 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 le immagini basate su Linux, i clienti possono scegliere il NonPersistedTPM tipo di sicurezza da distribuire con un vTPM temporaneo. Per il NonPersistedTPM tipo di sicurezza usare il valore minimo "apiVersion": "2023-09-01" Microsoft.Compute/virtualMachines nel file modello.

  6. Salvare il file dei parametri.

File di parametri di Windows di esempio

Usare questo esempio per creare un file di 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 di parametri di Linux di esempio

Usare questo esempio per creare un file di 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 il ruolo Confidential VM Orchestrator dell'entità servizio della macchina virtuale riservata al tenant

    Per questo passaggio è necessario essere un amministratore globale o avere il ruolo Controllo degli accessi in base al ruolo 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 vuole usare un insieme di credenziali delle chiavi di Azure, è possibile creare un modulo di protezione hardware gestito di Azure Key Vault in alternativa.

    1. Seguire l'avvio rapido per la creazione di 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 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 autorizzazioni Confidential VM Orchestrator per il 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 usando un modello di 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. 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 AMD edizione Standard V-SNP o 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 macchina virtuale riservata per assicurarsi che la creazione abbia avuto esito positivo.

Passaggi successivi