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

Область применения: ✔️ Виртуальные машины Linux ✔️ Виртуальные машины Windows

В этом кратком руководстве показано, как использовать интерфейс командной строки Azure (Azure CLI) для развертывания конфиденциальной виртуальной машины (конфиденциальной виртуальной машины) в Azure. Azure CLI используется для создания ресурсов Azure и управления ими с помощью командной строки или скриптов.

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

Если у вас еще нет подписки Azure, создайте бесплатную учетную запись Azure, прежде чем начинать работу.

Запуск Azure Cloud Shell

Azure Cloud Shell — это бесплатная интерактивная оболочка, с помощью которой можно выполнять действия, описанные в этой статье. Она включает предварительно установленные общие инструменты Azure и настроена для использования с вашей учетной записью.

Чтобы открыть Cloud Shell, просто выберите Попробовать в правом верхнем углу блока кода. Кроме того, Cloud Shell можно открыть в отдельной вкладке браузера. Для этого перейдите на страницу https://shell.azure.com/bash. Нажмите кнопку Копировать, чтобы скопировать блоки кода. Вставьте код в Cloud Shell и нажмите клавишу ВВОД, чтобы выполнить его.

Если вы предпочитаете локально устанавливать и использовать ИНТЕРФЕЙС командной строки, для этого краткого руководства требуется Azure CLI версии 2.38.0 или более поздней. Чтобы узнать версию, выполните команду az--version. Если вам необходимо выполнить установку или обновление, см. статью Установка Azure CLI 2.0.

Создание или изменение группы ресурсов

Создайте группу ресурсов с помощью команды az group create. Группа ресурсов Azure является логическим контейнером, в котором происходит развертывание ресурсов Azure и управление ими. В следующем примере создается группа ресурсов с именем myResourceGroup в расположении northeurope :

Примечание.

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

az group create --name myResourceGroup --location northeurope

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

Создайте виртуальную машину с помощью команды az vm create.

В следующем примере создается виртуальная машина myVM и добавляется учетная запись пользователя azureuser. Параметр --generate-ssh-keys используется для автоматического создания ключа SSH и его размещения в расположении ключа по умолчанию (~/.ssh). Чтобы использовать определенный набор ключей, примените параметр --ssh-key-values. Для sizeпараметра выберите размер конфиденциальной виртуальной машины. Дополнительные сведения см. в разделе Поддерживаемые семейства конфиденциальных виртуальных машин.

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

az vm create \
  --resource-group myResourceGroup \
  --name myVM \
  --size Standard_DC4es_v5 \
  --admin-username <azure-username> \
  --admin-password <azure-password> \
  --enable-vtpm true \
  --image "Canonical:0001-com-ubuntu-confidential-vm-jammy:22_04-lts-cvm:latest" \
  --public-ip-sku Standard \
  --security-type ConfidentialVM \
  --os-disk-security-encryption-type VMGuestStateOnly \
  --enable-secure-boot true \
  --encryption-at-host \

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

{
  "fqdns": "",
  "id": "/subscriptions/<guid>/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/myVM",
  "location": "northeurope",
  "macAddress": "<MAC-address>",
  "powerState": "VM running",
  "privateIpAddress": "10.20.255.255",
  "publicIpAddress": "192.168.255.255",
  "resourceGroup": "myResourceGroup",
  "zones": ""
}

Запишите publicIpAddress для последующего использования.

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

Чтобы создать набор шифрования конфиденциальных дисков, у вас есть два варианта: использование Azure Key Vault или управляемого аппаратного модуля безопасности Azure Key Vault (HSM). В зависимости от потребностей безопасности и соответствия требованиям можно выбрать любой из вариантов. Однако важно отметить, что стандартный номер SKU не поддерживается. В следующем примере используется Azure Key Vault Premium.

  1. Предоставьте субъекту-службе 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"
  1. Создайте Azure Key Vault с помощью команды az keyvault create . Для ценовой категории выберите "Премиум" (включает поддержку поддерживаемых ключей HSM). Убедитесь, что у вас есть роль владельца в этом хранилище ключей.
az keyvault create -n keyVaultName -g myResourceGroup --enabled-for-disk-encryption true --sku premium --enable-purge-protection true
  1. Предоставьте 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 keyVaultName --object-id $cvmAgent.Id --key-permissions get release
  1. Создайте ключ в хранилище ключей с помощью az keyvault key create. Для типа ключа используйте RSA-HSM.
