Schnellstart: Bereitstellen einer vertraulichen VM mithilfe einer ARM-Vorlage

Mithilfe einer Azure Resource Manager-Vorlage (ARM-Vorlage) können Sie schnell eine vertrauliche Azure-VM erstellen. Vertrauliche VMs werden sowohl auf AMD-Prozessoren ausgeführt, die von AMD SEV-SNP unterstützt werden, als auch auf Intel-Prozessoren, die von Intel TDX unterstützt werden, um VM-Speicherverschlüsselung und -isolation zu erzielen. Weitere Informationen finden Sie in der Übersicht über Vertrauliche virtuelle Computer.

In diesem Tutorial wird eine vertrauliche VM mit einer benutzerdefinierten Konfiguration bereitgestellt.

Voraussetzungen

Bereitstellen der Vorlage für vertrauliche VMs über die Azure CLI

Sie können eine vertrauliche VM-Vorlage bereitstellen, die optional über eine Verschlüsselung des vertraulichen Betriebssystemdatenträgers mit einem plattformseitig verwalteten Schlüssel verfügt.

So erstellen Sie Ihre vertrauliche VM mithilfe einer ARM-Vorlage über die Azure CLI und stellen sie bereit

  1. Melden Sie sich in der Azure CLI bei Ihrem Azure-Konto an.

    az login
    
  2. Legen Sie Ihr Azure-Abonnement fest. Ersetzen Sie <subscription-id> durch Ihre Abonnement-ID. Vergewissern Sie sich, dass Ihr Abonnement die Voraussetzungen erfüllt.

    az account set --subscription <subscription-id>
    
  3. Legen Sie die Variablen für Ihre vertrauliche VM fest. Geben Sie den Bereitstellungsnamen ($deployName), die Ressourcengruppe ($resourceGroup), den VM-Namen ($vmName) und die Azure-Region ($region) an. Ersetzen Sie die Beispielwerte nach Bedarf durch Ihre eigenen Informationen.

    Hinweis

    Vertrauliche VMs sind nicht an allen Standorten verfügbar. Informationen zu den derzeit unterstützten Standorten finden Sie unter Verfügbare Produkte nach Region.

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

    Ist die angegebene Ressourcengruppe nicht vorhanden, erstellen Sie eine Ressourcengruppe mit diesem Namen.

    az group create -n $resourceGroup -l $region
    
  4. Stellen Ihrer VM mithilfe einer ARM-Vorlage mit einer benutzerdefinierten Parameterdatei in Azure bereit. Für TDX-Bereitstellungen ist hier eine Beispielvorlage: 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
    

Definieren einer benutzerdefinierten Parameterdatei

Wenn Sie eine vertrauliche VM über die Azure-Befehlszeilenschnittstelle (Azure CLI) erstellen, müssen Sie eine benutzerdefinierte Parameterdatei definieren. Führen Sie die folgenden Schritte aus, um eine benutzerdefinierte JSON-Parameterdatei zu erstellen:

  1. Melden Sie sich über die Azure CLI bei Ihrem Azure-Konto an.

  2. Erstellen Sie eine JSON-Parameterdatei. Beispiel: azuredeploy.parameters.json.

  3. Fügen Sie abhängig vom verwendeten Betriebssystemimage entweder das Beispiel einer Windows-Parameterdatei oder das Beispiel einer Linux-Parameterdatei in Ihre Parameterdatei ein.

  4. Bearbeiten Sie ggf. den JSON-Code in der Parameterdatei. Aktualisieren Sie z. B. den Namen des Betriebssystemimages (osImageName) oder den Namen des Administratorbenutzers (adminUsername).

  5. Konfigurieren Sie Ihre Sicherheitstypeinstellung (securityType). Wählen Sie VMGuestStateOnly für „keine Verschlüsselung des vertraulichen Betriebssystemdatenträgers“ aus. Oder wählen Sie DiskWithVMGuestState für „Verschlüsselung des vertraulichen Betriebssystemdatenträgers mit plattformseitig verwaltetem Schlüssel“ aus. Nur für Intel TDX-SKUs und Linux-basierte Images können Kunden den NonPersistedTPM Sicherheitstyp auswählen, der mit einem ephemeren vTPM bereitgestellt werden soll. Verwenden Sie für den NonPersistedTPM Sicherheitstyp die minimale "apiVersion": "2023-09-01" unter Microsoft.Compute/virtualMachines der Vorlagendatei.

  6. Speichern Sie Ihre Parameterdatei.

Beispiel einer Windows-Parameterdatei

Verwenden Sie dieses Beispiel, um eine benutzerdefinierte Parameterdatei für eine Windows-basierte vertrauliche VM zu erstellen.

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

Beispiel einer Linux-Parameterdatei

Verwenden Sie dieses Beispiel, um eine benutzerdefinierte Parameterdatei für eine Linux-basierte vertrauliche VM zu erstellen.

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

Hinweis

Ersetzen Sie den osImageName-Wert.

