Guia de instruções de Liberação de Chave Segura com VMs Confidenciais

O artigo abaixo descreve como executar uma Liberação de Chave Segura (SKR) do Azure Key Vault quando seus aplicativos estão em execução com uma máquina virtual confidencial baseada em AMD SEV-SNP. Para saber mais sobre a Liberação de Chave Segura e a Computação Confidencial do Azure, acesse aqui..

A SKR exige que um aplicativo que executa SKR passe por um fluxo de atestado de convidado remoto usando o Atestado do Microsoft Azure (MAA), conforme descrito aqui.

Fluxo geral e arquitetura

Para permitir que o Azure Key Vault libere uma chave para uma máquina virtual confidencial atestada, há determinadas etapas que precisam ser seguidas:

  1. Atribua uma identidade gerenciada à máquina virtual confidencial. Há suporte para a identidade gerenciada atribuída pelo sistema e para a identidade gerenciada atribuída pelo usuário.
  2. Defina uma política de acesso do Key Vault para conceder à identidade gerenciada a permissão de "liberação" de chave. Uma política permite que a máquina virtual confidencial acesse o Key Vault e execute a operação de liberação. Se estiver usando o HSM Gerenciado do Key Vault, atribua a associação da função "Usuário de Liberação do Serviço de Criptografia do HSM Gerenciado".
  3. Crie uma chave do Key Vault marcada como exportável e tenha uma política de liberação associada. A política de liberação de chave associa a chave a uma máquina virtual confidencial atestada e a chave só pode ser usada para a finalidade desejada.
  4. Para liberar a chave, envie uma solicitação HTTP para o Key Vault da máquina virtual confidencial. A solicitação HTTP deve incluir o relatório de plataforma atestada de VMs confidenciais no corpo da solicitação. O relatório de plataforma atestada é usado para verificar a confiabilidade do estado da plataforma habilitada para o Ambiente de Execução Confiável, como a VM Confidencial. O serviço de Atestado do Microsoft Azure pode ser usado para criar o relatório de plataforma atestada e incluí-lo na solicitação.

Diagrama das operações mencionadas acima, que executaremos.

Implantando um cofre de chaves do Azure

Configure o AKV Premium ou o AKV mHSM com uma chave exportável. Siga as instruções detalhadas de configurando chaves exportáveis de SKR

Bicep

@description('Required. Specifies the Azure location where the key vault should be created.')
param location string = resourceGroup().location

@description('Specifies the Azure Active Directory tenant ID that should be used for authenticating requests to the key vault. Get it by using Get-AzSubscription cmdlet.')
param tenantId string = subscription().tenantId

resource keyVault 'Microsoft.KeyVault/vaults@2021-11-01-preview' = {
  name: 'mykeyvault'
  location: location
  properties: {
    tenantId: tenantId
    sku: {
      name: 'premium'
      family: 'A'
    }
  }
}

Modelo de ARM

    {
      "type": "Microsoft.KeyVault/vaults",
      "apiVersion": "2021-11-01-preview",
      "name": "mykeyvault",
      "location": "[parameters('location')]",
      "properties": {
        "tenantId": "[parameters('tenantId')]",
        "sku": {
          "name": "premium",
          "family": "A"
        }
      }
    }

Implantar uma máquina virtual confidencial

Siga as instruções de início rápido sobre como "Implantar uma VM confidencial com o modelo do ARM"

Habilitar identidade gerenciada atribuída pelo sistema

As Identidades gerenciadas para recursos do Azure fornecem aos serviços do Azure uma identidade gerenciada automaticamente na ID do Microsoft Entra. Use essa identidade para autenticar qualquer serviço que dê suporte à autenticação do Microsoft Entra, sem a necessidade de ter as credenciais no código.

Para habilitar a identidade gerenciada atribuída pelo sistema em uma CVM, sua conta precisa da atribuição de função Colaborador de Máquina Virtual. Nenhuma outra atribuição de função do diretório do Microsoft Entra é necessária.

  1. Se você entrar no Azure localmente ou por meio do portal do Azure, use uma conta que esteja associada com a assinatura do Azure que contenha a máquina virtual.

  2. Para habilitar a identidade gerenciada atribuída pelo sistema, carregue o modelo em um editor, localize o recurso Microsoft.Compute/virtualMachines de interesse e adicione a propriedade "identity" no mesmo nível que a propriedade name: vmName. Use a seguinte sintaxe:

       identity:{
         type: 'SystemAssigned'
       }
    
  3. Adicione os detalhes resource ao modelo.

     resource confidentialVm 'Microsoft.Compute/virtualMachines@2021-11-01' = {
       name: vmName
       location: location
       identity:{
         type: 'SystemAssigned'
       }
       // other resource provider properties
     }