Guía de la versión segura de claves con máquinas virtuales confidenciales

En el siguiente artículo se describe cómo realizar una versión de clave segura desde Azure Key Vault cuando las aplicaciones se ejecutan con una máquina virtual confidencial basada en SEV-SNP de AMD. Para más información sobre la versión de clave segura y la computación confidencial de Azure, vaya aquí.

SKR requiere que una aplicación que realice SKR pase por un flujo de atestación de invitado remoto mediante Microsoft Azure Attestation (MAA), como se describe aquí.

Flujo general y arquitectura

Para permitir que Azure Key Vault libere una clave en una máquina virtual confidencial atestada, hay determinados pasos que deben seguirse:

  1. Asigne una identidad administrada a la máquina virtual confidencial. Se admite la identidad administrada asignada por el sistema o una identidad administrada asignada por el usuario.
  2. Establezca una directiva de acceso de Key Vault para conceder a la identidad administrada el permiso de clave "release". Una directiva permite que la máquina virtual confidencial acceda a Key Vault y realice la operación de versión. Si usa HSM administrado de Key Vault, asigne la pertenencia al rol "Usuario de versión de servicio criptográfico de HSM administrado".
  3. Cree una clave de Key Vault marcada como exportable y tenga una directiva de versión asociada. La directiva de versión de clave asocia la clave a una máquina virtual confidencial atestada y que la clave solo se puede usar para el propósito deseado.
  4. Para realizar la versión, envíe una solicitud HTTP a Key Vault desde la máquina virtual confidencial. La solicitud HTTP debe incluir el informe de plataforma de máquinas virtuales confidenciales atestiguadas en el cuerpo de la solicitud. El informe de plataforma atestiguada se usa para comprobar la confiabilidad del estado de la plataforma habilitada para entorno de ejecución de confianza, como la máquina virtual confidencial. El servicio Microsoft Azure Attestation se puede usar para crear el informe de plataforma atestada e incluirlo en la solicitud.

Diagram of the aforementioned operations, which we'll be performing.

Implementación de una instancia de Azure Key Vault

Configure AKV Premium o AKV mHSM con una clave exportable. Siga las instrucciones detalladas de aquí para configurar las claves exportables 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'
    }
  }
}

Plantilla ARM

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

Implementación de una máquina virtual confidencial

Siga las instrucciones de inicio rápido sobre cómo "Implementación de máquinas virtuales confidenciales con una plantilla de ARM".

Habilitación de identidad administrada asignada por el sistema

Las identidades administradas para recursos Azure proporcionan a los servicios de Azure una identidad administrada automáticamente en Microsoft Entra ID. Puede usar esta identidad para autenticar a cualquier servicio que admita la autenticación de Microsoft Entra, sin necesidad de tener credenciales en el código.

Para habilitar la identidad administrada asignada por el sistema en un CVM, la cuenta necesita la asignación de roles Colaborador de máquina virtual. No se requiere ninguna otra asignación de roles de directorio de Microsoft Entra.

  1. Independientemente de que inicie sesión localmente en Azure o mediante Azure Portal, use una cuenta que esté asociada a la suscripción de Azure que contiene la máquina virtual.

  2. Para habilitar la identidad administrada asignada por el sistema, cargue la plantilla en un editor, busque el Microsoft.Compute/virtualMachines recurso de interés y agregue la "identity" propiedad en el mismo nivel que la name: vmName propiedad . Use la sintaxis siguiente:

       identity:{
         type: 'SystemAssigned'
       }
    
  3. Agregue los resource detalles a la plantilla.

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