Snabbstart: Distribuera konfidentiell virtuell dator med ARM-mall

Du kan använda en Azure Resource Manager-mall (ARM-mall) för att snabbt skapa en konfidentiell virtuell Azure-dator. Konfidentiella virtuella datorer körs på både AMD-processorer som backas upp av AMD SEV-SNP- och Intel-processorer som backas upp av Intel TDX för att uppnå vm-minneskryptering och isolering. Mer information finns i Översikt över konfidentiell virtuell dator.

I den här självstudien beskrivs distribution av en konfidentiell virtuell dator med en anpassad konfiguration.

Förutsättningar

Distribuera en mall för konfidentiell virtuell dator med Azure CLI

Du kan distribuera en mall för konfidentiell virtuell dator som har valfri kryptering av os-disken konfidentiellt via en plattformshanterad nyckel.

Så här skapar och distribuerar du din konfidentiella virtuella dator med hjälp av en ARM-mall via Azure CLI:

  1. Logga in på ditt Azure-konto i Azure CLI.

    az login
    
  2. Ställ in din Azure-prenumeration. Ersätt <subscription-id> med din prenumerationsidentifierare. Se till att använda en prenumeration som uppfyller kraven.

    az account set --subscription <subscription-id>
    
  3. Ange variablerna för den konfidentiella virtuella datorn. Ange distributionsnamnet ($deployName), resursgruppen ($resourceGroup), namnet på den virtuella datorn ($vmName) och Azure-regionen ($region). Ersätt exempelvärdena med din egen information.

    Kommentar

    Konfidentiella virtuella datorer är inte tillgängliga på alla platser. För platser som stöds för närvarande, se vilka VM-produkter som är tillgängliga per Azure-region.

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

    Om den angivna resursgruppen inte finns skapar du en resursgrupp med det namnet.

    az group create -n $resourceGroup -l $region
    
  4. Distribuera den virtuella datorn till Azure med hjälp av en ARM-mall med en anpassad parameterfil och mallfil.

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

Definiera anpassad parameterfil

När du skapar en konfidentiell virtuell dator via Azures kommandoradsgränssnitt (Azure CLI) måste du definiera en anpassad parameterfil. Så här skapar du en anpassad JSON-parameterfil:

  1. Logga in på ditt Azure-konto via Azure CLI.

  2. Skapa en JSON-parameterfil. Exempel: azuredeploy.parameters.json

  3. Beroende på vilken OS-avbildning du använder kopierar du antingen Windows-exempelparameterfilen eller Linux-exempelparameterfilen till parameterfilen.

  4. Redigera JSON-koden i parameterfilen efter behov. Du kan till exempel uppdatera os-avbildningsnamnet (osImageName) eller administratörens användarnamn (adminUsername).

  5. Konfigurera inställningen för säkerhetstyp (securityType). Välj VMGuestStateOnly om det inte finns någon konfidentiell kryptering för OS-diskar. Du kan också välja DiskWithVMGuestState konfidentiell kryptering för OS-diskar med en plattformshanterad nyckel. Endast för Intel TDX-SKU:er och Linux-baserade avbildningar kan kunder välja säkerhetstypen NonPersistedTPM för distribution med en temporär vTPM. NonPersistedTPM För säkerhetstypen använder du den minsta "apiVersion": "2023-09-01" under Microsoft.Compute/virtualMachines i mallfilen.

  6. Spara parameterfilen.

Exempel på Windows-parameterfil

Använd det här exemplet om du vill skapa en anpassad parameterfil för en Windows-baserad konfidentiell virtuell dator.

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

Exempel på Linux-parameterfil

Använd det här exemplet om du vill skapa en anpassad parameterfil för en Linux-baserad konfidentiell virtuell dator.

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

Kommentar

Ersätt osImageName-värdet i enlighet med detta.

