Inicio rápido: Implementación de una máquina virtual confidencial mediante una plantilla de ARM

Puede usar una plantilla de Azure Resource Manager (ARM) para crear rápidamente una máquina virtual confidencial. Las máquinas virtuales confidenciales se ejecutan en ambos procesadores AMD respaldados por procesadores AMD SEV-SNP e Intel respaldados por Intel TDX para lograr el cifrado y el aislamiento de memoria de la máquina virtual. Para más información, consulte Información general sobre las máquinas virtuales confidenciales.

Este tutorial aborda la implementación de una máquina virtual confidencial con una configuración personalizada.

Requisitos previos

Implementación de una plantilla de máquina virtual confidencial mediante la CLI de Azure

Puede implementar una plantilla de máquina virtual confidencial que tenga cifrado confidencial del disco del sistema operativo opcional mediante una clave que administra la plataforma.

Para crear e implementar una máquina virtual confidencial mediante una plantilla de ARM a través de la CLI de Azure:

  1. Inicie sesión en su cuenta de Azure, en la CLI de Azure.

    az login
    
  2. Establezca su suscripción a Azure. Reemplace <subscription-id> por el identificador de suscripción. Asegúrese de usar una suscripción que cumpla los requisitos previos.

    az account set --subscription <subscription-id>
    
  3. Establezca las variables de la máquina virtual confidencial. Proporcione el nombre de implementación ($deployName), el grupo de recursos ($resourceGroup), el nombre de la máquina virtual ($vmName) y la región de Azure ($region). Reemplace los valores de ejemplo por su propia información.

    Nota

    Las máquinas virtuales confidenciales no están disponibles en todas las ubicaciones. Para las ubicaciones admitidas actualmente, consulte qué productos de máquina virtual están disponibles en la región de Azure.

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

    Si el grupo de recursos especificado no existe, cree un grupo de recursos con ese nombre.

    az group create -n $resourceGroup -l $region
    
  4. Implementación de la máquina virtual en Azure mediante una plantilla de ARM con un archivo de parámetros personalizado. En el caso de las implementaciones de TDX, esta es una plantilla de ejemplo: 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
    

Definición de un archivo de parámetros personalizado

Al crear una máquina virtual confidencial a través de la interfaz de línea de comandos de Azure (CLI de Azure), debe definir un archivo de parámetros personalizado. Para crear un archivo de parámetros JSON personalizado:

  1. Inicie sesión en su cuenta de Azure mediante la CLI de Azure.

  2. Cree un archivo de parámetros JSON. Por ejemplo, azuredeploy.parameters.json.

  3. En función de la imagen del sistema operativo que use, puede copiar el archivo de parámetros de Windows de ejemplo o el archivo de parámetros de Linux de ejemplo en su archivo de parámetros.

  4. Edite el código JSON en el archivo de parámetros según sea necesario. Por ejemplo, actualice el nombre de la imagen del sistema operativo (osImageName) o el nombre de usuario de administrador (adminUsername).

  5. Configure la configuración del tipo de seguridad (securityType). Elija VMGuestStateOnly para no usar ningún cifrado confidencial de disco del sistema operativo. O bien, elija DiskWithVMGuestState para usar un cifrado confidencial del disco del sistema operativo con una clave administrada por la plataforma. Solo para las SKU de Intel TDX y las imágenes basadas en Linux, los clientes pueden elegir el tipo de seguridad NonPersistedTPM implementar con un vTPM efímero. Para el tipo de seguridad NonPersistedTPM use el valor mínimo de "apiVersion": "2023-09-01" en Microsoft.Compute/virtualMachines en el archivo de plantilla.

  6. Guarde el archivo de parámetros.

Ejemplo del archivo de parámetros de Windows

Use este ejemplo para crear un archivo de parámetros personalizado para una máquina virtual confidencial basada en 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>"
    }
  }
}

Archivo de parámetros de Linux de ejemplo

Use este ejemplo para crear un archivo de parámetros personalizado para una máquina virtual confidencial basada en 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:

Reemplace el valor osImageName según corresponda.

