Quickstart: Vertrouwelijke VM implementeren met ARM-sjabloon

U kunt een Azure Resource Manager-sjabloon (ARM-sjabloon) gebruiken om snel een vertrouwelijke Azure-VM te maken. Vertrouwelijke VM's worden uitgevoerd op beide AMD-processors die worden ondersteund door AMD SEV-SNP en Intel-processors die worden ondersteund door Intel TDX om versleuteling en isolatie van VM-geheugen te bereiken. Zie Overzicht van vertrouwelijke VM's voor meer informatie.

In deze zelfstudie wordt de implementatie van een vertrouwelijke VM behandeld met een aangepaste configuratie.

Vereisten

Een vertrouwelijke VM-sjabloon implementeren met Azure CLI

U kunt een vertrouwelijke VM-sjabloon implementeren met optionele vertrouwelijke versleuteling van besturingssysteemschijven via een door het platform beheerde sleutel.

Uw vertrouwelijke VM maken en implementeren met behulp van een ARM-sjabloon via de Azure CLI:

  1. Meld u aan bij uw Azure-account in de Azure CLI.

    az login
    
  2. Stel uw Azure-abonnement in. Vervang door <subscription-id> uw abonnements-id. Zorg ervoor dat u een abonnement gebruikt dat voldoet aan de vereisten.

    az account set --subscription <subscription-id>
    
  3. Stel de variabelen voor uw vertrouwelijke VM in. Geef de implementatienaam ($deployName), de resourcegroep ($resourceGroup), de vm-naam ($vmName) en de Azure-regio () op$region. Vervang de voorbeeldwaarden door uw eigen gegevens.

    Notitie

    Vertrouwelijke VM's zijn niet beschikbaar op alle locaties. Voor momenteel ondersteunde locaties kunt u zien welke VM-producten beschikbaar zijn per Azure-regio.

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

    Als de opgegeven resourcegroep niet bestaat, maakt u een resourcegroep met die naam.

    az group create -n $resourceGroup -l $region
    
  4. Implementeer uw VIRTUELE machine in Azure met behulp van een ARM-sjabloon met een aangepast parameterbestand. Voor TDX-implementaties is hier een voorbeeldsjabloon: 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
    

Aangepast parameterbestand definiëren

Wanneer u een vertrouwelijke VM maakt via de Azure-opdrachtregelinterface (Azure CLI), moet u een aangepast parameterbestand definiëren. Een aangepast JSON-parameterbestand maken:

  1. Meld u aan bij uw Azure-account via de Azure CLI.

  2. Maak een JSON-parameterbestand. Bijvoorbeeld: azuredeploy.parameters.json.

  3. Afhankelijk van de installatiekopie van het besturingssysteem dat u gebruikt, kopieert u het voorbeeldparameterbestand van Windows of het voorbeeld van het Linux-parameterbestand naar het parameterbestand .

  4. Bewerk de JSON-code in het parameterbestand indien nodig. Werk bijvoorbeeld de naam van de installatiekopieën van het besturingssysteem (osImageName) of de gebruikersnaam van de beheerder (adminUsername) bij.

  5. Configureer de instelling van uw beveiligingstype (securityType). Kies VMGuestStateOnly voor geen vertrouwelijke versleuteling van besturingssysteemschijven. Of kies DiskWithVMGuestState voor vertrouwelijke versleuteling van besturingssysteemschijven met een door het platform beheerde sleutel. Alleen voor Intel TDX-SKU's en linux-installatiekopieën kunnen klanten het NonPersistedTPM beveiligingstype kiezen dat moet worden geïmplementeerd met een kortstondige vTPM. Gebruik voor het NonPersistedTPM beveiligingstype de minimale 'apiVersion': '2023-09-01' onder Microsoft.Compute/virtualMachines in het sjabloonbestand.

  6. Sla het parameterbestand op.

Voorbeeld van windows-parameterbestand

Gebruik dit voorbeeld om een aangepast parameterbestand te maken voor een vertrouwelijke windows-VM.

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

Voorbeeld van een Linux-parameterbestand

Gebruik dit voorbeeld om een aangepast parameterbestand te maken voor een op Linux gebaseerde vertrouwelijke VM.

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

Notitie

Vervang de waarde osImageName dienovereenkomstig.

