Início Rápido: Implantar uma VM confidencial com o modelo do ARM

Você pode usar um modelo do ARM (modelo do Azure Resource Manager) para criar uma VM confidencial do Azure rapidamente. As VMs confidenciais são executadas nos processadores AMD, com suporte dos processadores AMD SEV-SNP, e nos processadores Intel, com suporte do Intel TDX, para obtenção da criptografia e isolamento de memória da VM. Para obter mais informações, confira Visão geral da VM confidencial.

Este tutorial aborda a implantação de uma VM confidencial com uma configuração personalizada.

Pré-requisitos

Implantar modelo de VM confidencial com a CLI do Azure

Você pode implantar um modelo de VM confidencial que tenha criptografia confidencial de disco do sistema operacional opcional por meio de uma chave gerenciada pela plataforma.

Para criar e implantar a VM confidencial usando um modelo do ARM por meio da CLI do Azure:

  1. Entre em sua conta do Azure usando a CLI do Azure.

    az login
    
  2. Defina sua assinatura do Azure. Substitua <subscription-id> pelo identificador de assinatura. Use uma assinatura que atenda aos pré-requisitos.

    az account set --subscription <subscription-id>
    
  3. Defina as variáveis para sua VM confidencial. Forneça o nome da implantação ($deployName), o grupo de recursos ($resourceGroup), o nome da VM ($vmName) e a região do Azure ($region). Substitua os valores de exemplo por suas próprias informações.

    Observação

    As VMs confidenciais não estão disponíveis em todos os locais. Para locais com suporte no momento, confira quais produtos de VM estão disponíveis por região do Azure.

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

    Se o grupo de recursos especificado não existir, crie um grupo de recursos com esse nome.

    az group create -n $resourceGroup -l $region
    
  4. Implante a VM no Azure usando um modelo do ARM com um arquivo de parâmetro personalizado. Para implantações do TDX, este é um modelo de exemplo: 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
    

Definir arquivo de parâmetro personalizado

Ao criar uma VM confidencial por meio da CLI do Azure (Interface de linha de comando do Azure), você precisa definir um arquivo de parâmetro personalizado. Para criar um arquivo de parâmetro JSON personalizado:

  1. Entre em sua conta do Azure usando a CLI do Azure.

  2. Crie um arquivo de parâmetro JSON. Por exemplo, azuredeploy.parameters.json.

  3. Dependendo da imagem do SO que você está usando, copie o arquivo de parâmetro do Windows de exemplo ou o arquivo de parâmetro do Linux de exemplo em seu arquivo de parâmetro.

  4. Edite o código JSON no arquivo de parâmetro, conforme necessário. Por exemplo, atualize o nome da imagem do SO (osImageName) ou o nome de usuário do administrador (adminUsername).

  5. Defina a configuração de tipo de segurança (securityType). Escolha VMGuestStateOnly para opção de sem criptografia confidencial de disco do sistema operacional. Ou escolha DiskWithVMGuestState para opção de criptografia confidencial de disco do sistema operacional com uma chave gerenciada pela plataforma. Para SKUs do Intel TDX e imagens baseadas em Linux, os clientes podem escolher o tipo de segurança NonPersistedTPM a ser implantado com um vTPM efêmero. No caso do tipo de segurança NonPersistedTPM, use a “apiVersion” mínima: “2023-09-01” em Microsoft.Compute/virtualMachines no arquivo de modelo.

  6. Salve o arquivo de parâmetro.

Arquivo de parâmetro do Windows de exemplo

Use este exemplo para criar um arquivo de parâmetro personalizado para uma VM confidencial baseada em 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>"
    }
  }
}

Exemplo de arquivo de parâmetro do Linux

Use este exemplo para criar um arquivo de parâmetro personalizado para uma VM confidencial baseada em 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>
    }
  }
}

Observação

Substitua o valor de osImageName na conformidade.

