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 ressemble à 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 sur votre machine virtuelle confidentielle, vous devez lui fournir l’accès au plan de données Azure Key Vault où sont stockés les objets clés. Pour assurer que seule notre machine virtuelle confidentielle peut exécuter l’opération de mise en circulation, nous n’accordons que l’autorisation spécifique requise.
Remarque
L’ID d’objet d’identité managée se trouve dans les options d’identité de machine virtuelle, dans le Portail Azure. Vous pouvez également le récupérer avec PowerShell, la CLI Azure, Bicep ou les modèles 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 circulation
Les stratégies Secure Key Release de Key Vault s’inspirent d’Azure Policy, avec une grammaire légèrement différente.
L’idée est de passer le rapport de plateforme attestée, sous forme de JSON Web Token (JWT), à Key Vault. Key Vault examine à son tour le JWT et vérifie si les revendications de rapport de plateforme attestée correspondent aux revendications de la stratégie.
Par exemple, supposons que nous voulons mettre en circulation 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 "https://sharedweu.weu.attest.azure.net" de Microsoft Azure Attestation (MAA).
- Cette valeur
authority
de la stratégie est comparée à la propriété iss
(émetteur) du 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 atteste que la machine virtuelle confidentielle s’exécute sur un processeur AMD SEV-SNP authentique.
- 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 confidentielle 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 circulation est une condition anyOf
qui contient un tableau d’autorités de clé. Une condition claim
est un objet JSON qui identifie un nom de revendication, une condition de correspondance et une valeur. Les objets de condition AnyOf
et AllOf
autorisent la modélisation de OR
et AND
logiques. Actuellement, nous pouvons uniquement effectuer une comparaison equals
sur une claim
. Les propriétés de condition sont regroupées avec les propriétés authority
.
Important
Une assertion d’environnement contient au moins une clé de chiffrement à clé et une ou plusieurs revendications concernant l’environnement cible (par exemple, type de TEE, éditeur, version) mises en correspondance avec la stratégie de mise en circulation de la 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ée ressemblerait à ce qui suit :
{
//...
"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 clé TpmEphemeralEncryptionKey
comme clé de chiffrement de clé.
Remarque
Notez qu’une clé peut se trouver 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 circulation
Nous créons une stratégie d’accès Key Vault qui permet à une machine virtuelle confidentielle Azure d’effectuer l’opération de clé release
. Enfin, nous devons inclure notre stratégie de mise en circulation sous forme de chaîne encodée en base64 lors de la création d’une clé. La clé doit être une clé exportable et garantie par HSM.
Remarque
Les clés garanties par HSM sont disponibles avec Azure Key Vault Premium et le HSM managé 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')
}
}
}
[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éé un une clé appuyée par HSM et qu’il contient notre stratégie de mise en circulation de clé sécurisée en accédant au Portail Azure et en sélectionnant notre clé. La clé voulue est marquée comme « exportable ».
Client d’attestation invitée
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’attestateur). Grâce à l’attestation d’invité distante, l’environnement d’exécution de confiance 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 facilite l’acquisition d’un rapport de plateforme SEV-SNP à partir du matériel et de le faire également attester 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 open source Windows et Linux qui utilise la bibliothèque d’attestations des invités peut être choisi pour faciliter le processus d’attestation invité grâce aux machines virtuelles confidentielles. Le fichier binaire client retourne le rapport de plateforme attestée sous forme de JSON Web Token, ce qui est nécessaire pour l’opération de clé release
de 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
Si -o
n’est pas spécifié en tant que token
, l’exe imprime un résultat binaire true ou false en fonction du résultat d’attestation et de l’état sevsnp
de la plateforme.
Connectez-vous à votre machine virtuelle.
Clonez l’exemple d’application Windows.
Naviguez dans le dossier décompressé et exécutez VC_redist.x64.exe
. VC_redist installe 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
Si -o
n’est pas spécifié en tant que token
, l’exe imprime un résultat binaire true ou false en fonction du résultat d’attestation et de l’état sevsnp
de la plateforme.
Résultat d’attestation d’invité
Le résultat du client d’attestation d’invité s’agit simplement d’une chaîne encodée en base64. Cette valeur de chaîne encodée est un JSON Web Token (JWT) signé, 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
, également appelé URI d’ensemble JWK, qui établit un lien avec un ensemble de clés publiques encodées par JSON. L’un d’entre eux correspond à la clé utilisée pour la signature numérique de la JWS. Le kid
indique la clé utilisée pour signer la 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 en tant qu’entrée à tester contre la stratégie de mise en circulation de clé. Comme indiqué précédemment, Azure Key Vault utilise la « 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 avec 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 déployée lors d’une étape précédente dispose d’une identité managée activé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é en tant que charge utile de corps et le jeton Microsoft Entra dans l’en-tête d’autorisation, vous avez tout le 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 Key Release
L’opération de mise en circulation de clé sécurisée retourne seulement une propriété unique à l’intérieur de sa charge utile JSON. Toutefois, le contenu a également é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 à partir du tableau « x5c
» dans PowerShell, ce qui peut vous aider à vérifier qu’il s’agit d’un certificat valide. En 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 beaucoup à la réponse que vous obtenez en appelant l’opération de clé get
. Toutefois, l’opération release
inclut la propriété key_hsm
, 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écode 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 lors d’une étape précédente.
La valeur décodée en base64 de la propriété key_hsm
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
Exemples de stratégies SKRDécouvrez comment utiliser l’intégration Microsoft Defender pour le cloud avec des machines virtuelles confidentielles dotées de l’attestation d’invitéEn savoir plus sur la fonctionnalité d’attestation d’invitéEn savoir plus sur les machines virtuelles confidentielles Azure