Bereitstellen einer vertraulichen VM-Vorlage mit der Verschlüsselung des vertraulichen Betriebssystemdatenträgers mit kundenseitig verwaltetem Schlüssel

  1. Melden Sie sich über die Azure CLI bei Ihrem Azure-Konto an.

    az login
    
  2. Legen Sie Ihr Azure-Abonnement fest. Ersetzen Sie <subscription-id> durch Ihre Abonnement-ID. Vergewissern Sie sich, dass Ihr Abonnement die Voraussetzungen erfüllt.

    az account set --subscription <subscription-id>
    
  3. Gewähren Sie dem Mandanten den vertraulichen VM-Dienstprinzipal Confidential VM Orchestrator

    Für diesen Schritt müssen Sie ein globaler Administrator sein, oder Sie benötigen die RBAC-Rolle „Benutzerzugriffsadministrator“. Installieren Sie das Microsoft Graph SDK, um die folgenden Befehle auszuführen.

    Connect-Graph -Tenant "your tenant ID" Application.ReadWrite.All
    New-MgServicePrincipal -AppId bf7b6499-ff71-4aa2-97a4-f372087be7f0 -DisplayName "Confidential VM Orchestrator"
    
  4. Richten Sie Ihren Azure-Schlüsseltresor ein. Informationen zum Verwenden eines verwalteten Azure Key Vault-HSM finden Sie im nächsten Schritt.

    1. Erstellen Sie eine Ressourcengruppe für Ihren Schlüsseltresor. Ihre Schlüsseltresorinstanz und Ihre vertrauliche VM müssen sich in derselben Azure-Region befinden.

      $resourceGroup = <key vault resource group>
      $region = <Azure region>
      az group create --name $resourceGroup --location $region
      
    2. Erstellen Sie eine Schlüsseltresorinstanz mit einer Premium-SKU, und wählen Sie Ihre bevorzugte Region aus. Die Standard-SKU wird nicht unterstützt.

      $KeyVault = <name of key vault>
      az keyvault create --name $KeyVault --resource-group $resourceGroup --location $region --sku Premium --enable-purge-protection
      
    3. Stellen Sie sicher, dass Sie über eine Besitzerrolle in diesem Schlüsseltresor verfügen.

    4. Erteilen Sie dem Schlüsseltresor Confidential VM Orchestrator-Berechtigungen für get und release.

      $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. (Optional) Wenn Sie keinen Azure-Schlüsseltresor verwenden möchten, können Sie stattdessen ein verwaltetes Azure Key Vault-HSM erstellen.

    1. Folgen Sie dem Schnellstart zum Erstellen eines verwalteten Azure Key Vault-HSM, um ein verwaltetes Azure Key Vault-HSM bereitzustellen und zu aktivieren.

    2. Aktivieren Sie den Löschschutz auf dem verwalteten Azure-HSM. Dieser Schritt ist erforderlich, um die Schlüsselfreigabe zu aktivieren.

      az keyvault update-hsm --subscription $subscriptionId -g $resourceGroup --hsm-name $hsm --enable-purge-protection true
      
    3. Gewähren Sie Confidential VM Orchestrator-Berechtigungen für das verwaltete HSM.

      $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. Erstellen Sie einen neuen Schlüssel unter Verwendung von Azure Key Vault. Informationen zum Verwenden eines verwalteten Azure-HSM finden Sie im nächsten Schritt.

    1. Bereiten Sie die Schlüsselfreigaberichtlinie vor, und laden Sie sie auf Ihren lokalen Datenträger herunter.

    2. Erstellen Sie einen neuen Schlüssel.

      $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. Rufen Sie Informationen zu dem Schlüssel ab, den Sie erstellt haben.

      $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. Stellen Sie einen Datenträgerverschlüsselungssatz (DES) mithilfe einer DES ARM-Vorlage (deployDES.json) bereit.

      $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. Weisen Sie der DES-Datei den Schlüsselzugriff zu.

      $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. (Optional) Erstellen Sie einen neuen Schlüssel aus einem verwalteten Azure-HSM.

    1. Bereiten Sie die Schlüsselfreigaberichtlinie vor, und laden Sie sie auf Ihren lokalen Datenträger herunter.

    2. Erstellen Sie den neuen Schlüssel.

      $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. Rufen Sie Informationen zu dem Schlüssel ab, den Sie erstellt haben.

      $encryptionKeyURL = ((az keyvault key show --hsm-name $hsm --name $KeyName) | ConvertFrom-Json).key.kid
      
    4. Stellen Sie einen DES bereit.

      $desName = <name of DES>
      az disk-encryption-set create -n $desName `
       -g $resourceGroup `
       --key-url $encryptionKeyURL
      
    5. Weisen Sie dem DES den Schlüsselzugriff zu.

      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. Stellen Sie Ihre vertrauliche VM mit dem kundenseitig verwalteten Schlüssel bereit.

    1. Rufen Sie die Ressourcen-ID für DES ab.

      $desID = (az disk-encryption-set show -n $desName -g $resourceGroup --query [id] -o tsv)
      
    2. Stellen Sie Ihre vertrauliche VM mithilfe einer vertraulichen VM ARM-Vorlage für AMD SEV-SNP oder Intel TDX und einer Bereitstellungsparameterdatei (z. B. azuredeploy.parameters.win2022.json) mit dem kundenseitig verwalteten Schlüssel bereit.

      $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. Stellen Sie eine Verbindung mit Ihrer vertraulichen VM her, um sicherzustellen, dass die Erstellung erfolgreich war.

Nächste Schritte