Gunakan akun Azure yang terkait dengan langganan Azure yang berisi VM.
Untuk mengaktifkan identitas terkelola yang ditetapkan sistem, muat templat ke editor, temukan sumber daya Microsoft.Compute/virtualMachines
yang menarik dalam bagian resources
dan tambahkan properti "identity"
pada tingkat yang sama dengan properti "type": "Microsoft.Compute/virtualMachines"
. Gunakan sintaks berikut:
"identity": {
"type": "SystemAssigned"
},
Templat akhir melihat contoh di bawah ini
"resources": [
{
"apiVersion": "2021-11-01",
"type": "Microsoft.Compute/virtualMachines",
"name": "[parameters('vmName')]",
"location": "[parameters('location')]",
"identity": {
"type": "SystemAssigned",
},
//other resource provider properties...
}
]
Menambahkan kebijakan akses ke Azure Key Vault
Setelah mengaktifkan identitas terkelola yang ditetapkan sistem untuk CVM, Anda harus memberinya akses ke bidang data Azure Key Vault tempat objek kunci disimpan. Untuk memastikan bahwa hanya komputer virtual rahasia kami yang dapat menjalankan operasi rilis, kami hanya akan memberikan izin tertentu yang diperlukan.
Catatan
Anda dapat menemukan ID objek identitas terkelola di opsi identitas komputer virtual, di portal Azure. Atau Anda dapat mengambilnya dengan templat PowerShell, Azure CLI, Bicep, atau 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'
]
}
}
]
}
}
[Templat 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')]"
]
}
Menyiapkan kebijakan rilis
Kebijakan Rilis Kunci Aman Key Vault dimodelkan setelah Azure Policy, dengan tata bahasa yang sedikit berbeda.
Idenya adalah ketika kita meneruskan laporan platform yang dibuktikan, dalam bentuk JSON Web Token (JWT), ke Key Vault. Ini akan, pada gilirannya, melihat JWT dan memeriksa apakah klaim laporan platform yang dibuktikan cocok dengan klaim dalam kebijakan atau tidak.
Misalnya, kita ingin merilis kunci hanya ketika laporan platform yang diucapkan memiliki properti seperti:
- Dibuktikan oleh titik akhir layanan Microsoft Azure Attestation (MAA) "https://sharedweu.weu.attest.azure.net".
- Nilai dari kebijakan ini
authority
dibandingkan iss
dengan properti (penerbit), dalam token.
- Dan bahwa itu juga berisi objek yang disebut
x-ms-isolation-tee
dengan properti yang disebut x-ms-attestation-type
, yang menyimpan nilai sevsnpvm
.
- MAA sebagai layanan Azure telah membuktikan bahwa CVM berjalan dalam prosesor asli AMD SEV-SNP.
- Dan bahwa itu juga berisi objek yang disebut
x-ms-isolation-tee
dengan properti yang disebut x-ms-compliance-status
, yang menyimpan nilai azure-compliant-cvm
.
- MAA sebagai layanan Azure memiliki kemampuan untuk membuktikan bahwa CVM adalah komputer virtual rahasia Azure yang sesuai.
Buat folder baru bernama assets
dan tambahkan konten JSON berikut ke file bernama 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"
}
]
}
]
}
Kebijakan rilis adalah kondisi yang anyOf
berisi array otoritas utama. Kondisi claim
adalah objek JSON yang mengidentifikasi nama klaim, kondisi untuk pencocokan, dan nilai. Objek AnyOf
kondisi dan AllOf
memungkinkan pemodelan logis OR
dan AND
. Saat ini, kita hanya dapat melakukan perbandingan equals
pada claim
. Properti kondisi ditempatkan bersama dengan authority
properti.
Penting
Pernyataan lingkungan berisi setidaknya kunci enkripsi kunci dan satu atau beberapa klaim tentang lingkungan target (misalnya, jenis TEE, penerbit, versi) yang cocok dengan Kebijakan Rilis Kunci. Kunci enkripsi kunci adalah kunci RSA publik yang dimiliki dan dilindungi oleh lingkungan eksekusi target yang digunakan untuk ekspor kunci. Ini harus muncul dalam klaim kunci TEE (x-ms-runtime/keys). Klaim ini adalah objek JSON yang mewakili Set Kunci Web JSON. Di dalam JWKS, salah satu kunci harus memenuhi persyaratan untuk digunakan sebagai kunci enkripsi (key_use adalah "enc", atau key_ops berisi "encrypt"). Kunci pertama yang cocok dipilih.
Key Vault memilih kunci pertama yang sesuai dari properti array "keys
" di objek ""x-ms-runtime
, yang mencari kunci RSA publik dengan "key_use": ["enc"]
atau "key_ops": ["encrypt"]
. Contoh laporan platform yang diujarkan akan terlihat seperti:
{
//...
"x-ms-runtime": {
"client-payload": {
"nonce": "MTIzNA=="
},
"keys": [
{
"e": "AQAB",
"key_ops": [
"encrypt"
],
"kid": "TpmEphemeralEncryptionKey",
"kty": "RSA",
"n": "9v2XQgAA6y18CxV8dSGnh..."
}
]
},
//...
}
Dalam contoh ini, kita hanya memiliki satu kunci di $.x-ms-runtime.keys
bawah jalur. Key Vault menggunakan TpmEphemeralEncryptionKey
kunci sebagai kunci enkripsi kunci.
Catatan
Perhatikan bahwa mungkin ada kunci di bawah $.x-ms-isolation-tee.x-ms-runtime.keys
, ini bukan kunci yang akan digunakan Key Vault.
Membuat kunci yang dapat diekspor dengan kebijakan rilis
Kami membuat kebijakan akses Key Vault yang memungkinkan Azure Confidential Virtual Machine melakukan release
operasi kunci. Terakhir, kita harus menyertakan kebijakan rilis kita sebagai string yang dikodekan base64 selama pembuatan kunci. Kunci harus merupakan kunci yang dapat diekspor, didukung oleh HSM.
Catatan
Kunci yang didukung HSM tersedia dengan Azure Key Vault Premium dan 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')
}
}
}
[Templat 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')]"
]
}
Kami dapat memverifikasi bahwa Key Vault telah membuat kunci baru yang didukung HSM dan berisi kebijakan rilis kunci aman kami dengan menavigasi ke portal Azure dan memilih kunci kami. Kunci yang dimaksudkan akan ditandai sebagai "dapat diekspor".
Klien pengesahan tamu
Pengesahan membantu kami menilai secara kriptografis bahwa ada sesuatu yang berjalan dalam keadaan operasi yang dimaksudkan. Ini adalah proses di mana satu pihak, pemverifikasi, menilai kepercayaan dari serekan yang berpotensi tidak tepercaya, attester. Dengan pengesahan tamu jarak jauh, lingkungan eksekusi tepercaya menawarkan platform yang memungkinkan Anda menjalankan seluruh sistem operasi di dalamnya.
Penting
Microsoft menawarkan pustaka C/C++, untuk Windows dan Linux yang dapat membantu upaya pengembangan Anda. Pustaka memudahkan untuk memperoleh laporan platform SEV-SNP dari perangkat keras dan juga membuatnya dibuktikan oleh instans layanan Azure Attestation. Layanan Azure Attestation dapat berupa satu yang dihosting oleh Microsoft (bersama) atau instans privat Anda sendiri.
Biner klien Windows dan Linux sumber terbuka d yang menggunakan pustaka pengesahan tamu dapat dipilih untuk membuat proses pengesahan tamu menjadi mudah dengan CVM. Biner klien mengembalikan laporan platform yang dibuktikan sebagai JSON Web Token, yang diperlukan untuk operasi kunci Key Vault release
.
Catatan
Token dari layanan Azure Attestation berlaku selama 8 jam.
[Linux]
Masuk ke VM Anda.
Kloning aplikasi Linux sampel.
Pasang paket build-essential
. Paket ini menginstal semua yang diperlukan untuk mengkompilasi aplikasi sampel.
sudo apt-get install build-essential
Instal paket libcurl4-openssl-dev
dan libjsoncpp-dev
.
sudo apt-get install libcurl4-openssl-dev
sudo apt-get install libjsoncpp-dev
Unduh paket pengesahan.
Instal paket pengesahan. Pastikan untuk mengganti <version>
dengan versi yang Anda unduh.
sudo dpkg -i azguestattestation1_<latest-version>_amd64.deb
Untuk menjalankan klien sampel, navigasikan ke dalam folder yang tidak di-zip dan jalankan perintah di bawah ini:
sudo ./AttestationClient -a <attestation-url> -n <nonce-value> -o token
Catatan
Jika -o
tidak ditentukan sebagai token
, exe mencetak hasil biner true atau false tergantung pada hasil pengesahan dan platform menjadi sevsnp
.
Masuk ke VM Anda.
Kloning sampel aplikasi Windows.
Navigasikan di dalam folder yang tidak di-zip dan jalankan VC_redist.x64.exe
. VC_redist akan menginstal pustaka runtime Microsoft C dan C++ (MSVC) pada komputer.
Untuk menjalankan klien sampel, navigasikan ke dalam folder yang tidak di-zip dan jalankan perintah di bawah ini:
sudo ./AttestationClient -a <attestation-url> -n <nonce-value> -o token
Catatan
Jika -o
tidak ditentukan sebagai token
, exe mencetak hasil biner true atau false tergantung pada hasil pengesahan dan platform menjadi sevsnp
.
Hasil Pengesahan Tamu
Hasil dari klien Pengesahan Tamu hanyalah string yang dikodekan base64. Nilai string yang dikodekan ini adalah JSON Web Token (JWT) yang ditandatangani, dengan header, isi, dan tanda tangan. Anda dapat membagi string dengan .
nilai (titik) dan mendekode base64 hasilnya.
eyJhbGciO...
Header berisi jku
, juga dikenal sebagai JWK Set URI yang menautkan ke sekumpulan kunci publik yang dikodekan JSON. Salah satunya sesuai dengan kunci yang digunakan untuk menandatangani JWS secara digital. menunjukkan kid
kunci mana yang digunakan untuk menandatangani JWS.
{
"alg": "RS256",
"jku": "https://sharedweu.weu.attest.azure.net/certs",
"kid": "dRKh+hBcWUfQimSl3Iv6ZhStW3TSOt0ThwiTgUUqZAo=",
"typ": "JWT"
}
Isi respons pengesahan tamu akan divalidasi oleh Azure Key Vault sebagai input untuk menguji terhadap kebijakan rilis kunci. Seperti yang disebutkan sebelumnya, Azure Key Vault menggunakan "TpmEphemeralEncryptionKey
" sebagai kunci enkripsi kunci.
{
"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"
}
Dokumentasi untuk layanan Microsoft Azure Attestation memiliki daftar ekstensif yang berisi deskripsi semua klaim terkait SEV-SNP ini.
Kita dapat menggunakan bahasa pembuatan skrip atau pemrograman apa pun untuk menerima laporan platform yang dibuktikan menggunakan biner AttestationClient. Karena komputer virtual yang kami sebarkan pada langkah sebelumnya telah mengaktifkan identitas terkelola, kita harus mendapatkan token Azure AD untuk Key Vault dari layanan metadata instans (IMDS).
Dengan mengonfigurasi laporan platform yang dibuktikan sebagai payload isi dan token Microsoft Entra di header otorisasi kami, Anda memiliki semua yang diperlukan untuk melakukan operasi kuncirelease
.
#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
}
Respons Rilis Kunci
Operasi rilis kunci aman hanya mengembalikan satu properti di dalam payload JSON-nya. Namun, kontennya juga telah dikodekan base64.
{
"value": "eyJhbGciOiJSUzI1NiIsImtpZCI6Ijg4RUFDM.."
}
Di sini kita memiliki header lain, meskipun yang satu ini memiliki rantai sertifikat X.509 sebagai properti.
{
"alg": "RS256",
"kid": "88EAC2DB6BE4E051B0E05AEAF6CB79E675296121",
"x5t": "iOrC22vk4FGw4Frq9st55nUpYSE",
"typ": "JWT",
"x5t#S256": "BO7jbeU3BG0FEjetF8rSisRbkMfcdy0olhcnmYEwApA",
"x5c": [
"MIIIfDCCBmSgA..XQ==",
"MII..8ZZ8m",
"MII..lMrY="
]
}
Anda dapat membaca dari array "x5c
" di PowerShell, ini dapat membantu Anda memverifikasi bahwa ini adalah sertifikat yang valid. Di Bawah ini adalah contohnya:
$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
Bodi token JWT respons terlihat sangat mirip dengan respons yang Anda dapatkan saat memanggil get
operasi kunci. Namun, operasi ini release
mencakup key_hsm
properti, antara lain.
{
"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
}
}
}
}
Jika base64 Anda mendekode nilai di bawah $.response.key.release_policy.data
, Anda mendapatkan representasi JSON dari kebijakan rilis kunci Key Vault yang kami tentukan di langkah sebelumnya.
Nilai key_hsm
properti base64 yang didekodekan terlihat seperti ini:
{
"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"
}
Langkah berikutnya
Contoh Kebijakan SKR Pelajari cara menggunakan integrasi Microsoft Defender untuk Cloud dengan VM rahasia dengan pengesahan tamu yang diinstalPelajari selengkapnya tentang fiturpengesahantamu Pelajari tentang VM rahasia Azure