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 mengirimkan laporan platform yang terbukti, dalam bentuk JSON Web Token (JWT), ke dalam 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 diakui memiliki properti berikut seperti:
- Dibuktikan oleh titik akhir layanan Microsoft Azure Attestation (MAA) "https://sharedweu.weu.attest.azure.net".
- Nilai
authority
dari kebijakan ini dibandingkan dengan iss
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 pelepasan adalah sebuah kondisi yang mengandung sejumlah otoritas kunci. 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 properti authority
.
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 terverifikasi 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 jalur $.x-ms-runtime.keys
. 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 pelepasan
Kami membuat kebijakan akses yang memungkinkan Azure Confidential Virtual Machine melakukan operasi kunci release
pada Key Vault. 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.
[Bisep 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 verifikasi tamu
Pengesahan membantu kami menilai secara kriptografis bahwa ada sesuatu yang berjalan dalam keadaan operasi yang dimaksudkan. Ini adalah proses di mana satu pihak, yaitu pemverifikasi, menilai tingkat kepercayaan dari rekan yang mungkin tidak tepercaya, yaitu 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 dibuktikan oleh sebuah instans dari 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 yang menggunakan pustaka pengesahan tamu dapat dipilih untuk mempermudah proses pengesahan tamu dengan CVM. File biner klien mengembalikan laporan platform yang terverifikasi sebagai JSON Web Token, yang mana diperlukan untuk operasi kunci Key Vault release
.
Catatan
Token dari layanan Azure Attestation berlaku selama 8 jam.
[Linux]
Masuk ke VM Anda.
Klon sampel aplikasi Linux.
Instal 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.
Pasang 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
, program exe mencetak hasil biner berupa true atau false tergantung pada hasil pengesahan dan platform adalah sevsnp
.
Masuk ke VM Anda.
Klon aplikasi Windows sampel.
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
, program exe mencetak hasil biner berupa true atau false tergantung pada hasil pengesahan dan platform adalah 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 berdasarkan nilai .
(titik) dan mendekode hasilnya menggunakan base64.
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.
kid
menunjukkan 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 terverifikasi sebagai payload isi dan token Microsoft Entra di header otorisasi kami, Anda memiliki semua yang dibutuhkan untuk melakukan release
operasi kunci.
#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
}
Tanggapan 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 JWT dari respons tersebut terlihat sangat mirip dengan respons yang Anda dapatkan ketika mengaktifkan operasi kunci get
. Namun, operasi release
mencakup properti key_hsm
, 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 SKRPelajari cara menggunakan integrasi Microsoft Defender untuk Cloud dengan VM rahasia Azure dan pengesahan tamu yang telah diinstalPelajari selengkapnya tentang fitur pengesahan tamuPelajari tentang VM rahasia Azure