Een vertrouwelijke VM-sjabloon implementeren met vertrouwelijke versleuteling van besturingssysteemschijven via door de klant beheerde sleutel

  1. Meld u aan bij uw Azure-account via de Azure CLI.

    az login
    
  2. Stel uw Azure-abonnement in. Vervang door <subscription-id> uw abonnements-id. Zorg ervoor dat u een abonnement gebruikt dat voldoet aan de vereisten.

    az account set --subscription <subscription-id>
    
  3. Vertrouwelijke VM-service-principal Confidential VM Orchestrator verlenen aan tenant

    Voor deze stap moet u een globale Beheer zijn of moet u de rol Gebruikerstoegang Beheer istrator RBAC hebben. Installeer Microsoft Graph SDK om de onderstaande opdrachten uit te voeren.

    Connect-Graph -Tenant "your tenant ID" Application.ReadWrite.All
    New-MgServicePrincipal -AppId bf7b6499-ff71-4aa2-97a4-f372087be7f0 -DisplayName "Confidential VM Orchestrator"
    
  4. Uw Azure-sleutelkluis instellen. Zie de volgende stap voor het gebruik van een beheerde HSM van Azure Key Vault.

    1. Maak een resourcegroep voor uw sleutelkluis. Uw sleutelkluisexemplaren en uw vertrouwelijke VM moeten zich in dezelfde Azure-regio bevinden.

      $resourceGroup = <key vault resource group>
      $region = <Azure region>
      az group create --name $resourceGroup --location $region
      
    2. Maak een sleutelkluisexemplaren met een premium-SKU en selecteer uw voorkeursregio. De standaard-SKU wordt niet ondersteund.

      $KeyVault = <name of key vault>
      az keyvault create --name $KeyVault --resource-group $resourceGroup --location $region --sku Premium --enable-purge-protection
      
    3. Zorg ervoor dat u de rol van eigenaar in deze sleutelkluis hebt.

    4. Geef Confidential VM Orchestrator machtigingen aan get en release de sleutelkluis.

      $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. (Optioneel) Als u geen Azure-sleutelkluis wilt gebruiken, kunt u in plaats daarvan een door Azure Key Vault beheerde HSM maken.

    1. Volg de quickstart om een met Azure Key Vault beheerde HSM te maken om beheerde HSM van Azure Key Vault in te richten en te activeren.

    2. Schakel beveiliging tegen opschonen in op de Azure Managed HSM. Deze stap is vereist om sleutelrelease in te schakelen.

      az keyvault update-hsm --subscription $subscriptionId -g $resourceGroup --hsm-name $hsm --enable-purge-protection true
      
    3. Geef Confidential VM Orchestrator machtigingen aan beheerde 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. Maak een nieuwe sleutel met behulp van Azure Key Vault. Zie de volgende stap voor het gebruik van een door Azure beheerde HSM.

    1. Bereid het beleid voor sleutelrelease voor op uw lokale schijf en download het.

    2. Maak een nieuwe sleutel.

      $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. Informatie ophalen over de sleutel die u hebt gemaakt.

      $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. Implementeer een SCHIJFversleutelingsset (DES) met behulp van een DES ARM-sjabloon (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. Wijs sleuteltoegang toe aan het DES-bestand.

      $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. (Optioneel) Maak een nieuwe sleutel op basis van een door Azure beheerde HSM.

    1. Bereid het beleid voor sleutelrelease voor op uw lokale schijf en download het.

    2. Maak de nieuwe sleutel.

      $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. Informatie ophalen over de sleutel die u hebt gemaakt.

      $encryptionKeyURL = ((az keyvault key show --hsm-name $hsm --name $KeyName) | ConvertFrom-Json).key.kid
      
    4. Een DES implementeren.

      $desName = <name of DES>
      az disk-encryption-set create -n $desName `
       -g $resourceGroup `
       --key-url $encryptionKeyURL
      
    5. Wijs sleuteltoegang toe aan de 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. Implementeer uw vertrouwelijke VM met de door de klant beheerde sleutel.

    1. Haal de resource-id voor de DES op.

      $desID = (az disk-encryption-set show -n $desName -g $resourceGroup --query [id] -o tsv)
      
    2. Implementeer uw vertrouwelijke VM met behulp van een VERTROUWELIJKE VM ARM-sjabloon voor AMD SEV-SNP of Intel TDX en een implementatieparameterbestand (bijvoorbeeld azuredeploy.parameters.win2022.json) met de door de klant beheerde sleutel.

      $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. Verbinding maken naar uw vertrouwelijke VM om ervoor te zorgen dat het maken is geslaagd.

Volgende stappen