Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Аттестация гостей помогает убедиться, что ваша конфиденциальная среда виртуальной машины защищена подлинной аппаратной доверенной средой выполнения (TEE) с функциями безопасности, включенными для изоляции и целостности.
Вы можете использовать аттестацию гостей для:
- Убедитесь, что конфиденциальная виртуальная машина выполняется на ожидаемой аппаратной платформе
- Проверьте, включена ли безопасная загрузка конфиденциальной виртуальной машины. Этот параметр защищает нижние слои виртуальной машины (прошивка, загрузчик, ядро) от вредоносных программ (руткиты, буткиты).
- Получение доказательств для проверяющей стороны, что конфиденциальная виртуальная машина работает на конфиденциальном оборудовании
Примечание.
Чтобы выполнить аттестацию гостей для виртуальных машин DCesv5 и ECesv5, поддерживаемых Intel TDX, вы найдете здесь руководство. Для использования Центра доверия Intel требуется регистрация в Intel.
Сценарии
Основными компонентами и службами, участвующими в аттестации гостей, являются:
- Рабочая нагрузка
- Библиотека аттестации гостей
- Оборудование (для составления отчетов). Например, AMD-SEVSNP.
- Служба аттестации Microsoft Azure
- Ответ веб-маркера JSON
Типичные операционные сценарии включают использование клиентской библиотеки для выполнения запросов аттестации следующим образом.
Сценарий: запрос в отдельной рабочей нагрузке
В этом примере запросы аттестации выполняются в отдельной рабочей нагрузке. Запросы определяют, выполняется ли конфиденциальная виртуальная машина на правильной аппаратной платформе перед запуском рабочей нагрузки.
Вычислительная нагрузка (клиент проверки платформы на схеме) должна интегрироваться с библиотекой аттестации и работать внутри конфиденциальной виртуальной машины для проведения аттестации. После того как программа отправляет запрос в библиотеку аттестации, рабочая нагрузка анализирует ответ, чтобы определить, работает ли виртуальная машина на правильной аппаратной платформе и /или безопасной загрузке перед запуском конфиденциальной рабочей нагрузки.
Этот сценарий аналогичен следующему сценарию. Основное различие заключается в том, как каждый сценарий достигает той же цели в зависимости от расположения запроса.
Сценарий: запрос из рабочей нагрузки
В этом примере запросы аттестации выполняются внутри рабочей нагрузки в начале программы. Запросы проверяют, запущена ли конфиденциальная виртуальная машина на правильной аппаратной платформе перед запуском рабочей нагрузки.
Этот сценарий аналогичен предыдущему сценарию. Основное различие заключается в том, как каждый сценарий достигает той же цели в зависимости от расположения запроса.
Рабочая нагрузка клиента должна интегрироваться с библиотекой аттестации и запускаться на конфиденциальной виртуальной машине. После того как рабочая нагрузка клиента отправляет запрос в библиотеку аттестации, рабочая нагрузка клиента анализирует ответ, чтобы определить, запущена ли виртуальная машина на правильной аппаратной платформе и /или безопасной загрузке перед полной настройкой конфиденциальной рабочей нагрузки.
Сценарий: рукопожатие доверяющей стороны
В этом примере конфиденциальная виртуальная машина должна доказать, что она выполняется на конфиденциальной платформе, прежде чем проверяющая сторона будет участвовать. Конфиденциальная виртуальная машина предъявляет токен аттестации проверяющей стороне для начала взаимодействия.
Ниже приведены некоторые примеры взаимодействия.
- Конфиденциальная виртуальная машина запрашивает секреты из системы управления секретами.
- Клиент хочет убедиться, что конфиденциальная виртуальная машина выполняется на конфиденциальной платформе, прежде чем передавать личные данные в обработку конфиденциальной виртуальной машине.
На следующей схеме показано рукопожатие между конфиденциальной виртуальной машиной и полагающейся стороной.
На следующей схеме последовательности подробнее объясняется сценарий доверяющей стороны. Запрос и ответ между участвующими системами используют API библиотеки аттестации гостей. Конфиденциальная виртуальная машина взаимодействует с менеджером секретов, чтобы инициализироваться с помощью полученных секретов.
Программные интерфейсы
Корпорация Майкрософт предоставляет гостевую библиотеку аттестации с API для выполнения аттестаций и шифрования и расшифровки данных. Существует также API для восстановления памяти.
Эти API можно использовать для различных сценариев, описанных ранее.
Верификация API
API аттестации принимает объект ClientParameters на вход и возвращает расшифрованный токен аттестации. Например:
AttestationResult Attest([in] ClientParameters client_params,
[out] buffer jwt_token);
| Параметр | Информация |
|---|---|
ClientParameters (тип: объект) |
Объект, принимаюющий версию (тип: uint32_t), URI клиента аттестации (тип: символ без знака) и полезные данные клиента (тип: без знака). Полезная нагрузка клиента может содержать ноль или несколько пар "ключ-значение" для любых метаданных клиента, которые возвращаются в полезной нагрузке ответа. Пары "ключ-значение" должны быть в формате "{\"key1\":\"value1\",\"key2\":\"value2\"}" строки JSON. Например, значение пары ключ-значение для аттестации свежести может выглядеть следующим образом {\”Nonce\”:\”011510062022\”} . |
buffer |
Веб-токен JSON, содержащий сведения о аттестации. |
API Attest возвращает AttestationResult (тип: структура).
Шифрование API
API шифрования принимает данные для шифрования и JSON веб-токен в качестве входных данных. API шифрует данные с помощью открытого эфемерного ключа, который присутствует в веб-токене JSON. Например:
AttestationResult Encrypt(
[enum] encryption_type,
[in] const unsigned char* jwt_token,
[in] const unsigned char* data,
[in] uint32_t data_size,
[out] unsigned char** encrypted_data,
[out] uint32_t* encrypted_data_size,
[out] unsigned char** encryption_metadata,
[out] uint32_t encryption_metadata_size);
| Параметр | Описание |
|---|---|
encryption_type |
Нет. |
const unsigned char* jwt_token |
Веб-токен JSON, содержащий сведения об аттестации. |
const unsigned char* data |
Зашифрованные данные |
uint32_t data_size |
Размер зашифрованных данных. |
unsigned char** encrypted_data |
Зашифрованные данные. |
uint32_t* encrypted_data_size |
Размер зашифрованных данных. |
unsigned char** encryption_metadata |
Метаданные шифрования. |
uint32_t encryption_metadata_size |
Размер метаданных шифрования. |
API шифрования возвращает (тип: структура).
Расшифровка API
API расшифровки принимает зашифрованные данные в качестве входных данных и расшифровывает данные с помощью закрытого эфемерного ключа, запечатаемого в доверенном модуле платформы (TPM). Например:
AttestationResult Decrypt([enum] encryption_type,
[in] const unsigned char* encrypted_data,
[in] uint32_t encrypted_data_size,
[in] const unsigned char* encryption_metadata,
[in] unit32_t encryption_metadata_size,
[out] unsigned char** decrypted_data,
[out] unit32_t decrypted_data_size);
| Параметр | Описание |
|---|---|
encryption_type |
Нет. |
const unsigned char* encrypted_data |
Данные для расшифровки. |
uint32_t encrypted_data_size |
Размер расшифровки данных. |
const unsigned char* encryption_metadata |
Метаданные шифрования. |
unit32_t encryption_metadata_size |
Размер метаданных шифрования. |
unsigned char** decrypted_data |
Расшифрованные данные. |
unit32_t decrypted_data_size |
Размер расшифрованных данных. |
API Decrypt возвращает AttestationResult(тип: структура).
Бесплатный API
Бесплатный API освобождает память, удерживаемую данными. Например:
Free([in] buffer data);
| Параметр | Описание |
|---|---|
data |
Восстановление памяти, удерживаемой данными. |
Бесплатный API не возвращает ничего.
Коды ошибок
API могут возвращать следующие коды ошибок:
| Код ошибки | Описание |
|---|---|
| 1 | Ошибка инициализации. |
| 2 | Ошибка при разборе ответа. |
| 3 | Управляемые удостоверения для ресурсов Azure токен не найден. |
| 4 | Запрос превысил количество попыток повторного выполнения. |
| 5 | Сбой запроса. |
| 6 | Отказ в аттестации. |
| 7 | Сбой отправки запроса. |
| 8 | Недопустимый входной параметр. |
| 9 | Сбой проверки параметров аттестации. |
| 10 | Ошибка выделения памяти. |
| 11 | Не удалось получить сведения о операционной системе (ОС). |
| 12 | Внутренний сбой доверенного платформенного модуля (TPM). |
| 13 (тринадцать) | Сбой операции доверенного платформенного модуля. |
| 14 | Сбой расшифровки веб-токена JSON. |
| 15 | Ошибка TPM при расшифровке веб-токена JSON. |
| 16 | Некорректный ответ JSON. |
| 17 | Пустой сертификат подтверждения чипа с версией (VCEK). |
| 18 | Пустой ответ. |
| 19 | Пустой текст запроса. |
| 20 | Ошибка синтаксического анализа. |
| двадцать один | Отчет пуст. |
| двадцать два | Ошибка при извлечении сведений о веб-токене JSON. |
| двадцать три | Ошибка преобразования веб-маркера JSON в открытый ключ RSA. |
| двадцать четыре | EVP_PKEY не удалось выполнить инициализацию шифрования. |
| двадцать пять | Произошел сбой шифрования EVP_PKEY. |
| 26 | Ошибка расшифровки данных TPM. |
| двадцать семь | Ошибка при синтаксическом анализе сведений DNS. |
JSON Web Token
Вы можете извлечь различные части веб-маркера JSON для различных сценариев API, описанных ранее. Ниже приведены важные поля для функции аттестации гостей:
| Утверждение | Атрибут | Пример значения |
|---|---|---|
| - | x-ms-azurevm-vmid |
2DEDC52A-6832-46CE-9910-E8C9980BF5A7 |
| Оборудование AMD SEV-SNP | x-ms-isolation-tee |
sevsnpvm |
| Оборудование AMD SEV-SNP |
x-ms-compliance-status (под x-ms-isolation-tee) |
azure-compliant-cvm |
| Безопасная загрузка |
secure-boot (под x-ms-runtime>vm-configuration) |
true |
| Виртуальный TPM |
tpm-enabled (под x-ms-runtime>vm-configuration) |
true |
| Виртуальный TPM |
kid (под x-ms-runtime>keys) |
TpmEphemeralEncryptionKey |
{
"exp": 1653021894,
"iat": 1652993094,
"iss": "https://sharedeus.eus.test.attest.azure.net",
"jti": "<value>",
"nbf": 1652993094,
"secureboot": true,
"x-ms-attestation-type": "azurevm",
"x-ms-azurevm-attestation-protocol-ver": "2.0",
"x-ms-azurevm-attested-pcrs": [
0,
1,
2,
3,
4,
5,
6,
7,
11,
12,
13
],
"x-ms-azurevm-bootdebug-enabled": false,
"x-ms-azurevm-dbvalidated": true,
"x-ms-azurevm-dbxvalidated": true,
"x-ms-azurevm-debuggersdisabled": true,
"x-ms-azurevm-default-securebootkeysvalidated": true,
"x-ms-azurevm-elam-enabled": true,
"x-ms-azurevm-flightsigning-enabled": false,
"x-ms-azurevm-hvci-policy": 0,
"x-ms-azurevm-hypervisordebug-enabled": false,
"x-ms-azurevm-is-windows": true,
"x-ms-azurevm-kerneldebug-enabled": false,
"x-ms-azurevm-osbuild": "NotApplicable",
"x-ms-azurevm-osdistro": "Microsoft",
"x-ms-azurevm-ostype": "Windows",
"x-ms-azurevm-osversion-major": 10,
"x-ms-azurevm-osversion-minor": 0,
"x-ms-azurevm-signingdisabled": true,
"x-ms-azurevm-testsigning-enabled": false,
"x-ms-azurevm-vmid": "<value>",
"x-ms-isolation-tee": {
"x-ms-attestation-type": "sevsnpvm",
"x-ms-compliance-status": "azure-compliant-cvm",
"x-ms-runtime": {
"keys": [
{
"e": "AQAB",
"key_ops": [
"encrypt"
],
"kid": "HCLAkPub",
"kty": "RSA",
"n": "<value>"
}
],
"vm-configuration": {
"console-enabled": true,
"current-time": 1652993091,
"secure-boot": true,
"tpm-enabled": true,
"vmUniqueId": "<value>"
}
},
"x-ms-sevsnpvm-authorkeydigest": "<value>",
"x-ms-sevsnpvm-bootloader-svn": 2,
"x-ms-sevsnpvm-familyId": "<value>",
"x-ms-sevsnpvm-guestsvn": 1,
"x-ms-sevsnpvm-hostdata": "<value>",
"x-ms-sevsnpvm-idkeydigest": "<value>",
"x-ms-sevsnpvm-imageId": "<value>",
"x-ms-sevsnpvm-is-debuggable": false,
"x-ms-sevsnpvm-launchmeasurement": "<value>",
"x-ms-sevsnpvm-microcode-svn": 55,
"x-ms-sevsnpvm-migration-allowed": false,
"x-ms-sevsnpvm-reportdata": "<value>",
"x-ms-sevsnpvm-reportid": "<value>",
"x-ms-sevsnpvm-smt-allowed": true,
"x-ms-sevsnpvm-snpfw-svn": 2,
"x-ms-sevsnpvm-tee-svn": 0,
"x-ms-sevsnpvm-vmpl": 0
},
"x-ms-policy-hash": "<value>",
"x-ms-runtime": {
"keys": [
{
"e": "AQAB",
"key_ops": [
"encrypt"
],
"kid": "TpmEphemeralEncryptionKey",
"kty": "RSA",
"n": "<value>"
}
]
},
"x-ms-ver": "1.0"
}
Следующие шаги
- Дополнительные сведения о проектировании аттестации гостей
- Узнайте, как использовать пример приложения с API гостевой аттестации
- Узнайте, как использовать интеграцию Microsoft Defender для облака с конфиденциальными виртуальными машинами с установленной гостевой аттестацией
- Сведения о конфиденциальных виртуальных машинах Azure