Implementación de una plantilla de máquina virtual confidencial con cifrado confidencial del disco del sistema operativo mediante una clave administrada por el cliente

  1. Inicie sesión en su cuenta de Azure mediante la CLI de Azure.

    az login
    
  2. Establezca su suscripción a Azure. Reemplace <subscription-id> por el identificador de suscripción. Asegúrese de usar una suscripción que cumpla los requisitos previos.

    az account set --subscription <subscription-id>
    
  3. Concesión de una entidad de servicio de máquina virtual confidencial Confidential VM Orchestrator al inquilino

    Para este paso es preciso ser Administración global o tener el rol RBAC de administrador de acceso de usuario. Instale el SDK de Microsoft Graph para ejecutar los comandos siguientes.

    Connect-Graph -Tenant "your tenant ID" Application.ReadWrite.All
    New-MgServicePrincipal -AppId bf7b6499-ff71-4aa2-97a4-f372087be7f0 -DisplayName "Confidential VM Orchestrator"
    
  4. Configure su almacén de claves de Azure. Para obtener información sobre cómo usar un HSM administrado con Azure Key Vault en su lugar, consulte el paso siguiente.

    1. Cree un grupo de recursos para su almacén de claves. La instancia del almacén de claves y la máquina virtual confidencial deben estar en la misma región de Azure.

      $resourceGroup = <key vault resource group>
      $region = <Azure region>
      az group create --name $resourceGroup --location $region
      
    2. Cree una instancia del almacén de claves con una SKU Premium y seleccione su región preferida. No se admite la SKU estándar.

      $KeyVault = <name of key vault>
      az keyvault create --name $KeyVault --resource-group $resourceGroup --location $region --sku Premium --enable-purge-protection
      
    3. Asegúrese de que tiene un rol de propietario en este almacén de claves.

    4. Conceda a Confidential VM Orchestrator permisos para usar get y release con el almacén de claves.

      $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. (Opcional) Si no desea usar ningún almacén de claves de Azure, puede crear en su lugar un HSM administrado por Azure Key Vault.

    1. Siga el inicio rápido para crear un HSM administrado por Azure Key Vault para aprovisionar y activar HSM administrado por Azure Key Vault.

    2. Habilite la protección de purga en el HSM administrado por Azure. Este paso es necesario para habilitar la versión de la clave.

      az keyvault update-hsm --subscription $subscriptionId -g $resourceGroup --hsm-name $hsm --enable-purge-protection true
      
    3. Conceda a Confidential VM Orchestrator permisos a HSM administrado.

      $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. Cree una nueva clave con Azure Key Vault. Para obtener información sobre cómo usar un HSM administrado por Azure en su lugar, consulte el paso siguiente.

    1. Prepare y descargue la directiva de versiones de claves en el disco local.

    2. Cree una nueva clave.

      $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. Obtenga información sobre la clave que ha creado.

      $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. Implemente un conjunto de cifrado de disco (DES) mediante una plantilla ARM de 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. Asigne acceso de clave al archivo 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. (Opcional) Cree una nueva clave a partir de un HSM administrado por Azure.

    1. Prepare y descargue la directiva de versiones de claves en el disco local.

    2. Cree la nueva clave.

      $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. Obtenga información sobre la clave que ha creado.

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

      $desName = <name of DES>
      az disk-encryption-set create -n $desName `
       -g $resourceGroup `
       --key-url $encryptionKeyURL
      
    5. Asigne acceso de clave al 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. Implemente la máquina virtual confidencial con la clave administrada por el cliente.

    1. Obtenga el identificador de recurso para el DES.

      $desID = (az disk-encryption-set show -n $desName -g $resourceGroup --query [id] -o tsv)
      
    2. Implemente la máquina virtual confidencial mediante una plantilla de ARM de máquina virtual confidencial para AMD SEV-SNP o Intel TDX y un archivo de parámetros de implementación (por ejemplo, azuredeploy.parameters.win2022.json) con la clave administrada por el 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. Conéctese a la máquina virtual confidencial para asegurarse de que la creación se realizó correctamente.

Pasos siguientes