Выпуск безопасного ключа с конфиденциальными виртуальными машинами, как руководство

В приведенной ниже статье описывается, как реализовать безопасный выпуск ключей из Azure Key Vault, когда приложения работают с конфиденциальной виртуальной машиной на основе AMD SEV-SNP. Дополнительные сведения о выпуске безопасного ключа и конфиденциальных вычислениях Azure см. здесь.

Для SKR требуется, чтобы приложение, выполняющее SKR, проходило через удаленный поток аттестации гостей с помощью Microsoft Аттестация Azure (MAA), как описано здесь.

Общий поток и архитектура

Чтобы разрешить Azure Key Vault освободить ключ для подтвержденной конфиденциальной виртуальной машины, необходимо выполнить определенные действия.

  1. Назначьте управляемое удостоверение конфиденциальной виртуальной машине. Управляемое удостоверение, назначаемое системой, или управляемое удостоверение, назначаемое пользователем, поддерживается.
  2. Задайте политику доступа Key Vault, чтобы предоставить управляемому удостоверению разрешение ключа "release". Политика позволяет конфиденциальной виртуальной машине получить доступ к Key Vault и выполнить операцию выпуска. При использовании управляемого HSM Key Vault назначьте членство в роли "Управляемый пользователь выпуска службы шифрования HSM".
  3. Создайте ключ Key Vault, помеченный как экспортируемый и имеющий связанную политику выпуска. Политика выпуска ключа связывает ключ с подтвержденной конфиденциальной виртуальной машиной и что ключ можно использовать только для требуемой цели.
  4. Чтобы выполнить выпуск, отправьте HTTP-запрос в Key Vault из конфиденциальной виртуальной машины. HTTP-запрос должен содержать отчет о доверенной платформе конфиденциальных виртуальных машин в тексте запроса. Отчет о проверенной платформе используется для проверки надежности состояния платформы с поддержкой доверенной среды выполнения, например конфиденциальной виртуальной машины. Службу microsoft Аттестация Azure можно использовать для создания отчета о подтвержденной платформе и включения его в запрос.

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

Развертывание Azure Key Vault

Настройте AKV Premium или AKV mHSM с экспортируемым ключом. Следуйте подробным инструкциям по настройке ключей 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'
    }
  }
}

Шаблон ARM

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

Развертывание конфиденциальной виртуальной машины

Следуйте инструкциям из краткого руководства по развертыванию конфиденциальной виртуальной машины с помощью шаблона ARM.

Включение управляемого удостоверения, назначаемого системой

Управляемые удостоверения для ресурсов Azure предоставляют службам Azure автоматически управляемые удостоверения в идентификаторе Microsoft Entra. Это удостоверение можно использовать для проверки подлинности в любой службе, которая поддерживает аутентификацию Microsoft Entra, без использования учетных данных в коде.

Чтобы включить назначаемое системой управляемое удостоверение в CVM, учетная запись должна назначать роль участника виртуальной машины. Другие назначения ролей каталога Microsoft Entra не требуются.

  1. После входа в Azure локально или через портал Azure используйте учетную запись, связанную с подпиской Azure, содержащей виртуальную машину.

  2. Чтобы включить управляемое удостоверение, назначаемое системой, загрузите шаблон в редактор, найдите Microsoft.Compute/virtualMachines нужный ресурс и добавьте "identity" свойство на том же уровне, что name: vmName и свойство. Используйте следующий синтаксис:

       identity:{
         type: 'SystemAssigned'
       }
    
  3. resource Добавьте сведения в шаблон.

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