Utilizzare un account associato alla sottoscrizione di Azure che contiene la macchina virtuale.
Per abilitare l'identità gestita assegnata dal sistema, caricare il modello in un editor, individuare la risorsa interessata Microsoft.Compute/virtualMachines
nella sezione resources
e aggiungere la proprietà "identity"
allo stesso livello della proprietà "type": "Microsoft.Compute/virtualMachines"
. Usare la sintassi seguente:
"identity": {
"type": "SystemAssigned"
},
Il modello finale è simile a quello riportato nell'esempio seguente
"resources": [
{
"apiVersion": "2021-11-01",
"type": "Microsoft.Compute/virtualMachines",
"name": "[parameters('vmName')]",
"location": "[parameters('location')]",
"identity": {
"type": "SystemAssigned",
},
//other resource provider properties...
}
]
Aggiungere il criterio di accesso ad Azure Key Vault
Dopo aver abilitato un'identità gestita assegnata dal sistema per la macchina virtuale riservata, è necessario concederle l'accesso al piano dati di Azure Key Vault dove sono archiviati gli oggetti chiave. Per assicurarsi che solo la macchina virtuale riservata possa eseguire l'operazione di rilascio, verrà concessa esclusivamente l'autorizzazione specifica richiesta.
Nota
È possibile trovare l'ID oggetto dell'identità gestita nelle opzioni dell'identità della macchina virtuale nel portale di Azure. In alternativa, è possibile recuperarlo tramite PowerShell , l'interfaccia della riga di comando di Azure, i modelli Bicep o 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'
]
}
}
]
}
}
[Modello di 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')]"
]
}
Preparare i criteri di rilascio
I criteri di rilascio delle chiavi sicure di Key Vault sono elaborati secondo i Criteri di Azure, con una grammatica leggermente diversa.
L'idea è simile a quando si passa il report della piattaforma con attestazione, sotto forma di token JSON Web (JWT) a Key Vault. A sua volta, verrà esaminato il token JWT verificando se le attestazioni del report della piattaforma con attestazione corrispondono a quelle presenti nei criteri.
Si supponga, ad esempio, di voler rilasciare una chiave solo quando il report della piattaforma con attestazione ha proprietà come:
- Attestazione dall'endpoint del servizio di Attestazione di Microsoft Azure (MAA) "https://sharedweu.weu.attest.azure.net".
- Questo valore
authority
dei criteri viene confrontato con la proprietà (autorità di certificazione) iss
nel token.
- Inoltre, contiene anche un oggetto denominato
x-ms-isolation-tee
con una proprietà denominata x-ms-attestation-type
che contiene il valore sevsnpvm
.
- MAA come servizio di Azure ha attestato che la macchina virtuale riservata è in esecuzione in un processore originale AMD SEV-SNP.
- Inoltre, contiene anche un oggetto denominato
x-ms-isolation-tee
con una proprietà denominata x-ms-compliance-status
che contiene il valore azure-compliant-cvm
.
- MAA come servizio di Azure ha la capacità di attestare che CVM è una macchina virtuale riservata conforme di Azure.
Creare una nuova cartella denominata assets
e aggiungere il contenuto JSON seguente a un file denominato 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"
}
]
}
]
}
I criteri di rilascio sono una anyOf
condizione contenente una matrice di autorità per le chiavi. Una condizione claim
è un oggetto JSON che identifica un nome di attestazione, una condizione per la corrispondenza e un valore. Gli oggetti di condizione AnyOf
e AllOf
consentono di elaborare un oggetto logico OR
e AND
. Attualmente, è possibile eseguire solo un confronto equals
su un oggetto claim
. Le proprietà di condizione vengono posizionate insieme alle proprietà authority
.
Importante
Un'asserzione dell'ambiente contiene almeno una chiave di crittografia della chiave e una o più attestazioni relative all'ambiente di destinazione (ad esempio, tipo di TEE, editore, versione), corrispondenti ai criteri di rilascio delle chiavi. La chiave di crittografia della chiave è una chiave RSA pubblica di proprietà e protetta dall'ambiente di esecuzione di destinazione usato per l'esportazione della chiave. Deve essere visualizzata nell'attestazione delle chiavi TEE (x-ms-runtime/keys). Questa attestazione è un oggetto JSON che rappresenta un set di JSON Web Key. In JWKS, una delle chiavi deve soddisfare i requisiti per l'uso come chiave di crittografia (key_use è "enc" o key_ops contiene "encrypt"). Viene scelta la prima chiave appropriata.
Key Vault seleziona la prima chiave appropriata dalla proprietà array "keys
" nell'oggetto "x-ms-runtime
", cerca una chiave RSA pubblica con "key_use": ["enc"]
o "key_ops": ["encrypt"]
. Un esempio di report della piattaforma con attestazione sarà simile al seguente:
{
//...
"x-ms-runtime": {
"client-payload": {
"nonce": "MTIzNA=="
},
"keys": [
{
"e": "AQAB",
"key_ops": [
"encrypt"
],
"kid": "TpmEphemeralEncryptionKey",
"kty": "RSA",
"n": "9v2XQgAA6y18CxV8dSGnh..."
}
]
},
//...
}
In questo esempio è presente una sola chiave nel percorso $.x-ms-runtime.keys
. Key Vault usa la chiave TpmEphemeralEncryptionKey
come chiave di crittografia della chiave.
Nota
Notare che potrebbe essere presente una chiave in $.x-ms-isolation-tee.x-ms-runtime.keys
, questa non è la chiave che verrà usata da Key Vault.
Creare una chiave esportabile con i criteri di rilascio
Si deve creare un criterio di accesso a Key Vault che consenta a una macchina virtuale riservata di Azure di eseguire l'operazione di release
della chiave. Infine, è necessario includere i criteri di rilascio come stringa con codifica Base64 durante la creazione della chiave. La chiave deve essere una chiave esportabile, supportata da un modulo di protezione hardware.
Nota
Le chiavi supportate dal modulo di protezione hardware sono disponibili con Azure Key Vault Premium e con il modulo di protezione hardware gestito di 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')
}
}
}
[Modello di 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')]"
]
}
È possibile verificare se Key Vault ha creato una nuova chiave supportata dal modulo di protezione hardware e che contenga i criteri di rilascio sicuri della chiave passando al portale di Azure e selezionando la chiave. La chiave desiderata sarà contrassegnata come "esportabile".
Client di attestazione guest
L'attestazione consente di valutare tramite crittografia che un elemento è in esecuzione nello stato operativo previsto. È il processo in base al quale una parte, l'entità di verifica (Verifier), valuta l'attendibilità di un peer potenzialmente non attendibile, l'Attester. Con l'attestazione guest remota, l'ambiente di esecuzione attendibile offre una piattaforma che consente di eseguire un intero sistema operativo al suo interno.
Importante
Microsoft offre una libreria C/C++, sia per Windows che per Linux, per facilitare le attività di sviluppo. La libreria semplifica l'acquisizione di un report della piattaforma SEV-SNP dall'hardware, nonché l'attestazione da parte di un'istanza del servizio di attestazione di Azure. Il servizio di attestazione di Azure può essere ospitato da Microsoft (condiviso) o dalla propria istanza privata.
È possibile scegliere un file client binario open source di Windows e Linux che usa la libreria di attestazione guest per semplificare il processo di attestazione guest con le macchine virtuali riservate. Il file binario client restituisce il report della piattaforma con attestazione come token JSON Web, che è ciò che serve per l'operazione della chiave release
di Key Vault.
Nota
Un token del servizio di attestazione di Azure è valido per 8 ore.
[Linux]
Accedere alla VM.
Clonare l'applicazione Linux di esempio.
Installare il pacchetto build-essential
. Questo pacchetto installa tutti gli elementi necessari per compilare l'applicazione di esempio.
sudo apt-get install build-essential
Installare i pacchetti libcurl4-openssl-dev
e libjsoncpp-dev
.
sudo apt-get install libcurl4-openssl-dev
sudo apt-get install libjsoncpp-dev
Scaricare il pacchetto di attestazione.
Installare il pacchetto di attestazione. Assicurarsi di sostituire <version>
con la versione scaricata.
sudo dpkg -i azguestattestation1_<latest-version>_amd64.deb
Per eseguire il client di esempio, passare all'interno della cartella decompressa ed eseguire il comando seguente:
sudo ./AttestationClient -a <attestation-url> -n <nonce-value> -o token
Nota
Se non si specifica -o
come token
, l'exe stampa un risultato binario true o false a seconda del risultato dell'attestazione e la piattaforma è sevsnp
.
Accedere alla VM.
Clonare l'applicazione Windows di esempio.
Esplorare la cartella decompressa ed eseguire VC_redist.x64.exe
. VC_redist installerà nel computer le librerie di runtime Microsoft C e C++ (MSVC).
Per eseguire il client di esempio, passare all'interno della cartella decompressa ed eseguire il comando seguente:
sudo ./AttestationClient -a <attestation-url> -n <nonce-value> -o token
Nota
Se non si specifica -o
come token
, l'exe stampa un risultato binario true o false a seconda del risultato dell'attestazione e la piattaforma è sevsnp
.
Risultato attestazione guest
Il risultato del client di attestazione guest è semplicemente una stringa con codifica Base64. Questo valore stringa con codifica è un token JSON Web (JWT) firmato, con un'intestazione, un corpo e una firma. È possibile suddividere la stringa con il valore .
(punto) ed eseguire la decodifica in Base64 dei risultati.
eyJhbGciO...
L'intestazione contiene un elemento jku
, noto anche come URI del set JWK che si collega a un set di chiavi pubbliche con codifica JSON. Una di esse corrisponde alla chiave usata per firmare digitalmente il file JWS. Indica kid
quale chiave è stata usata per firmare il file JWS.
{
"alg": "RS256",
"jku": "https://sharedweu.weu.attest.azure.net/certs",
"kid": "dRKh+hBcWUfQimSl3Iv6ZhStW3TSOt0ThwiTgUUqZAo=",
"typ": "JWT"
}
Il corpo della risposta di attestazione guest verrà convalidato da Azure Key Vault come input per testare i criteri di rilascio della chiave. Come indicato in precedenza, Azure Key Vault utilizza "TpmEphemeralEncryptionKey
" come chiave di crittografia della chiave.
{
"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 documentazione per il servizio di attestazione di Microsoft Azure include un elenco completo contenente le descrizioni di tutte queste attestazioni correlate a SEV-SNP.
È possibile usare qualsiasi linguaggio di scripting o programmazione per ricevere un report della piattaforma con attestazione utilizzando il file binario AttestationClient. Poiché la macchina virtuale distribuita in un passaggio precedente ha l'identità gestita abilitata, è necessario ottenere un token di Azure AD per Key Vault dal servizio metadati dell'istanza (IMDS).
Configurando il report della piattaforma con attestazione come payload del corpo e il token Microsoft Entra nell'intestazione dell'autorizzazione, si dispone di tutti gli elementi necessari per eseguire l'operazione di release
della chiave.
#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
}
Risposta al rilascio della chiave
L'operazione di rilascio di una chiave sicura restituisce solo una singola proprietà all'interno del payload JSON. Tuttavia, anche il contenuto ha la codifica in Base64.
{
"value": "eyJhbGciOiJSUzI1NiIsImtpZCI6Ijg4RUFDM.."
}
Qui è presente un'altra intestazione, anche se questa ha una catena di certificati X.509 come proprietà.
{
"alg": "RS256",
"kid": "88EAC2DB6BE4E051B0E05AEAF6CB79E675296121",
"x5t": "iOrC22vk4FGw4Frq9st55nUpYSE",
"typ": "JWT",
"x5t#S256": "BO7jbeU3BG0FEjetF8rSisRbkMfcdy0olhcnmYEwApA",
"x5c": [
"MIIIfDCCBmSgA..XQ==",
"MII..8ZZ8m",
"MII..lMrY="
]
}
È possibile leggere dall'array "x5c
" in PowerShell. Ciò consente di verificare che si tratta di un certificato valido. Di seguito è riportato un esempio:
$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
Il corpo del token JWT della risposta è incredibilmente simile alla risposta che si ottiene quando si richiama l'operazione di get
della chiave. Tuttavia, l'operazione release
include la proprietà key_hsm
, tra le altre cose.
{
"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
}
}
}
}
Se si decodifica in Base64 il valore in $.response.key.release_policy.data
, si ottiene la rappresentazione JSON dei criteri di rilascio delle chiavi di Key Vault, definiti in un passaggio precedente.
Il valore decodificato in Base64 della proprietà key_hsm
è simile a quanto segue:
{
"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"
}
Passaggi successivi
Esempi di criteri SKRInformazioni su come usare l'integrazione di Microsoft Defender for Cloud con VM riservate con attestazione guest installataAltre informazioni sulla funzionalità di attestazione guestInformazioni sulle macchine virtuali riservate di Azure