az keyvault key create --name mykey --vault-name keyVaultName --default-cvm-policy --exportable --kty RSA-HSM
  1. Создайте набор шифрования дисков с помощью az disk-encryption-set create. Задайте для типа ConfidentialVmEncryptedWithCustomerKeyшифрования значение .
$keyVaultKeyUrl=(az keyvault key show --vault-name keyVaultName --name mykey--query [key.kid] -o tsv)

az disk-encryption-set create --resource-group myResourceGroup --name diskEncryptionSetName --key-url $keyVaultKeyUrl  --encryption-type ConfidentialVmEncryptedWithCustomerKey
  1. Предоставьте ресурсу набора ресурсов набора шифрования дисков к хранилищу ключей с помощью az key vault set-policy.
$desIdentity=(az disk-encryption-set show -n diskEncryptionSetName -g myResourceGroup --query [identity.principalId] -o tsv)

az keyvault set-policy -n keyVaultName -g myResourceGroup --object-id $desIdentity --key-permissions wrapkey unwrapkey get
  1. Используйте идентификатор набора шифрования дисков для создания виртуальной машины.
$diskEncryptionSetID=(az disk-encryption-set show -n diskEncryptionSetName -g myResourceGroup --query [id] -o tsv)
  1. Создайте виртуальную машину с помощью команды az vm create. Выберите DiskWithVMGuestState конфиденциальное шифрование диска ОС с помощью ключа, управляемого клиентом. Включение безопасной загрузки является необязательным, но рекомендуется. Дополнительные сведения см. в разделе "Безопасная загрузка" и vTPM. Дополнительные сведения о шифровании дисков см. в разделе о шифровании дисков конфиденциальной ОС.
az vm create \
--resource-group myResourceGroup \
--name myVM \
--size Standard_DC4as_v5 \
--admin-username <azure-user> \
--admin-password <azure-password> \
--enable-vtpm true \
--enable-secure-boot true \
--image "Canonical:0001-com-ubuntu-confidential-vm-focal:20_04-lts-cvm:latest" \
--public-ip-sku Standard \
--security-type ConfidentialVM \
--os-disk-security-encryption-type DiskWithVMGuestState \
--os-disk-secure-vm-disk-encryption-set $diskEncryptionSetID \

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

{
  "fqdns": "",
  "id": "/subscriptions/<guid>/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/myVM",
  "location": "eastus",
  "macAddress": "<MAC-address>",
  "powerState": "VM running",
  "privateIpAddress": "10.20.255.255",
  "publicIpAddress": "192.168.255.255",
  "resourceGroup": "myResourceGroup",
  "zones": ""
}

Запишите publicIpAddress для последующего использования.

Подключение и Подключение пример приложения на основе AMD через приложение Microsoft Аттестация Azure

Чтобы использовать пример приложения в C++ для использования с API аттестации гостей, выполните следующие действия. В этом примере используется конфиденциальная виртуальная машина Linux. Инструкции по сборке Для Windows см . в разделе "Инструкции по сборке" для Windows.

  1. Войдите на конфиденциальную виртуальную машину с помощью общедоступного IP-адреса.

  2. Клонируйте пример приложения Linux.

  3. Установите пакет build-essential. Этот пакет устанавливает все необходимое для компиляции примера приложения.

sudo apt-get install build-essential
  1. Установите приведенные ниже пакеты.
sudo apt-get install libcurl4-openssl-dev
sudo apt-get install libjsoncpp-dev
sudo apt-get install libboost-all-dev
sudo apt install nlohmann-json3-dev
  1. Скачайте пакет аттестации.

  2. Установите пакет аттестации. Обязательно замените <version> скачаемую версию.

sudo dpkg -i azguestattestation1_<latest-version>_amd64.deb
  1. После установки указанных выше пакетов выполните приведенные ниже действия для сборки и запуска приложения.
cd confidential-computing-cvm-guest-attestation/cvm-attestation-sample-app
sudo cmake . && make
sudo ./AttestationClient -o token
  1. Чтобы преобразовать веб-токен в JSON, выполните приведенные ниже действия.
sudo ./AttestationClient -o token>> /attestation_output

JWT=$(cat /attestation_output)

echo -n $JWT | cut -d "." -f 1 | base64 -d 2>/dev/null | jq .
echo -n $JWT | cut -d "." -f 2 | base64 -d 2>/dev/null | jq .

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