Utilice una cuenta Azure que esté asociada a la suscripción Azure que contiene la máquina virtual.
Para habilitar la identidad administrada asignada por el sistema, cargue la plantilla en un editor, busque el recurso de interés Microsoft.Compute/virtualMachines
en la sección resources
y agregue la propiedad "identity"
en el mismo nivel que la propiedad "type": "Microsoft.Compute/virtualMachines"
. Use la sintaxis siguiente:
"identity": {
"type": "SystemAssigned"
},
La plantilla final tiene el siguiente ejemplo
"resources": [
{
"apiVersion": "2021-11-01",
"type": "Microsoft.Compute/virtualMachines",
"name": "[parameters('vmName')]",
"location": "[parameters('location')]",
"identity": {
"type": "SystemAssigned",
},
//other resource provider properties...
}
]
Adición de la directiva de acceso a Azure Key Vault
Una vez que habilite una identidad gestionada asignada por el sistema para su CVM, tendrá que proporcionarle acceso al plano de datos de Azure Key Vault donde se almacenan los objetos clave. Para garantizar que sólo nuestra máquina virtual confidencial pueda ejecutar la operación de liberación, sólo concederemos el permiso específico necesario.
Nota:
Puede encontrar el ID del objeto de identidad administrada en las opciones de identidad de la máquina virtual, en el portal de Azure. Como alternativa, puede recuperarlo con PowerShell, la CLI de Azure, Bicep o plantillas de 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'
]
}
}
]
}
}
[Plantilla de 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')]"
]
}
Preparar la política de liberación
Las directivas de versión de clave segura de Key Vault se modelan después de Azure Policy, con una gramática ligeramente diferente.
La idea es cuando pasamos el informe de plataforma atestiguada, en forma de JSON Web Token (JWT), a Key Vault. A su vez, examinará el JWT y comprobará si las notificaciones del informe de plataforma atestiguadas coinciden con las notificaciones de la directiva.
Por ejemplo, digamos que deseamos liberar una clave sólo cuando nuestro informe de plataforma atestiguado tiene propiedades como:
- Atestiguado por el punto final del servicio Microsoft Azure Attestation (MAA) "https://sharedweu.weu.attest.azure.net".
- Este
authority
valor de la directiva se compara con la iss
propiedad (emisor) en el token.
- Y que también contiene un objeto llamado
x-ms-isolation-tee
con una propiedad denominada x-ms-attestation-type
, que contiene el valor sevsnpvm
.
- MAA como servicio Azure ha atestiguado que el CVM se ejecuta en un procesador AMD SEV-SNP genuino.
- Y que también contiene un objeto llamado
x-ms-isolation-tee
con una propiedad denominada x-ms-compliance-status
, que contiene el valor azure-compliant-cvm
.
- MAA como servicio de Azure tiene la capacidad de atestiguar que CVM es una máquina virtual confidencial de Azure compatible.
Cree una carpeta denominada assets
y agregue el siguiente contenido JSON a un archivo denominado 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"
}
]
}
]
}
La política de liberación es una anyOf
condición que contiene una matriz de autoridades clave. Una claim
condición es un objeto JSON que identifica un nombre de notificación, una condición para buscar coincidencias y un valor. Los objetos de condición AnyOf
y AllOf
permiten modelar un proceso lógico OR
y AND
. Actualmente, solo podemos realizar una equals
comparación en claim
. Las propiedades de condición se colocan junto con las authority
propiedades.
Importante
Contiene al menos una clave de cifrado de claves y una o más notificaciones sobre el entorno de destino (por ejemplo, tipo TEE, publicador o versión) que coinciden con la directiva de liberación de claves. La clave de cifrado de claves es una clave RSA pública propiedad del entorno de ejecución de destino y protegida por este que se usa para la exportación de claves. Debe aparecer en la notificación de claves TEE (x-ms-runtime/keys). Esta notificación es un objeto JSON que representa un JSON Web Key Set. Dentro de JWKS, una de las claves debe cumplir los requisitos para su uso como clave de cifrado (key_use es «enc» o key_ops contiene «encrypt»). Se elige la primera clave adecuada.
Key Vault elige la primera clave adecuada de "keys
" la propiedad de matriz en el objeto "x-ms-runtime
", busca una clave RSA pública con "key_use": ["enc"]
o "key_ops": ["encrypt"]
. Un ejemplo de un informe de plataforma atestiguado tendría el siguiente aspecto:
{
//...
"x-ms-runtime": {
"client-payload": {
"nonce": "MTIzNA=="
},
"keys": [
{
"e": "AQAB",
"key_ops": [
"encrypt"
],
"kid": "TpmEphemeralEncryptionKey",
"kty": "RSA",
"n": "9v2XQgAA6y18CxV8dSGnh..."
}
]
},
//...
}
En este ejemplo, solo tenemos una clave en la $.x-ms-runtime.keys
ruta de acceso. Key Vault usa la TpmEphemeralEncryptionKey
clave como clave de cifrado de claves.
Nota:
Tenga en cuenta que puede haber una clave en $.x-ms-isolation-tee.x-ms-runtime.keys
, no es la clave que usará Key Vault.
Creación de una clave exportable con la directiva de versión
Creamos una directiva de acceso de Key Vault que permite a una máquina virtual confidencial de Azure realizar la release
operación de clave. Por último, debemos incluir nuestra política de publicación como cadena codificada en base64 durante la creación de la clave. La clave debe ser una clave exportable, respaldada por un HSM.
Nota:
Las claves respaldadas por HSM están disponibles con Azure Key Vault Premium y HSM administrado de 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')
}
}
}
[Plantilla de 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')]"
]
}
Podemos comprobar que Key Vault ha creado una clave nueva, respaldada por HSM y que contiene nuestra directiva de liberación de segura de claves; para ello, vaya a Azure Portal y seleccione la clave. La clave prevista se marcará como "exportable".
Cliente de atestación de invitado
La atestación nos ayuda a evaluar criptográficamente que algo se está ejecutando en el estado operativo previsto. Es el proceso mediante el cual una parte, el verificador, evalúa la fiabilidad de un homólogo potencialmente no fiable, el atestiguador. Con la atestación remota de invitados, el entorno de ejecución de confianza ofrece una plataforma que permite ejecutar un sistema operativo completo en su interior.
Importante
Microsoft ofrece una biblioteca de C/C++, tanto para Windows como para Linux que pueden ayudar a sus esfuerzos de desarrollo. La biblioteca facilita la adquisición de un informe de plataforma SEV-SNP del hardware y también de tenerlo atestiguado por una instancia del servicio Azure Attestation. El servicio Azure Attestation puede ser uno hospedado por Microsoft (compartido) o por su propia instancia privada.
Se puede elegir un binario cliente de código abierto para Windows y Linux que utilice la biblioteca de atestación de invitados para facilitar el proceso de atestación de invitados con CVM. El binario del cliente devuelve el informe de plataforma atestiguado como un token web JSON, que es lo que se necesita para el funcionamiento de la clave de release
Key Vault.
Nota:
Un token del servicio Azure Attestation es válido durante 8 horas.
[Linux]
Inicie sesión en la máquina virtual.
Clonación de la aplicación Linux de ejemplo.
Instale el paquete build-essential
. Este paquete instala todo lo necesario para compilar la aplicación de ejemplo.
sudo apt-get install build-essential
Instale los paquetes libcurl4-openssl-dev
y libjsoncpp-dev
.
sudo apt-get install libcurl4-openssl-dev
sudo apt-get install libjsoncpp-dev
Descargue el paquete de atestación.
Instale el paquete de atestación. Asegúrese de reemplazar <version>
por la versión que ha descargado.
sudo dpkg -i azguestattestation1_<latest-version>_amd64.deb
Para ejecutar el cliente de ejemplo, vaya dentro de la carpeta descomprimida y ejecute el siguiente comando:
sudo ./AttestationClient -a <attestation-url> -n <nonce-value> -o token
Nota:
Si -o
no se especifica como token
, el exe imprime un resultado binario vedadero o falso en función del resultado de atestación y de la plataforma que es sevsnp
.
Inicie sesión en la máquina virtual.
Clonación de la aplicación Windows de ejemplo.
Navegue dentro de la carpeta descomprimida y ejecute VC_redist.x64.exe
. VC_redist instalará las bibliotecas de tiempo de ejecución de Microsoft C y C++ (MSVC) en la máquina.
Para ejecutar el cliente de ejemplo, vaya dentro de la carpeta descomprimida y ejecute el siguiente comando:
sudo ./AttestationClient -a <attestation-url> -n <nonce-value> -o token
Nota:
Si -o
no se especifica como token
, el exe imprime un resultado binario vedadero o falso en función del resultado de atestación y de la plataforma que es sevsnp
.
Resultado de la atestación de invitado
El resultado del cliente de atestación de invitado es simplemente una cadena codificada en base64. Este valor de cadena codificado es un token web JSON (JWT) firmado, con un encabezado, un cuerpo y una firma. Puede dividir la cadena por el .
valor (punto) y base64 descodificar los resultados.
eyJhbGciO...
El encabezado contiene un jku
, también conocido como URI de conjunto de JWK que vincula a un conjunto de claves públicas codificadas en JSON. Uno de los cuales corresponde a la clave usada para firmar digitalmente el JWS. El kid
indica qué clave se usó para firmar el JWS.
{
"alg": "RS256",
"jku": "https://sharedweu.weu.attest.azure.net/certs",
"kid": "dRKh+hBcWUfQimSl3Iv6ZhStW3TSOt0ThwiTgUUqZAo=",
"typ": "JWT"
}
Azure Key Vault validará el cuerpo de la respuesta de atestación de invitado como entrada para comprobar la política de liberación de claves. Como se ha indicado anteriormente, Azure Key Vault utiliza "TpmEphemeralEncryptionKey
" como clave de cifrado.
{
"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"
}
La documentación del servicio Microsoft Azure Attestation tiene una lista extensa que contiene descripciones de todas estas notificaciones relacionadas con SEV-SNP.
Podemos usar cualquier scripting o lenguaje de programación para recibir un informe de plataforma atestiguado mediante el binario AttestationClient. Dado que la máquina virtual que desplegamos en un paso anterior tiene la identidad gestionada habilitada, deberíamos obtener un token de Azure AD para Key Vault desde el servicio de metadatos de instancia (IMDS).
Configurando el informe atestiguado de la plataforma como la carga útil del cuerpo y el token de Microsoft Entra en nuestro encabezado de autorización, usted tiene todo lo necesario para realizar la release
operación clave.
#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
}
Respuesta de liberación de claves
La operación de liberación de clave segura solo devuelve una sola propiedad dentro de su carga JSON. Sin embargo, el contenido también se ha codificado en base64.
{
"value": "eyJhbGciOiJSUzI1NiIsImtpZCI6Ijg4RUFDM.."
}
Aquí tenemos otro encabezado, aunque este tiene una cadena de certificados X.509 como propiedad.
{
"alg": "RS256",
"kid": "88EAC2DB6BE4E051B0E05AEAF6CB79E675296121",
"x5t": "iOrC22vk4FGw4Frq9st55nUpYSE",
"typ": "JWT",
"x5t#S256": "BO7jbeU3BG0FEjetF8rSisRbkMfcdy0olhcnmYEwApA",
"x5c": [
"MIIIfDCCBmSgA..XQ==",
"MII..8ZZ8m",
"MII..lMrY="
]
}
Puede leer desde la matriz "x5c
" de PowerShell, lo que puede ayudarle a comprobar que se trata de un certificado válido. Aquí tiene un ejemplo:
$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
El contenido del token JWT de la respuesta es increíblemente similar a la respuesta que se obtiene al invocar la get
operación clave. Sin embargo, la release
operación incluye la key_hsm
propiedad, entre otras cosas.
{
"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
}
}
}
}
Si su base64 decodifica el valor bajo$.response.key.release_policy.data
, obtendrá la representación JSON de la política de liberación de claves de Key Vault que definimos en un paso anterior.
El key_hsm
valor descodificado de la propiedad base64 tiene este aspecto:
{
"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"
}
Pasos siguientes
Ejemplos de directivas de SKRAprenda a usar la integración de Microsoft Defender for Cloud con máquinas virtuales confidenciales con atestación de invitado instaladaMás información sobre la característica de atestación de invitado Más información sobre las máquinas virtuales confidenciales de Azure