Используйте учетную запись Azure, связанную с подпиской Azure, содержащей виртуальную машину.
Чтобы включить управляемое удостоверение, назначаемое системой, загрузите шаблон в редактор, найдите интересующий ресурс Microsoft.Compute/virtualMachines
в разделе resources
и добавьте свойство "identity"
на том же уровне, что и свойство "type": "Microsoft.Compute/virtualMachines"
. Используйте следующий синтаксис:
"identity": {
"type": "SystemAssigned"
},
Окончательный шаблон выглядит в следующем примере
"resources": [
{
"apiVersion": "2021-11-01",
"type": "Microsoft.Compute/virtualMachines",
"name": "[parameters('vmName')]",
"location": "[parameters('location')]",
"identity": {
"type": "SystemAssigned",
},
//other resource provider properties...
}
]
Добавление политики доступа в Azure Key Vault
После включения управляемого удостоверения, назначаемого системой для CVM, необходимо предоставить ему доступ к плоскости данных Azure Key Vault, в которой хранятся ключевые объекты. Чтобы убедиться, что только наша конфиденциальная виртуальная машина может выполнить операцию выпуска, мы предоставим только необходимое разрешение.
Примечание.
Идентификатор объекта управляемого удостоверения можно найти в параметрах удостоверений виртуальной машины в портал Azure. Кроме того, его можно получить с помощью PowerShell, Azure CLI, Bicep или шаблонов ARM.
[Bicep 1]
@description('Required. Specifies the object ID of a user, service principal or security group in the Azure Active Directory tenant for the vault. The object ID must be unique for the list of access policies. Get it by using Get-AzADUser or Get-AzADServicePrincipal cmdlets.')
param objectId string
resource keyVaultCvmAccessPolicy 'Microsoft.KeyVault/vaults/accessPolicies@2022-07-01' = {
parent: keyVault
name: 'add'
properties: {
accessPolicies: [
{
objectId: objectId
tenantId: tenantId
permissions: {
keys: [
'release'
]
}
}
]
}
}
[шаблон ARM 2]
{
"type": "Microsoft.KeyVault/vaults/accessPolicies",
"apiVersion": "2022-07-01",
"name": "[format('{0}/{1}', 'mykeyvault', 'add')]",
"properties": {
"accessPolicies": [
{
"objectId": "[parameters('objectId')]",
"tenantId": "[parameters('tenantId')]",
"permissions": {
"keys": [
"release"
]
}
}
]
},
"dependsOn": [
"[resourceId('Microsoft.KeyVault/vaults', 'mykeyvault')]"
]
}
Подготовка политики выпуска
Политики безопасного выпуска ключей Key Vault моделироваются после Политика Azure с немного другой грамматикой.
Идея заключается в том, что мы передаем тестируемый отчет платформы в виде веб-токена JSON (JWT) в Key Vault. В свою очередь, он будет смотреть на JWT и проверить, соответствуют ли утверждения в политике проверенным отчетом платформы.
Например, предположим, что мы хотим освободить ключ только в том случае, если в отчете платформы с проверкой есть такие свойства:
- Подтверждена конечной точкой службы Microsoft Аттестация Azure (MAA) "https://sharedweu.weu.attest.azure.net".
- Это
authority
значение из политики сравнивается со свойством iss
издателя в маркере.
- И что он также содержит объект, вызываемый
x-ms-isolation-tee
свойством, которое x-ms-attestation-type
содержит значение sevsnpvm
.
- MAA как служба Azure подтвердила, что CVM работает в подлинном процессоре AMD SEV-SNP.
- И что он также содержит объект, вызываемый
x-ms-isolation-tee
x-ms-compliance-status
свойством, которое содержит значение azure-compliant-cvm
.
- MAA как служба Azure имеет возможность подтвердить, что CVM соответствует конфиденциальной виртуальной машине Azure.
Создайте новую папку с именем assets
и добавьте следующее содержимое JSON в файл с именем cvm-release-policy.json
:
{
"version": "1.0.0",
"anyOf": [
{
"authority": "https://sharedweu.weu.attest.azure.net",
"allOf": [
{
"claim": "x-ms-isolation-tee.x-ms-attestation-type",
"equals": "sevsnpvm"
},
{
"claim": "x-ms-isolation-tee.x-ms-compliance-status",
"equals": "azure-compliant-cvm"
}
]
}
]
}
Политика выпуска — это anyOf
условие, содержащее массив ключевых центров. Условие claim
— это объект JSON, определяющий имя утверждения, условие сопоставления и значение. Объекты AnyOf
и AllOf
условия позволяют моделировать логический OR
и AND
. В настоящее время мы можем выполнить сравнение только по объекту equals
claim
. Свойства условия помещаются вместе со свойствами authority
.
Внимание
Утверждение среды содержит по крайней мере ключ шифрования ключей и одно или несколько утверждений о целевой среде (например, тип TEE, издатель, версия), которые соответствуют политике выпуска ключей. Ключ шифрования ключей — это открытый ключ RSA, принадлежащий и защищенный целевой средой выполнения, которая используется для экспорта ключей. Он должен отображаться в утверждении ключей TEE (x-ms-runtime/keys). Это утверждение имеет формат объекта JSON и представляет набор веб-ключей JSON. Для JWKS один из этих ключей должен соответствовать требованиям, установленным для использования в качестве ключа шифрования (key_use имеет значение "enc" или key_ops содержит элемент "encrypt"). Будет выбран первый подходящий ключ.
Key Vault выбирает первый подходящий ключ из свойства массива "" в объекте "x-ms-runtime
keys
" и ищет открытый ключ RSA с "key_use": ["enc"]
или"key_ops": ["encrypt"]
. Пример протестированного отчета платформы будет выглядеть следующим образом:
{
//...
"x-ms-runtime": {
"client-payload": {
"nonce": "MTIzNA=="
},
"keys": [
{
"e": "AQAB",
"key_ops": [
"encrypt"
],
"kid": "TpmEphemeralEncryptionKey",
"kty": "RSA",
"n": "9v2XQgAA6y18CxV8dSGnh..."
}
]
},
//...
}
В этом примере у нас есть только один ключ в $.x-ms-runtime.keys
пути. Key Vault использует TpmEphemeralEncryptionKey
ключ в качестве ключа шифрования ключей.
Примечание.
Обратите внимание, что в нем может быть ключ. Это не ключ$.x-ms-isolation-tee.x-ms-runtime.keys
, который будет использоваться Key Vault.
Создание экспортируемого ключа с политикой выпуска
Мы создадим политику доступа Key Vault, которая позволяет виртуальной машине Azure выполнять release
операцию ключа. Наконец, мы должны включить политику выпуска в виде строки в кодировке Base64 во время создания ключа. Ключ должен быть экспортируемым ключом, поддерживаемым HSM.
Примечание.
Ключи с поддержкой HSM доступны в Azure Key Vault Premium и Управляемом HSM Azure Key Vault.
[Bicep 2]
@description('The type of the key. For valid values, see JsonWebKeyType. Must be backed by HSM, for secure key release.')
@allowed([
'EC-HSM'
'RSA-HSM'
])
param keyType string = 'RSA-HSM'
@description('Not before date in seconds since 1970-01-01T00:00:00Z.')
param keyNotBefore int = -1
@description('Expiry date in seconds since 1970-01-01T00:00:00Z.')
param keyExpiration int = -1
@description('The elliptic curve name. For valid values, see JsonWebKeyCurveName.')
@allowed([
'P-256'
'P-256K'
'P-384'
'P-521'
])
param curveName string
@description('The key size in bits. For example: 2048, 3072, or 4096 for RSA.')
param keySize int = -1
resource exportableKey 'Microsoft.KeyVault/vaults/keys@2022-07-01' = {
parent: keyVault
name: 'mykey'
properties: {
kty: keyType
attributes: {
exportable: true
enabled: true
nbf: keyNotBefore == -1 ? null : keyNotBefore
exp: keyExpiration == -1 ? null : keyExpiration
}
curveName: curveName // applicable when using key type (kty) 'EC'
keySize: keySize == -1 ? null : keySize
keyOps: ['encrypt','decrypt'] // encrypt and decrypt only work with RSA keys, not EC
release_policy: {
contentType: 'application/json; charset=utf-8'
data: loadFileAsBase64('assets/cvm-release-policy.json')
}
}
}
[шаблон ARM 2]
{
"type": "Microsoft.KeyVault/vaults/keys",
"apiVersion": "2022-07-01",
"name": "[format('{0}/{1}', 'mykeyvault', 'mykey')]",
"properties": {
"kty": "RSA-HSM",
"attributes": {
"exportable": true,
"enabled": true,
"nbf": "[if(equals(parameters('keyNotBefore'), -1), null(), parameters('keyNotBefore'))]",
"exp": "[if(equals(parameters('keyExpiration'), -1), null(), parameters('keyExpiration'))]"
},
"curveName": "[parameters('curveName')]",
"keySize": "[if(equals(parameters('keySize'), -1), null(), parameters('keySize'))]",
"keyOps": [
"encrypt",
"decrypt"
],
"release_policy": {
"contentType": "application/json; charset=utf-8",
"data": "[variables('cvmReleasePolicyBase64EncodedString')]"
}
},
"dependsOn": [
"[resourceId('Microsoft.KeyVault/vaults', 'mykeyvault')]"
]
}
Мы можем убедиться, что Key Vault создал новый ключ с поддержкой HSM и содержит политику выпуска безопасного ключа, перейдя к портал Azure и выбрав ключ. Предполагаемый ключ будет помечен как экспортируемый.
Клиент аттестации гостей
Аттестация помогает нам криптографически оценить , что что-то работает в предполагаемом рабочем состоянии. Это процесс, с помощью которого одна сторона, проверяющий, оценивает надежность потенциально ненадежного однорангового узла, проверяющего. При удаленной аттестации гостевых систем доверенные среды выполнения предлагают платформу, которая позволяет запускать всю операционную систему внутри нее.
Внимание
Корпорация Майкрософт предлагает библиотеку C/C++ для Windows и Linux , которая может помочь в разработке. Библиотека позволяет легко получить отчет платформы SEV-SNP из оборудования, а также подтвердить его экземпляром службы Аттестация Azure. Служба Аттестация Azure может быть размещена корпорацией Майкрософт (общим) или собственным частным экземпляром.
Можно выбрать открытый код клиентский двоичный файл Windows и Linux, используюющий библиотеку аттестации гостей, чтобы упростить процесс аттестации гостей с помощью CVM. Двоичный файл клиента возвращает протестированный отчет платформы в виде веб-маркера JSON, который необходим для операции ключа Key Vault release
.
Примечание.
Маркер из службы Аттестация Azure действителен в течение 8 часов.
[Linux]
Войдите на свою виртуальную машину.
Клонируйте пример приложения Linux.
Установите пакет build-essential
. Этот пакет устанавливает все необходимое для компиляции примера приложения.
sudo apt-get install build-essential
Установить пакеты libcurl4-openssl-dev
и libjsoncpp-dev
.
sudo apt-get install libcurl4-openssl-dev
sudo apt-get install libjsoncpp-dev
Скачайте пакет аттестации.
Установите пакет аттестации. Обязательно замените <version>
скачаемую версию.
sudo dpkg -i azguestattestation1_<latest-version>_amd64.deb
Чтобы запустить пример клиента, перейдите в распакованную папку и выполните следующую команду:
sudo ./AttestationClient -a <attestation-url> -n <nonce-value> -o token
Примечание.
Если -o
не указано token
как, exe выводит двоичный результат true или false в зависимости от результата аттестации и платформы sevsnp
.
Войдите на свою виртуальную машину.
Клонируйте пример приложения Windows.
Перейдите в распакованную папку и запустите.VC_redist.x64.exe
VC_redist установит библиотеки среды выполнения Microsoft C и C++ (MSVC) на компьютере.
Чтобы запустить пример клиента, перейдите в распакованную папку и выполните следующую команду:
sudo ./AttestationClient -a <attestation-url> -n <nonce-value> -o token
Примечание.
Если -o
не указано token
как, exe выводит двоичный результат true или false в зависимости от результата аттестации и платформы sevsnp
.
Результат аттестации гостей
Результатом клиента аттестации гостей просто является строка в кодировке Base64. Это закодированное строковое значение — это подписанный веб-токен JSON (JWT), с заголовком, текстом и подписью. Можно разделить строку по .
значению (точка) и декодировать результаты base64.
eyJhbGciO...
Заголовок содержит универсальный jku
код ресурса (URI) набора JWK, который связывается с набором открытых ключей, закодированных в формате JSON. Один из которых соответствует ключу, используемому для цифровой подписи JWS. Указывает kid
, какой ключ использовался для подписи JWS.
{
"alg": "RS256",
"jku": "https://sharedweu.weu.attest.azure.net/certs",
"kid": "dRKh+hBcWUfQimSl3Iv6ZhStW3TSOt0ThwiTgUUqZAo=",
"typ": "JWT"
}
Текст ответа на аттестацию гостей будет проверен Azure Key Vault в качестве входных данных для проверки политики выпуска ключа. Как упоминалось ранее, Azure Key Vault использует "TpmEphemeralEncryptionKey
" в качестве ключа шифрования ключей.
{
"exp": 1671865218,
"iat": 1671836418,
"iss": "https://sharedweu.weu.attest.azure.net",
"jti": "ce395e5de9c638d384cd3bd06041e674edee820305596bba3029175af2018da0",
"nbf": 1671836418,
"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
],
"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": false,
"x-ms-azurevm-flightsigning-enabled": false,
"x-ms-azurevm-hvci-policy": 0,
"x-ms-azurevm-hypervisordebug-enabled": false,
"x-ms-azurevm-is-windows": false,
"x-ms-azurevm-kerneldebug-enabled": false,
"x-ms-azurevm-osbuild": "NotApplication",
"x-ms-azurevm-osdistro": "Ubuntu",
"x-ms-azurevm-ostype": "Linux",
"x-ms-azurevm-osversion-major": 20,
"x-ms-azurevm-osversion-minor": 4,
"x-ms-azurevm-signingdisabled": true,
"x-ms-azurevm-testsigning-enabled": false,
"x-ms-azurevm-vmid": "6506B531-1634-431E-99D2-42B7D3414AD0",
"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": "tXkRLAABQ7vgX96..1OQ"
}
],
"vm-configuration": {
"console-enabled": true,
"current-time": 1671835548,
"secure-boot": true,
"tpm-enabled": true,
"vmUniqueId": "6506B531-1634-431E-99D2-42B7D3414AD0"
}
},
"x-ms-sevsnpvm-authorkeydigest": "0000000000000..00",
"x-ms-sevsnpvm-bootloader-svn": 3,
"x-ms-sevsnpvm-familyId": "01000000000000000000000000000000",
"x-ms-sevsnpvm-guestsvn": 2,
"x-ms-sevsnpvm-hostdata": "0000000000000000000000000000000000000000000000000000000000000000",
"x-ms-sevsnpvm-idkeydigest": "57486a44..96",
"x-ms-sevsnpvm-imageId": "02000000000000000000000000000000",
"x-ms-sevsnpvm-is-debuggable": false,
"x-ms-sevsnpvm-launchmeasurement": "ad6de16..23",
"x-ms-sevsnpvm-microcode-svn": 115,
"x-ms-sevsnpvm-migration-allowed": false,
"x-ms-sevsnpvm-reportdata": "c6500..0000000",
"x-ms-sevsnpvm-reportid": "cf5ea742f08cb45240e8ad4..7eb7c6c86da6493",
"x-ms-sevsnpvm-smt-allowed": true,
"x-ms-sevsnpvm-snpfw-svn": 8,
"x-ms-sevsnpvm-tee-svn": 0,
"x-ms-sevsnpvm-vmpl": 0
},
"x-ms-policy-hash": "wm9mHlvTU82e8UqoOy1..RSNkfe99-69IYDq9eWs",
"x-ms-runtime": {
"client-payload": {
"nonce": ""
},
"keys": [
{
"e": "AQAB",
"key_ops": [
"encrypt"
],
"kid": "TpmEphemeralEncryptionKey", // key-encryption key candidate!
"kty": "RSA",
"n": "kVTLSwAAQpg..Q"
}
]
},
"x-ms-ver": "1.0"
}
Документация по службе Microsoft Аттестация Azure содержит подробный список, содержащий описания всех этих утверждений, связанных с SEV-SNP.
Мы можем использовать любой язык сценариев или программирования для получения отчета о подтвержденной платформе с помощью двоичного файла АттестацииClient. Так как виртуальная машина, развернутая на предыдущем шаге, включает управляемое удостоверение, мы должны получить маркер Azure AD для Key Vault из службы метаданных экземпляра (IMDS).
Настроив отчет о подтвержденной платформе в качестве полезных данных тела и маркера Microsoft Entra в заголовке авторизации, у вас есть все необходимое для выполнения операции ключаrelease
.
#Requires -Version 7
#Requires -RunAsAdministrator
#Requires -PSEdition Core
<#
.SYNOPSIS
Perform Secure Key Release operation in Azure Key Vault, provided this script is running inside an Azure Confidential Virtual Machine.
.DESCRIPTION
Perform Secure Key Release operation in Azure Key Vault, provided this script is running inside an Azure Confidential Virtual Machine.
The release key operation is applicable to all key types. The target key must be marked exportable. This operation requires the keys/release permission.
.PARAMETER -AttestationTenant
Provide the attestation instance base URI, for example https://mytenant.attest.azure.net.
.PARAMETER -VaultBaseUrl
Provide the vault name, for example https://myvault.vault.azure.net.
.PARAMETER -KeyName
Provide the name of the key to get.
.PARAMETER -KeyName
Provide the version parameter to retrieve a specific version of a key.
.INPUTS
None.
.OUTPUTS
System.Management.Automation.PSObject
.EXAMPLE
PS C:\> .\Invoke-SecureKeyRelease.ps1 -AttestationTenant "https://sharedweu.weu.attest.azure.net" -VaultBaseUrl "https://mykeyvault.vault.azure.net/" -KeyName "mykey" -KeyVersion "e473cd4c66224d16870bbe2eb4c58078"
#>
param (
[Parameter(Mandatory = $true)]
[string]
$AttestationTenant,
[Parameter(Mandatory = $true)]
[string]
$VaultBaseUrl,
[Parameter(Mandatory = $true)]
[string]
$KeyName,
[Parameter(Mandatory = $false)]
[string]
$KeyVersion
)
# Check if AttestationClient* exists.
$fileExists = Test-Path -Path "AttestationClient*"
if (!$fileExists) {
throw "AttestationClient binary not found. Please download it from 'https://github.com/Azure/confidential-computing-cvm-guest-attestation'."
}
$cmd = $null
if ($isLinux) {
$cmd = "sudo ./AttestationClient -a $attestationTenant -o token"
}
elseif ($isWindows) {
$cmd = "./AttestationClientApp.exe -a $attestationTenant -o token"
}
$attestedPlatformReportJwt = Invoke-Expression -Command $cmd
if (!$attestedPlatformReportJwt.StartsWith("eyJ")) {
throw "AttestationClient failed to get an attested platform report."
}
## Get access token from IMDS for Key Vault
$imdsUrl = 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https://vault.azure.net'
$kvTokenResponse = Invoke-WebRequest -Uri $imdsUrl -Headers @{Metadata = "true" }
if ($kvTokenResponse.StatusCode -ne 200) {
throw "Unable to get access token. Ensure Azure Managed Identity is enabled."
}
$kvAccessToken = ($kvTokenResponse.Content | ConvertFrom-Json).access_token
# Perform release key operation
if ([string]::IsNullOrEmpty($keyVersion)) {
$kvReleaseKeyUrl = "{0}/keys/{1}/release?api-version=7.3" -f $vaultBaseUrl, $keyName
}
else {
$kvReleaseKeyUrl = "{0}/keys/{1}/{2}/release?api-version=7.3" -f $vaultBaseUrl, $keyName, $keyVersion
}
$kvReleaseKeyHeaders = @{
Authorization = "Bearer $kvAccessToken"
'Content-Type' = 'application/json'
}
$kvReleaseKeyBody = @{
target = $attestedPlatformReportJwt
}
$kvReleaseKeyResponse = Invoke-WebRequest -Method POST -Uri $kvReleaseKeyUrl -Headers $kvReleaseKeyHeaders -Body ($kvReleaseKeyBody | ConvertTo-Json)
if ($kvReleaseKeyResponse.StatusCode -ne 200) {
Write-Error -Message "Unable to perform release key operation."
Write-Error -Message $kvReleaseKeyResponse.Content
}
else {
$kvReleaseKeyResponse.Content | ConvertFrom-Json
}
Ответ на выпуск ключа
Операция выпуска безопасного ключа возвращает только одно свойство внутри полезных данных JSON. Однако содержимое было закодировано также в кодировке Base64.
{
"value": "eyJhbGciOiJSUzI1NiIsImtpZCI6Ijg4RUFDM.."
}
Здесь у нас есть еще один заголовок, хотя этот имеет цепочку сертификатов X.509 в качестве свойства.
{
"alg": "RS256",
"kid": "88EAC2DB6BE4E051B0E05AEAF6CB79E675296121",
"x5t": "iOrC22vk4FGw4Frq9st55nUpYSE",
"typ": "JWT",
"x5t#S256": "BO7jbeU3BG0FEjetF8rSisRbkMfcdy0olhcnmYEwApA",
"x5c": [
"MIIIfDCCBmSgA..XQ==",
"MII..8ZZ8m",
"MII..lMrY="
]
}
Вы можете прочитать из массива "x5c
" в PowerShell, чтобы убедиться, что это действительный сертификат. Ниже приведен пример:
$certBase64 = "MIIIfDCCBmSgA..XQ=="
$cert = [System.Security.Cryptography.X509Certificates.X509Certificate2]([System.Convert]::FromBase64String($certBase64))
$cert | Format-List *
# NotAfter : 9/18/2023 6:14:06 PM
# NotBefore : 9/23/2022 6:14:06 PM
# ...
# Issuer : CN=Microsoft Azure TLS Issuing CA 06, O=Microsoft Corporation, C=US
# Subject : CN=vault.azure.net, O=Microsoft Corporation, L=Redmond, S=WA, C=US
Текст токена JWT ответа выглядит невероятно похоже на ответ, который вы получаете при вызове get
операции ключа. Однако операция release
включает key_hsm
свойство, помимо прочего.
{
"request": {
"api-version": "7.3",
"enc": "CKM_RSA_AES_KEY_WRAP",
"kid": "https://mykeyvault.vault.azure.net/keys/mykey"
},
"response": {
"key": {
"key": {
"kid": "https://mykeyvault.vault.azure.net/keys/mykey/e473cd4c66224d16870bbe2eb4c58078",
"kty": "RSA-HSM",
"key_ops": [
"encrypt",
"decrypt"
],
"n": "nwFQ8p..20M",
"e": "AQAB",
"key_hsm": "eyJzY2hlbW..GIifQ"
},
"attributes": {
"enabled": true,
"nbf": 1671577355,
"exp": 1703113355,
"created": 1671577377,
"updated": 1671827011,
"recoveryLevel": "Recoverable+Purgeable",
"recoverableDays": 90,
"exportable": true
},
"tags": {},
"release_policy": {
"data": "eyJ2ZXJzaW9uIjoiMS4wLjAiLCJhbnlPZiI6W3siYXV0aG9yaXR5IjoiaHR0cHM6Ly9zaGFyZWR3ZXUud2V1LmF0dGVzdC5henVyZS5uZXQiLCJhbGxPZiI6W3siY2xhaW0iOiJ4LW1zLWlzb2xhdGlvbi10ZWUueC1tcy1hdHRlc3RhdGlvbi10eXBlIiwiZXF1YWxzIjoic2V2c25wdm0ifSx7ImNsYWltIjoieC1tcy1pc29sYXRpb24tdGVlLngtbXMtY29tcGxpYW5jZS1zdGF0dXMiLCJlcXVhbHMiOiJhenVyZS1jb21wbGlhbnQtY3ZtIn1dfV19",
"immutable": false
}
}
}
}
Если вы декодируете значение $.response.key.release_policy.data
в base64, вы получите представление JSON политики выпуска ключа Key Vault, определенной на предыдущем шаге.
Декодированные key_hsm
значения свойства base64 выглядят следующим образом:
{
"schema_version": "1.0",
"header": {
"kid": "TpmEphemeralEncryptionKey", // (key identifier of KEK)
"alg": "dir", // Direct mode, i.e. the referenced 'kid' is used to directly protect the ciphertext
"enc": "CKM_RSA_AES_KEY_WRAP"
},
"ciphertext": "Rftxvr..lb"
}
Следующие шаги
Примерыполитики SKR. Узнайте, как использовать интеграцию Microsoft Defender для облака с конфиденциальными виртуальными машинами с установленнойгостевой аттестацией. Дополнительные сведения о функцииаттестации гостевых виртуальных машин Azure