Avvio rapido: Creare una macchina virtuale riservata con l'interfaccia della riga di comando di Azure

Si applica a: ✔️ macchine virtuali Linux ✔️ macchine virtuali Windows

Questo argomento di avvio rapido illustra come usare l'interfaccia della riga di comando di Azure per distribuire una macchina virtuale riservata in Azure. Viene usata l'interfaccia della riga di comando di Azure per creare e gestire le risorse di Azure dalla riga di comando o tramite script.

Prerequisiti

Se non si ha una sottoscrizione di Azure, creare un account Azure gratuito prima di iniziare.

Avviare Azure Cloud Shell

Azure Cloud Shell è una shell interattiva gratuita che può essere usata per eseguire la procedura di questo articolo. Include strumenti comuni di Azure preinstallati e configurati per l'uso con l'account.

Per aprire Cloud Shell, basta selezionare Prova nell'angolo superiore destro di un blocco di codice. È anche possibile aprire Cloud Shell in una scheda separata del browser visitando https://shell.azure.com/bash. Selezionare Copia per copiare i blocchi di codice, incollarli in Cloud Shell e premere INVIO per eseguirli.

Se si preferisce installare e usare l'interfaccia della riga di comando in locale, per questo argomento di avvio rapido è necessaria l'interfaccia della riga di comando di Azure versione 2.38.0 o successiva. Eseguire az--version per trovare la versione. Se è necessario eseguire l'installazione o l'aggiornamento, vedere Installare l'interfaccia della riga di comando di Azure.

Creare un gruppo di risorse

Creare un gruppo di risorse con il comando az group create. Un gruppo di risorse di Azure è un contenitore logico in cui le risorse di Azure vengono distribuite e gestite. L'esempio seguente crea un gruppo di risorse denominato myResourceGroup nella posizione northeurope:

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.

az group create --name myResourceGroup --location northeurope

Creare una macchina virtuale riservata usando una chiave gestita dalla piattaforma

Creare una VM con il comando az vm create.

Nell'esempio seguente viene creata una macchina virtuale denominata myVM e aggiunto un account utente denominato azureuser. Il parametro --generate-ssh-keys viene usato per generare automaticamente una chiave SSH e inserirla nella posizione predefinita della chiave (~/.ssh). Per usare invece un set specifico di chiavi, usare l'opzione --ssh-key-values. Per size, selezionare una dimensione di macchina virtuale riservata. Per altre informazioni, vedere le famiglie di macchine virtuali riservate supportate.

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. L'avvio protetto è abilitato per impostazione predefinita, ma è facoltativo per VMGuestStateOnly. Per altre informazioni, vedere l'articolo relativo ad avvio protetto e vTPM. Per altre informazioni sulla crittografia del disco e la crittografia a livello di host, vedere gli articoli sulla crittografia riservata del disco del sistema operativo e la crittografia a livello di host.

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 \
  --encryption-at-host \

La creazione della macchina virtuale e delle risorse di supporto richiede alcuni minuti. L'output di esempio seguente mostra che l'operazione di creazione della macchina virtuale ha avuto esito positivo.

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

Prendere nota dell'indirizzo publicIpAddress per usarlo in seguito.

Creare una macchina virtuale riservata usando una chiave gestita dal cliente

Per creare un set di crittografia del disco riservato, sono disponibili due opzioni: Azure Key Vault o un modulo di protezione hardware HSM (Hardware Security Module) gestito di Azure Key Vault. In base alle esigenze di sicurezza e conformità, è possibile scegliere una delle due opzioni. Tuttavia, è importante notare che lo SKU standard non è supportato. L'esempio seguente usa Azure Key Vault Premium.

  1. 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"
  1. Creare un'istanza di Azure Key Vault con il comando az keyvault create. Per il piano tariffario selezionare Premium (include il supporto per le chiavi supportate dal modulo di protezione hardware). Assicurarsi di avere un ruolo di proprietario in questo insieme di credenziali delle chiavi.
az keyvault create -n keyVaultName -g myResourceGroup --enabled-for-disk-encryption true --sku premium --enable-purge-protection true
  1. 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 keyVaultName --object-id $cvmAgent.Id --key-permissions get release
  1. Creare una chiave nell'insieme di credenziali delle chiavi con il comando az keyvault key create. Per il tipo di chiave, usare RSA-HSM.
az keyvault key create --name mykey --vault-name keyVaultName --default-cvm-policy --exportable --kty RSA-HSM
  1. Creare il set di crittografia del disco usando az disk-encryption-set create. Impostare il tipo di crittografia su 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. Concedere all'insieme di credenziali delle chiavi l'accesso alla risorsa del set di crittografia del disco usando 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. Usare l'ID del set di crittografia del disco per creare la macchina virtuale.
$diskEncryptionSetID=(az disk-encryption-set show -n diskEncryptionSetName -g myResourceGroup --query [id] -o tsv)
  1. Creare una VM con il comando az vm create. Scegliere DiskWithVMGuestState per la crittografia riservata del disco del sistema operativo con una chiave gestita dal cliente. L'abilitazione dell'avvio protetto è facoltativa, ma consigliata. Per altre informazioni, vedere l'articolo relativo ad avvio protetto e vTPM. Per altre informazioni sulla crittografia del disco, vedere l'articolo sulla crittografia riservata del disco del sistema operativo.
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 creazione della macchina virtuale e delle risorse di supporto richiede alcuni minuti. L'output di esempio seguente mostra che l'operazione di creazione della macchina virtuale ha avuto esito positivo.

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

Prendere nota dell'indirizzo publicIpAddress per usarlo in seguito.

Connettersi e attestare la macchina virtuale riservata basata su AMD tramite l'app di esempio di attestazione di Microsoft Azure

Per usare un'applicazione di esempio in C++ con le API di attestazione guest, seguire questa procedura. Questo esempio usa una macchina virtuale riservata Linux. Per Windows, vedere le istruzioni di compilazione per Windows.

  1. Accedere alla macchina virtuale riservata usando l'indirizzo IP pubblico.

  2. Clonare l'applicazione Linux di esempio.

  3. Installare il pacchetto build-essential. Questo pacchetto installa tutti gli elementi necessari per compilare l'applicazione di esempio.

sudo apt-get install build-essential
  1. Installare i pacchetti di seguito.
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. Scaricare il pacchetto di attestazione.

  2. Installare il pacchetto di attestazione. Assicurarsi di sostituire <version> con la versione scaricata.

sudo dpkg -i azguestattestation1_<latest-version>_amd64.deb
  1. Dopo aver installato i pacchetti precedenti, seguire questa procedura per compilare ed eseguire l'app.
cd confidential-computing-cvm-guest-attestation/cvm-attestation-sample-app
sudo cmake . && make
sudo ./AttestationClient -o token
  1. Per convertire il token Web in JSON, seguire questa procedura.
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 .

Passaggi successivi