Distribuera en konfidentiell mall för virtuell dator med konfidentiell kryptering av os-diskar via kundhanterad nyckel

  1. Logga in på ditt Azure-konto via Azure CLI.

    az login
    
  2. Ställ in din Azure-prenumeration. Ersätt <subscription-id> med din prenumerationsidentifierare. Se till att använda en prenumeration som uppfyller kraven.

    az account set --subscription <subscription-id>
    
  3. Bevilja konfidentiellt huvudnamn Confidential VM Orchestrator för vm-tjänsten till klientorganisationen

    För det här steget måste du antingen vara global administratör eller ha RBAC-rollen Administratör för användaråtkomst. Installera Microsoft Graph SDK för att köra kommandona nedan.

    Connect-Graph -Tenant "your tenant ID" Application.ReadWrite.All
    New-MgServicePrincipal -AppId bf7b6499-ff71-4aa2-97a4-f372087be7f0 -DisplayName "Confidential VM Orchestrator"
    
  4. Konfigurera ditt Azure Key Vault. Information om hur du använder Azure Key Vault Managed HSM i stället finns i nästa steg.

    1. Skapa en resursgrupp för ditt nyckelvalv. Din key vault-instans och din konfidentiella virtuella dator måste finnas i samma Azure-region.

      $resourceGroup = <key vault resource group>
      $region = <Azure region>
      az group create --name $resourceGroup --location $region
      
    2. Skapa en key vault-instans med en Premium SKU och välj önskad region. Standard-SKU:n stöds inte.

      $KeyVault = <name of key vault>
      az keyvault create --name $KeyVault --resource-group $resourceGroup --location $region --sku Premium --enable-purge-protection
      
    3. Kontrollera att du har en ägarroll i det här nyckelvalvet.

    4. Ge Confidential VM Orchestrator behörigheter till get och release nyckelvalvet.

      $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. (Valfritt) Om du inte vill använda ett Azure Key Vault kan du skapa en Hanterad HSM för Azure Key Vault i stället.

    1. Följ snabbstarten för att skapa en Azure Key Vault Managed HSM för att etablera och aktivera Azure Key Vault Managed HSM.

    2. Aktivera rensningsskydd på Azure Managed HSM. Detta steg krävs för att frigöra nyckeln.

      az keyvault update-hsm --subscription $subscriptionId -g $resourceGroup --hsm-name $hsm --enable-purge-protection true
      
    3. Ge Confidential VM Orchestrator behörighet till den hanterade HSM-enheten.

      $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. Skapa en ny nyckel med Hjälp av Azure Key Vault. Mer information om hur du använder en Azure Managed HSM finns i nästa steg.

    1. Skapa en ny nyckel med az keyvault key create

      $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 --default-cvm-policy
      

      Kommentar

      I regioner med nya utbyggnader kanske slutpunkter för Microsoft Azure Attestation (MAA) inte är tillgängliga när flaggan --default-cvm-policy används. Som en lösning kan du använda följande PowerShell-skript för att hämta den regionala MAA-slutpunktens URL:

      $sub = "<subscription-id>"
      az account set --subscription $sub
      $token = Get-AzAccessToken
      $region = "<region-name>"
      $url = "https://management.azure.com/subscriptions/$sub/providers/Microsoft.Attestation/Locations/$region/defaultProvider?api-version=2021-06-01"
      $r = Invoke-WebRequest -Uri $url -Method Get -Headers @{'Authorization' = 'Bearer ' + $token.Token}
      $d = $r.content | ConvertFrom-Json
      $d.properties.attestUri
      

      Ersätt <subscription-id> med ditt Azure prenumerations-ID och <region-name> med måldistributionsregionen.

    2. Hämta information om nyckeln som du skapade.

      $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
      
    3. Distribuera en diskkrypteringsuppsättning (DES) med hjälp av en DES ARM-mall (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
      
    4. Tilldela nyckelåtkomst till DES-filen.

      $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. (Valfritt) Skapa en ny nyckel från en Azure Managed HSM.

    1. Skapa en ny nyckel med az keyvault key create

      $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 --default-cvm-policy
      
    2. Hämta information om nyckeln som du skapade.

      $encryptionKeyURL = ((az keyvault key show --hsm-name $hsm --name $KeyName) | ConvertFrom-Json).key.kid
      
    3. Driftsätt en DES.

      $desName = <name of DES>
      az disk-encryption-set create -n $desName `
       -g $resourceGroup `
       --key-url $encryptionKeyURL
      
    4. Tilldela nyckelåtkomst till 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. Distribuera din konfidentiella virtuella dator med den kundhanterade nyckeln.

    1. Hämta resurs-ID:t för DES.

      $desID = (az disk-encryption-set show -n $desName -g $resourceGroup --query [id] -o tsv)
      
    2. Distribuera den konfidentiella virtuella datorn med hjälp av en konfidentiell ARM-mall för den virtuella datorn för Intel TDX och en distributionsparameterfil (till exempel azuredeploy.parameters.win2022.json) med den kundhanterade nyckeln.

      $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. Anslut till den konfidentiella virtuella datorn för att se till att skapandet lyckades.

Nästa steg