Utilisez un compte Azure associé à l’abonnement Azure qui contient la machine virtuelle.
Pour activer l’identité managée affectée par le système, chargez le modèle dans un éditeur, recherchez la ressource Microsoft.Compute/virtualMachines
qui vous intéresse dans la section resources
, puis ajoutez la propriété "identity"
au même niveau que la propriété "type": "Microsoft.Compute/virtualMachines"
. Utilisez la syntaxe suivante :
"identity": {
"type": "SystemAssigned"
},
Le modèle final présente l’exemple ci-dessous
"resources": [
{
"apiVersion": "2021-11-01",
"type": "Microsoft.Compute/virtualMachines",
"name": "[parameters('vmName')]",
"location": "[parameters('location')]",
"identity": {
"type": "SystemAssigned",
},
//other resource provider properties...
}
]
Ajouter la stratégie d’accès à Azure Key Vault
Une fois que vous avez activé une identité managée affectée par le système pour votre machine virtuelle CVM, vous devez lui fournir l’accès au plan de données Azure Key Vault où sont stockés les objets clés. Pour vous assurer que seule notre machine virtuelle confidentielle peut exécuter l’opération de mise en production, nous n’accorderons que l’autorisation spécifique requise.
Remarque
Vous trouverez l’ID d’objet d’identité managée dans les options d’identité de machine virtuelle, dans le Portail Azure. Vous pouvez également la récupérer avec des modèles PowerShell, Azure CLI, Bicep ou 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'
]
}
}
]
}
}
[Modèle 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')]"
]
}
Préparer la stratégie de mise en production
Les stratégies de mise en production sécurisée de Key Vault sont modélisées après Azure Policy, avec une grammaire légèrement différente.
L’idée est quand nous transmettons le rapport de plateforme attesté, sous la forme d’un jeton web JSON (JWT), à Key Vault. Il examine ensuite le JWT et case activée si les revendications de rapport de plateforme attestées correspondent aux revendications de la stratégie.
Par exemple, supposons que nous voulons libérer une clé uniquement lorsque notre rapport de plateforme attestée possède des propriétés telles que :
- Attesté par le point de terminaison de service Microsoft Azure Attestation (MAA) «https://sharedweu.weu.attest.azure.net" ;.
- Cette
authority
valeur de la stratégie est comparée à la iss
propriété (émetteur), dans le jeton.
- Et qu’il contient également un objet appelé
x-ms-isolation-tee
avec une propriété appelée x-ms-attestation-type
, qui contient la valeur sevsnpvm
.
- MAA en tant que service Azure a attesté que la machine virtuelle CVM s’exécute dans un processeur authentique AMD SEV-SNP.
- Et qu’il contient également un objet appelé
x-ms-isolation-tee
avec une propriété appelée x-ms-compliance-status
, qui contient la valeur azure-compliant-cvm
.
- MAA en tant que service Azure a la possibilité d’attester que la machine virtuelle CVM est une machine virtuelle confidentielle Azure conforme.
Créez un dossier appelé assets
et ajoutez le contenu JSON suivant à un fichier nommé 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 stratégie de mise en production est une anyOf
condition contenant un tableau d’autorités clés. Une claim
condition est un objet JSON qui identifie un nom de revendication, une condition de correspondance et une valeur. Les AnyOf
objets de AllOf
condition permettent la modélisation d’un objet logique OR
et AND
. Actuellement, nous ne pouvons effectuer qu’une equals
comparaison sur un claim
. Les propriétés de condition sont placées avec authority
les propriétés.
Important
Une assertion d’environnement contient au moins une clé de chiffrement de clé et une ou plusieurs revendications relatives à l’environnement cible (par exemple, type TEE, éditeur, version) qui sont mises en correspondance avec la stratégie de mise en production de clé. La clé de chiffrement de clé est une clé RSA publique détenue et protégée par l’environnement d’exécution cible utilisé pour l’exportation de clé. Elle doit apparaître dans la revendication de clés TEE (x-ms-runtime/keys). Cette revendication est un objet JSON qui représente un jeu de clés web JSON. Dans le jeu JWKS, l’une des clés doit remplir les exigences pour une utilisation en tant que clé de chiffrement (key_use est « enc », ou key_ops contient « encrypt »). La première clé appropriée est choisie.
Key Vault sélectionne la première clé appropriée à partir de la propriété de tableau «keys
» dans l’objet «x-ms-runtime
», il recherche une clé RSA publique avec "key_use": ["enc"]
ou "key_ops": ["encrypt"]
. Un exemple de rapport de plateforme attesté ressemblerait à ceci :
{
//...
"x-ms-runtime": {
"client-payload": {
"nonce": "MTIzNA=="
},
"keys": [
{
"e": "AQAB",
"key_ops": [
"encrypt"
],
"kid": "TpmEphemeralEncryptionKey",
"kty": "RSA",
"n": "9v2XQgAA6y18CxV8dSGnh..."
}
]
},
//...
}
Dans cet exemple, nous n’avons qu’une seule clé sous le chemin d’accès $.x-ms-runtime.keys
. Key Vault utilise la TpmEphemeralEncryptionKey
clé comme clé de chiffrement de clé.
Remarque
Notez qu’il peut y avoir une clé sous $.x-ms-isolation-tee.x-ms-runtime.keys
, il ne s’agit pas de la clé utilisée par Key Vault.
Créer une clé exportable avec une stratégie de mise en production
Nous créons une stratégie d’accès Key Vault qui permet à une machine virtuelle confidentielle Azure d’effectuer l’opération release
de clé. Enfin, nous devons inclure notre stratégie de mise en production sous forme de chaîne encodée en base64 lors de la création de la clé. La clé doit être une clé exportable , sauvegardée par un HSM.
Remarque
Les clés sauvegardées par HSM sont disponibles avec Azure Key Vault Premium et 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')
}
}
}
[Modèle 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')]"
]
}
Nous pouvons vérifier que Key Vault a créé une clé, sauvegardée par HSM et qu’elle contient notre stratégie de mise en production de clé sécurisée en accédant au Portail Azure et en sélectionnant notre clé. La clé prévue est marquée comme « exportable ».
Client d’attestation invité
L’attestation nous aide à évaluer par chiffrement que quelque chose s’exécute dans l’état d’exploitation prévu. Il s’agit du processus par lequel un tiers, le vérificateur, évalue la fiabilité d’un homologue potentiellement non approuvé, l’attesteur. Avec l’attestation d’invité distante, l’environnement d’exécution approuvé offre une plateforme qui vous permet d’exécuter un système d’exploitation entier à l’intérieur de celui-ci.
Important
Microsoft propose une bibliothèque C/C++, à la fois pour Windows et Linux qui peut aider vos efforts de développement. La bibliothèque permet d’acquérir facilement un rapport de plateforme SEV-SNP à partir du matériel et de l’avoir également attesté par une instance du service Azure Attestation. Le service Azure Attestation peut être hébergé par Microsoft (partagé) ou par votre propre instance privée.
Un binaire client Windows et Linux code source ouvert d qui utilise la bibliothèque d’attestations invitées peut être choisi pour faciliter le processus d’attestation invité avec les machines virtuelles. Le fichier binaire client retourne le rapport de plateforme attesté sous la forme d’un jeton web JSON, ce qui est nécessaire pour l’opération de clé de release
Key Vault.
Remarque
Un jeton du service Azure Attestation est valide pendant 8 heures.
[Linux]
Connectez-vous à votre machine virtuelle.
Clonez l’exemple d’application Linux.
Installez le package build-essential
. Ce package installe tout ce qui est nécessaire pour compiler l’exemple d’application.
sudo apt-get install build-essential
Installer les packages libcurl4-openssl-dev
et libjsoncpp-dev
.
sudo apt-get install libcurl4-openssl-dev
sudo apt-get install libjsoncpp-dev
Téléchargez le package d’attestation.
Installez le package d’attestation. Veillez à remplacer <version>
par la version que vous avez téléchargée.
sudo dpkg -i azguestattestation1_<latest-version>_amd64.deb
Pour exécuter l’exemple de client, accédez au dossier décompressé et exécutez la commande ci-dessous :
sudo ./AttestationClient -a <attestation-url> -n <nonce-value> -o token
Remarque
S’il -o
n’est pas spécifié token
comme , l’exe imprime un résultat binaire true ou false en fonction du résultat d’attestation et de la plateforme en cours sevsnp
.
Connectez-vous à votre machine virtuelle.
Clonez l’exemple d’application Windows.
Naviguez à l’intérieur du dossier décompressé et exécutez VC_redist.x64.exe
. VC_redist installera les bibliothèques de runtime Microsoft C et C++ (MSVC) sur l’ordinateur.
Pour exécuter l’exemple de client, accédez au dossier décompressé et exécutez la commande ci-dessous :
sudo ./AttestationClient -a <attestation-url> -n <nonce-value> -o token
Remarque
S’il -o
n’est pas spécifié token
comme , l’exe imprime un résultat binaire true ou false en fonction du résultat d’attestation et de la plateforme en cours sevsnp
.
Résultat de l’attestation d’invité
Le résultat du client Guest Attestation est simplement une chaîne encodée en base64. Cette valeur de chaîne encodée est un jeton web JSON signé (JWT), avec un en-tête, un corps et une signature. Vous pouvez fractionner la chaîne par la .
valeur (point) et décoder les résultats en base64.
eyJhbGciO...
L’en-tête contient un jku
URI JWK Set qui lie à un ensemble de clés publiques encodées JSON. L’un d’entre eux correspond à la clé utilisée pour signer numériquement le JWS. Indique kid
quelle clé a été utilisée pour signer le JWS.
{
"alg": "RS256",
"jku": "https://sharedweu.weu.attest.azure.net/certs",
"kid": "dRKh+hBcWUfQimSl3Iv6ZhStW3TSOt0ThwiTgUUqZAo=",
"typ": "JWT"
}
Le corps de la réponse d’attestation d’invité est validé par Azure Key Vault comme entrée pour tester la stratégie de mise en production de clé. Comme indiqué précédemment, Azure Key Vault utilise le «TpmEphemeralEncryptionKey
» comme clé de chiffrement de clé.
{
"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 documentation du service Microsoft Azure Attestation contient une liste complète contenant les descriptions de toutes ces revendications liées à SEV-SNP.
Nous pouvons utiliser n’importe quel langage de script ou de programmation pour recevoir un rapport de plateforme attesté à l’aide du fichier binaire AttestationClient. Étant donné que la machine virtuelle que nous avons déployée à l’étape précédente a activé l’identité managée, nous devons obtenir un jeton Azure AD pour Key Vault à partir du service de métadonnées d’instance (IMDS).
En configurant le rapport de plateforme attesté comme charge utile du corps et le jeton Microsoft Entra dans notre en-tête d’autorisation, vous avez tout ce qui est nécessaire pour effectuer l’opération de clé 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
}
Réponse de mise en production de clé
L’opération de mise en production de clé sécurisée retourne uniquement une propriété unique à l’intérieur de sa charge utile JSON. Toutefois, le contenu a été encodé en base64.
{
"value": "eyJhbGciOiJSUzI1NiIsImtpZCI6Ijg4RUFDM.."
}
Ici, nous avons un autre en-tête, bien que celui-ci ait une chaîne de certificats X.509 en tant que propriété.
{
"alg": "RS256",
"kid": "88EAC2DB6BE4E051B0E05AEAF6CB79E675296121",
"x5t": "iOrC22vk4FGw4Frq9st55nUpYSE",
"typ": "JWT",
"x5t#S256": "BO7jbeU3BG0FEjetF8rSisRbkMfcdy0olhcnmYEwApA",
"x5c": [
"MIIIfDCCBmSgA..XQ==",
"MII..8ZZ8m",
"MII..lMrY="
]
}
Vous pouvez lire le tableau «x5c
» dans PowerShell. Cela peut vous aider à vérifier qu’il s’agit d’un certificat valide. Voici un exemple :
$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
Le corps du jeton JWT de la réponse ressemble incroyablement à la réponse que vous obtenez lors de l’appel de l’opération get
de clé. Toutefois, l’opération release
inclut la key_hsm
propriété, entre autres.
{
"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 votre base64 décodez la valeur sous $.response.key.release_policy.data
, vous obtenez la représentation JSON de la stratégie de mise en production de clé Key Vault que nous avons définie à une étape précédente.
La key_hsm
valeur décodée de la propriété base64 ressemble à ceci :
{
"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"
}
Étapes suivantes
Exemplesde stratégie SKR Découvrez comment utiliser l’intégration Microsoft Defender pour le cloud aux machines virtuelles confidentielles avec l’attestation d’invité installéeEn savoir plus sur la fonctionnalitéd’attestation d’invité En savoir plus sur les machines virtuelles confidentielles Azure