Använd ett Azure-konto som är associerat med Den Azure-prenumeration som innehåller den virtuella datorn.
Om du vill aktivera systemtilldelad hanterad identitet läser du in mallen i ett redigeringsprogram, letar upp resursen Microsoft.Compute/virtualMachines
av intresse i resources
avsnittet och lägger till "identity"
egenskapen på samma nivå som "type": "Microsoft.Compute/virtualMachines"
egenskapen. Använd följande syntax:
"identity": {
"type": "SystemAssigned"
},
Den slutliga mallen ser exemplet nedan
"resources": [
{
"apiVersion": "2021-11-01",
"type": "Microsoft.Compute/virtualMachines",
"name": "[parameters('vmName')]",
"location": "[parameters('location')]",
"identity": {
"type": "SystemAssigned",
},
//other resource provider properties...
}
]
Lägga till åtkomstprincipen i Azure Key Vault
När du har aktiverat en systemtilldelad hanterad identitet för din CVM måste du ge den åtkomst till Azure Key Vault-dataplanet där nyckelobjekt lagras. För att säkerställa att endast den konfidentiella virtuella datorn kan köra versionsåtgärden beviljar vi endast den specifika behörighet som krävs.
Kommentar
Du hittar objekt-ID:t för hanterad identitet i identitetsalternativen för den virtuella datorn i Azure Portal. Du kan också hämta den med PowerShell-, Azure CLI-, Bicep- eller ARM-mallar.
[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-mall 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')]"
]
}
Förbereda versionsprincipen
Key Vault Secure Key Release-principer modelleras efter Azure Policy, med en något annorlunda grammatik.
Tanken är när vi skickar den intygade plattformsrapporten, i form av en JSON-webbtoken (JWT), till Key Vault. Den kommer i sin tur att titta på JWT och kontrollera om de intygade plattformsrapportanspråken matchar anspråken i principen.
Anta till exempel att vi bara vill släppa en nyckel när vår attesterade plattformsrapport har egenskaper som:
- Attesterad av Tjänstslutpunkten Microsoft Azure Attestation (MAA) "https://sharedweu.weu.attest.azure.net".
- Det här
authority
värdet från principen jämförs med egenskapen (utfärdare iss
) i token.
- Och att det också innehåller ett objekt som heter
x-ms-isolation-tee
med en egenskap som heter x-ms-attestation-type
, som innehåller värdet sevsnpvm
.
- MAA som Azure-tjänst har intygat att CVM körs i en äkta AMD SEV-SNP-processor.
- Och att det också innehåller ett objekt som heter
x-ms-isolation-tee
med en egenskap som heter x-ms-compliance-status
, som innehåller värdet azure-compliant-cvm
.
- MAA som en Azure-tjänst har möjlighet att intyga att CVM är en kompatibel virtuell Azure-dator.
Skapa en ny mapp med namnet assets
och lägg till följande JSON-innehåll i en fil med namnet 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"
}
]
}
]
}
Versionsprincip är ett anyOf
villkor som innehåller en matris med nyckelmyndigheter. Ett claim
villkor är ett JSON-objekt som identifierar ett anspråksnamn, ett villkor för matchning och ett värde. Villkorsobjekten AnyOf
och AllOf
tillåter modellering av en logisk OR
och AND
. För närvarande kan vi bara göra en equals
jämförelse på en claim
. Villkorsegenskaper placeras tillsammans med authority
egenskaper.
Viktigt!
En miljökontroll innehåller minst en nyckelkrypteringsnyckel och ett eller flera anspråk om målmiljön (till exempel TEE-typ, utgivare, version) som matchas mot nyckelfrigöringsprincipen. Nyckelkrypteringsnyckeln är en offentlig RSA-nyckel som ägs och skyddas av målkörningsmiljön som används för nyckelexport. Det måste visas i TEE-nyckelanspråket (x-ms-runtime/keys). Det här anspråket är ett JSON-objekt som representerar en JSON-webbnyckeluppsättning. I JWKS måste en av nycklarna uppfylla kraven för användning som krypteringsnyckel (key_use är "enc" eller key_ops innehåller "kryptering"). Den första lämpliga nyckeln väljs.
Key Vault väljer den första lämpliga nyckeln från matrisegenskapenkeys
i objektet "x-ms-runtime
" och söker efter en offentlig RSA-nyckel med "key_use": ["enc"]
eller "key_ops": ["encrypt"]
. Ett exempel på en attesterad plattformsrapport skulle se ut så här:
{
//...
"x-ms-runtime": {
"client-payload": {
"nonce": "MTIzNA=="
},
"keys": [
{
"e": "AQAB",
"key_ops": [
"encrypt"
],
"kid": "TpmEphemeralEncryptionKey",
"kty": "RSA",
"n": "9v2XQgAA6y18CxV8dSGnh..."
}
]
},
//...
}
I det här exemplet har vi bara en nyckel under $.x-ms-runtime.keys
sökvägen. Key Vault använder TpmEphemeralEncryptionKey
nyckeln som nyckelkrypteringsnyckel.
Kommentar
Observera att det kan finnas en nyckel under $.x-ms-isolation-tee.x-ms-runtime.keys
, detta är inte den nyckel som Key Vault kommer att använda.
Skapa en exporterbar nyckel med versionsprincip
Vi skapar en Key Vault-åtkomstprincip som gör att en azure konfidentiell virtuell dator kan utföra nyckelåtgärden release
. Slutligen måste vi inkludera vår versionsprincip som en base64-kodad sträng när nyckeln skapas. Nyckeln måste vara en exporterbar nyckel som backas upp av en HSM.
Kommentar
HSM-säkerhetskopierade nycklar är tillgängliga med Azure Key Vault Premium och Azure Key Vault Managed HSM.
[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-mall 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')]"
]
}
Vi kan kontrollera att Key Vault har skapat en ny, HSM-backad nyckel och att den innehåller vår princip för säker nyckelpublicering genom att gå till Azure Portal och välja vår nyckel. Den avsedda nyckeln markeras som "exportbar".
Gästattesteringsklient
Attestering hjälper oss att kryptografiskt bedöma att något körs i avsett driftstillstånd. Det är den process genom vilken en part, kontrollanten, bedömer tillförlitligheten hos en potentiellt ej betrodd peer, attester. Med fjärrgästattestering erbjuder den betrodda körningsmiljön en plattform som gör att du kan köra ett helt operativsystem inuti det.
Viktigt!
Microsoft erbjuder ett C/C++-bibliotek för både Windows och Linux som kan hjälpa dig att utveckla. Biblioteket gör det enkelt att hämta en SEV-SNP-plattformsrapport från maskinvaran och även att få den bekräftad av en instans av Azure Attestation Service. Azure Attestation-tjänsten kan antingen hanteras av Microsoft (delad) eller din egen privata instans.
En öppen källkod d Windows- och Linux-klientbinärfil som använder gästattesteringsbiblioteket kan väljas för att göra gästattesteringsprocessen enkel med CVM:er. Klientbinärfilen returnerar den intygade plattformsrapporten som en JSON-webbtoken, vilket är vad som behövs för Key Vaults release
nyckelåtgärd.
Kommentar
En token från Azure Attestation-tjänsten är giltig i 8 timmar.
[Linux]
Logga in på den virtuella datorn.
Klona Linux-exempelprogrammet.
Installera paketet build-essential
. Det här paketet installerar allt som krävs för att kompilera exempelprogrammet.
sudo apt-get install build-essential
Installera paketen libcurl4-openssl-dev
och libjsoncpp-dev
.
sudo apt-get install libcurl4-openssl-dev
sudo apt-get install libjsoncpp-dev
Ladda ned attesteringspaketet.
Installera attesteringspaketet. Ersätt <version>
med den version som du laddade ned.
sudo dpkg -i azguestattestation1_<latest-version>_amd64.deb
Om du vill köra exempelklienten navigerar du i den uppackade mappen och kör kommandot nedan:
sudo ./AttestationClient -a <attestation-url> -n <nonce-value> -o token
Kommentar
Om -o
inte anges till som token
skriver exe ut ett binärt resultat sant eller falskt beroende på attesteringsresultatet och plattformen är sevsnp
.
Logga in på den virtuella datorn.
Klona Windows-exempelprogrammet.
Navigera i den uppackade mappen och kör VC_redist.x64.exe
. VC_redist installerar Microsoft C- och C++-körningsbibliotek (MSVC) på datorn.
Om du vill köra exempelklienten navigerar du i den uppackade mappen och kör kommandot nedan:
sudo ./AttestationClient -a <attestation-url> -n <nonce-value> -o token
Kommentar
Om -o
inte anges till som token
skriver exe ut ett binärt resultat sant eller falskt beroende på attesteringsresultatet och plattformen är sevsnp
.
Resultat av gästattestering
Resultatet från gästattesteringsklienten är helt enkelt en base64-kodad sträng. Det här kodade strängvärdet är en signerad JSON-webbtoken (JWT), med en rubrik, brödtext och signatur. Du kan dela upp strängen med .
värdet (punkt) och base64 avkoda resultatet.
eyJhbGciO...
Rubriken innehåller en jku
, även känd som JWK Set URI som länkar till en uppsättning JSON-kodade offentliga nycklar. En av dem motsvarar nyckeln som används för att signera JWS digitalt. Anger kid
vilken nyckel som användes för att signera JWS.
{
"alg": "RS256",
"jku": "https://sharedweu.weu.attest.azure.net/certs",
"kid": "dRKh+hBcWUfQimSl3Iv6ZhStW3TSOt0ThwiTgUUqZAo=",
"typ": "JWT"
}
Brödtexten i gästattesteringssvaret verifieras av Azure Key Vault som indata för att testa mot nyckelfrigöringsprincipen. Som tidigare nämnts använder Azure Key Vault "TpmEphemeralEncryptionKey
" som nyckelkrypteringsnyckel.
{
"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"
}
Dokumentationen för Microsoft Azure Attestation Service innehåller en omfattande lista med beskrivningar av alla dessa SEV-SNP-relaterade anspråk.
Vi kan använda valfritt skript- eller programmeringsspråk för att ta emot en intygad plattformsrapport med hjälp av AttestationClient-binärfilen. Eftersom den virtuella dator som vi distribuerade i ett tidigare steg har hanterad identitet aktiverad bör vi hämta en Azure AD-token för Key Vault från instansmetadatatjänsten (IMDS).
Genom att konfigurera den intygade plattformsrapporten som brödtextnyttolast och Microsoft Entra-token i vårt auktoriseringshuvud har du allt som behövs för att utföra nyckelåtgärden 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
}
Svar på nyckelutgivning
Den säkra nyckelfrisättningsåtgärden returnerar bara en enda egenskap inuti dess JSON-nyttolast. Innehållet har dock även base64-kodats.
{
"value": "eyJhbGciOiJSUzI1NiIsImtpZCI6Ijg4RUFDM.."
}
Här har vi en annan rubrik, även om den här har en X.509-certifikatkedja som en egenskap.
{
"alg": "RS256",
"kid": "88EAC2DB6BE4E051B0E05AEAF6CB79E675296121",
"x5t": "iOrC22vk4FGw4Frq9st55nUpYSE",
"typ": "JWT",
"x5t#S256": "BO7jbeU3BG0FEjetF8rSisRbkMfcdy0olhcnmYEwApA",
"x5c": [
"MIIIfDCCBmSgA..XQ==",
"MII..8ZZ8m",
"MII..lMrY="
]
}
Du kan läsa från matrisen "x5c
" i PowerShell. Detta kan hjälpa dig att kontrollera att det här är ett giltigt certifikat. Nedan visas ett exempel:
$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
Svarets JWT-tokentext liknar det svar du får när du anropar nyckelåtgärden get
. Åtgärden inkluderar key_hsm
dock release
bland annat egenskapen.
{
"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
}
}
}
}
Om base64 avkodar värdet under $.response.key.release_policy.data
får du JSON-representationen av key release-principen för Key Vault som vi definierade i ett tidigare steg.
Egenskapsbas64-avkodat key_hsm
värde ser ut så här:
{
"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"
}
Nästa steg
Skr Policy-exempelLär dig hur du använder Microsoft Defender för molnet integrering med konfidentiella virtuella datorer med gästattestering installeradLäs mer om gästattesteringsfunktionenLäs mer om konfidentiella virtuella Azure-datorer