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

Шаблон Azure Resource Manager (шаблон ARM) можно использовать для быстрого создания конфиденциальной виртуальной машины Azure. Конфиденциальные виртуальные машины работают на обоих процессорах AMD, поддерживаемых AMD SEV-SNP и процессорами Intel, поддерживаемыми Intel TDX, для обеспечения шифрования и изоляции памяти виртуальных машин. Дополнительные сведения см. в разделе Обзор конфиденциальных виртуальных машин.

Это руководство описывает развертывание конфиденциальной виртуальной машины с пользовательской конфигурацией.

Необходимые компоненты

Развертывание шаблона конфиденциальной виртуальной машины с помощью Azure CLI

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

Чтобы создать и развернуть конфиденциальную виртуальную машину с помощью шаблона ARM с помощью Azure CLI:

  1. Войдите в свою учетную запись Azure в Azure CLI.

    az login
    
  2. Настройте свою подписку Azure. Замените <subscription-id> идентификатором своей подписки. Обязательно используйте подписку, которая соответствует предварительным требованиям.

    az account set --subscription <subscription-id>
    
  3. Задайте переменные для конфиденциальной виртуальной машины. Укажите имя развертывания ($deployName), группу ресурсов ($resourceGroup), имя виртуальной машины ($vmName) и регион Azure ($region). Замените примеры значений собственными сведениями.

    Примечание.

    Конфиденциальные виртуальные машины доступны не во всех расположениях. Сведения о поддерживаемых расположениях см. в разделе Доступность продуктов Azure по регионам.

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

    Если указанная группа ресурсов не существует, создайте группу ресурсов с таким именем.

    az group create -n $resourceGroup -l $region
    
  4. Разверните виртуальную машину в Azure с помощью шаблона ARM с пользовательским файлом параметров. Для развертываний TDX ниже приведен пример шаблона: 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
    

Определение файла настраиваемых параметров

При создании конфиденциальной виртуальной машины с помощью интерфейс командной строки Azure (Azure CLI) необходимо определить пользовательский файл параметров. Чтобы создать файл настраиваемых параметров JSON, сделайте следующее:

  1. Войдите в учетную запись Azure с помощью Azure CLI.

  2. Создайте файл параметров JSON. Например, azuredeploy.parameters.json.

  3. В зависимости от используемого образа ОС скопируйте пример файла параметров Windows или пример файла параметров Linux в файл параметров.

  4. При необходимости измените код JSON в файле параметров. Например, обновите имя образа ОС (osImageName) или имя пользователя администратора (adminUsername).

  5. Настройка параметра типа безопасности (securityType). Выберите VMGuestStateOnly без конфиденциального шифрования диска ОС. Или выберите DiskWithVMGuestState конфиденциальное шифрование диска ОС с помощью ключа, управляемого платформой. Только для SKU Intel TDX и образов на основе Linux клиенты могут выбрать NonPersistedTPM тип безопасности для развертывания с помощью эфемерного vTPM. NonPersistedTPM Для типа безопасности в файле шаблона используйте минимальное значение apiVersion: "2023-09-01".Microsoft.Compute/virtualMachines

  6. Сохраните файл параметров.

Пример файла параметров Windows

Используйте этот пример, чтобы создать файл настраиваемых параметров для конфиденциальной виртуальной машины под управлением 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>"
    }
  }
}

Пример файла параметров Linux

Используйте этот пример, чтобы создать файл настраиваемых параметров для конфиденциальной виртуальной машины под управлением 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>
    }
  }
}

Примечание.

Замените значение osImageName соответствующим образом.

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

  1. Войдите в учетную запись Azure с помощью Azure CLI.

    az login
    
  2. Настройте свою подписку Azure. Замените <subscription-id> идентификатором своей подписки. Обязательно используйте подписку, которая соответствует предварительным требованиям.

    az account set --subscription <subscription-id>
    
  3. Предоставление субъекту-службе конфиденциальной виртуальной машины клиенту Confidential VM Orchestrator

    Для этого шага необходимо быть глобальной Администратор или у вас должна быть роль Администратор istrator RBAC для доступа пользователей. Установите пакет SDK Microsoft Graph, чтобы выполнить приведенные ниже команды.

    Connect-Graph -Tenant "your tenant ID" Application.ReadWrite.All
    New-MgServicePrincipal -AppId bf7b6499-ff71-4aa2-97a4-f372087be7f0 -DisplayName "Confidential VM Orchestrator"
    
  4. Настройте хранилище ключей Azure. Сведения об использовании управляемого HSM в Azure Key Vault см. на следующем шаге.

    1. Создайте группу ресурсов для хранилища ключей. Экземпляр хранилища ключей и конфиденциальная виртуальная машина должны находиться в одном регионе Azure.

      $resourceGroup = <key vault resource group>
      $region = <Azure region>
      az group create --name $resourceGroup --location $region
      
    2. Создайте экземпляр хранилища ключей с номером SKU уровня "Премиум" и выберите предпочтительный регион. Стандартный номер SKU не поддерживается.

      $KeyVault = <name of key vault>
      az keyvault create --name $KeyVault --resource-group $resourceGroup --location $region --sku Premium --enable-purge-protection
      
    3. Убедитесь, что у вас есть роль владельца в этом хранилище ключей.

    4. Предоставьте Confidential VM Orchestrator разрешения get и release хранилище ключей.

      $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. (Необязательно) Если вы не хотите использовать хранилище ключей Azure, вы можете создать управляемый HSM в Azure Key Vault.

    1. Следуйте краткому руководству по созданию управляемого HSM в Azure Key Vault для подготовки и активации управляемого HSM в Azure Key Vault.

    2. Включите защиту очистки в управляемом HSM Azure. Этот шаг необходим для включения выпуска ключа.

      az keyvault update-hsm --subscription $subscriptionId -g $resourceGroup --hsm-name $hsm --enable-purge-protection true
      
    3. Предоставьте Confidential VM Orchestrator разрешения управляемому HSM.

      $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. Создайте новый ключ с помощью Azure Key Vault. Сведения о том, как использовать управляемый HSM Azure, см. на следующем шаге.

    1. Подготовьте и скачайте политику выпуска ключа на локальный диск.

    2. Создайте новый ключ.

      $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. Получение сведений о созданном ключе.

      $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. Разверните набор шифрования дисков (DES) с помощью шаблона 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. Назначьте доступ к ключу к 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. (Необязательно) Создайте новый ключ из управляемого устройства HSM Azure.

    1. Подготовьте и скачайте политику выпуска ключа на локальный диск.

    2. Создайте новый ключ.

      $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. Получение сведений о созданном ключе.

      $encryptionKeyURL = ((az keyvault key show --hsm-name $hsm --name $KeyName) | ConvertFrom-Json).key.kid
      
    4. Развертывание DES.

      $desName = <name of DES>
      az disk-encryption-set create -n $desName `
       -g $resourceGroup `
       --key-url $encryptionKeyURL
      
    5. Назначьте ключ доступа к 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. Разверните конфиденциальную виртуальную машину с помощью ключа, управляемого клиентом.

    1. Получите идентификатор ресурса для DES.

      $desID = (az disk-encryption-set show -n $desName -g $resourceGroup --query [id] -o tsv)
      
    2. Разверните конфиденциальную виртуальную машину с помощью шаблона ARM конфиденциальной виртуальной машины для AMD SEV-SNP или Intel TDX и файла параметров развертывания (например, azuredeploy.parameters.win2022.jsonс помощью ключа, управляемого клиентом).

      $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. Подключение к конфиденциальной виртуальной машине, чтобы убедиться, что создание выполнено успешно.

Следующие шаги