Partilhar via


Guia de início rápido: implantar VM confidencial com modelo ARM

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

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

Pré-requisitos

  • Uma subscrição do Azure. As contas de avaliação gratuita não têm acesso às VMs usadas neste tutorial. Uma opção é usar uma assinatura paga conforme o uso.
  • Se você quiser implantar a partir da CLI do Azure, instale o PowerShell e instale a CLI do Azure.

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 sua VM confidencial usando um modelo ARM por meio da CLI do Azure:

  1. Entre na sua conta do Azure na CLI do Azure.

    az login
    
  2. Defina sua assinatura do Azure. Substitua <subscription-id> pelo identificador da sua subscrição. Certifique-se de usar 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.

    Nota

    As VMs confidenciais não estão disponíveis em todos os locais. Para locais atualmente suportados, consulte 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 sua VM no Azure usando um modelo ARM com um arquivo de parâmetro personalizado. Para implantações TDX, aqui está 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 Interface de Linha de Comando do Azure (CLI do Azure), você precisa definir um arquivo de parâmetro personalizado. Para criar um arquivo de parâmetro JSON personalizado:

  1. Inicie sessão na sua conta do Azure através da CLI do Azure.

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

  3. Dependendo da imagem do sistema operacional que você está usando, copie o arquivo de parâmetro de exemplo do Windows ou o arquivo de parâmetro de exemplo do Linux para o arquivo de parâmetros.

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

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

  6. Salve seu arquivo de parâmetros.

Exemplo de arquivo de parâmetro do Windows

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

Nota

Substitua o valor osImageName de acordo.

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

  1. Inicie sessão na sua conta do Azure através da CLI do Azure.

    az login
    
  2. Defina sua assinatura do Azure. Substitua <subscription-id> pelo identificador da sua subscrição. Certifique-se de usar uma assinatura que atenda aos pré-requisitos.

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

    Para esta etapa, você precisa ser um Administrador Global ou precisa ter a função RBAC de Administrador de Acesso de Usuário. Instale 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 seu cofre de chaves do Azure. Para saber como usar um HSM gerenciado do Azure Key Vault, 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 e selecione sua região preferida. O SKU padrão não é suportado.

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

    4. Conceda Confidential VM Orchestrator permissões ao cofre de chaves e release ao get 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 não quiser usar um cofre de chaves do Azure, você pode 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 Azure Key Vault Managed HSM.

    2. Habilite a proteção contra limpeza no HSM gerenciado do Azure. Esta 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 Confidential VM Orchestrator permissões 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 Cofre de Chaves do Azure. Para saber como usar um HSM gerenciado do Azure, consulte a próxima etapa.

    1. Prepare e transfira a política de libertação de chaves para o 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 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 conjunto de criptografia de disco (DES) usando um modelo DES ARM (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 a partir de um HSM Gerenciado do Azure.

    1. Prepare e transfira a política de libertação de chaves para o 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 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 um modelo ARM de VM confidencial para AMD SEV-SNP ou 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. Conecte-se à sua VM confidencial para garantir que a criação foi bem-sucedida.

Próximos passos