Implantar modelo de VM confidencial com criptografia confidencial de disco do sistema operacional por meio de chave gerenciada pelo cliente

  1. Entre em sua conta do Azure usando a CLI do Azure.

    az login
    
  2. Defina sua assinatura do Azure. Substitua <subscription-id> pelo identificador de assinatura. Use uma assinatura que atenda aos pré-requisitos.

    az account set --subscription <subscription-id>
    
  3. Conceder entidade de serviço Confidential VM Orchestrator de VM confidencial ao locatário

    Para esta etapa, é necessário ser um administrador global ou ter a função RBAC de Administrador de Acesso do Usuário. Instalar o SDK do Microsoft Graph para executar os comandos abaixo.

    Connect-Graph -Tenant "your tenant ID" Application.ReadWrite.All
    New-MgServicePrincipal -AppId bf7b6499-ff71-4aa2-97a4-f372087be7f0 -DisplayName "Confidential VM Orchestrator"
    
  4. Configure o seu cofre de chaves do Azure. Para saber como usar um HSM gerenciado do Azure Key Vault em vez disso, consulte a próxima etapa.

    1. Crie um grupo de recursos para o cofre de chaves. Sua instância do cofre de chaves e sua VM confidencial devem estar na mesma região do Azure.

      $resourceGroup = <key vault resource group>
      $region = <Azure region>
      az group create --name $resourceGroup --location $region
      
    2. Crie uma instância do cofre de chaves com um SKU Premium em sua região preferida. O SKU Standard não é compatível.

      $KeyVault = <name of key vault>
      az keyvault create --name $KeyVault --resource-group $resourceGroup --location $region --sku Premium --enable-purge-protection
      
    3. Verifique se você tem uma função de proprietário nesse cofre de chaves.

    4. Dê permissões Confidential VM Orchestrator a get e release o cofre de chaves.

      $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) Se você não quiser usar um cofre de chaves do Azure, poderá criar um HSM Gerenciado do Azure Key Vault.

    1. Siga o início rápido para criar um HSM gerenciado do Azure Key Vault para provisionar e ativar o HSM Gerenciado do Azure Key Vault.

    2. Habilite a proteção de limpeza no HSM Gerenciado do Azure. Essa etapa é necessária para habilitar a liberação de chaves.

      az keyvault update-hsm --subscription $subscriptionId -g $resourceGroup --hsm-name $hsm --enable-purge-protection true
      
    3. Conceda permissões Confidential VM Orchestrator ao HSM gerenciado.

      $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. Crie uma nova chave usando o Azure Key Vault. Para saber como usar um HSM gerenciado do Azure em vez disso, consulte a próxima etapa.

    1. Prepare e baixe a política de liberação de chaves no disco local.

    2. Crie uma nova chave.

      $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. Obtenha informações sobre a chave que você criou.

      $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. Implante um DES (Conjunto de Criptografia de Disco) usando um modelo do 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. Atribua acesso de chave ao arquivo 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) Crie uma nova chave de um HSM Gerenciado do Azure.

    1. Prepare e baixe a política de liberação de chaves no disco local.

    2. Crie a nova chave.

      $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. Obtenha informações sobre a chave que você criou.

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

      $desName = <name of DES>
      az disk-encryption-set create -n $desName `
       -g $resourceGroup `
       --key-url $encryptionKeyURL
      
    5. Atribua acesso de chave ao 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. Implante sua VM confidencial com a chave gerenciada pelo cliente.

    1. Obtenha a ID do recurso para o DES.

      $desID = (az disk-encryption-set show -n $desName -g $resourceGroup --query [id] -o tsv)
      
    2. Implante sua VM confidencial usando o modelo do ARM da VM confidencial para o AMD SEV-SNP ou o Intel TDX e um arquivo de parâmetro de implantação (por exemplo, azuredeploy.parameters.win2022.json) com a chave gerenciada pelo 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. Conexão para sua VM confidencial para verificar se a criação foi bem-sucedida.

Próximas etapas