VM이 포함된 Azure 구독에 연결된 Azure 계정을 사용합니다.
시스템 할당 관리 ID를 사용하도록 설정하려면 편집기에 템플릿을 로드하고 resources
섹션 내에서 관심이 있는 Microsoft.Compute/virtualMachines
리소스를 찾아서 "type": "Microsoft.Compute/virtualMachines"
속성과 같은 수준으로 "identity"
속성을 추가합니다. 다음 구문을 사용합니다.
"identity": {
"type": "SystemAssigned"
},
최종 템플릿은 아래 예와 같습니다.
"resources": [
{
"apiVersion": "2021-11-01",
"type": "Microsoft.Compute/virtualMachines",
"name": "[parameters('vmName')]",
"location": "[parameters('location')]",
"identity": {
"type": "SystemAssigned",
},
//other resource provider properties...
}
]
Azure Key Vault에 액세스 정책 추가
CVM에 대한 시스템 할당 관리 ID를 사용하도록 설정하면 키 개체가 저장되는 Azure Key Vault 데이터 평면에 대한 액세스 권한을 제공해야 합니다. 기밀 가상 머신만 릴리스 작업을 실행할 수 있도록 하기 위해 필요한 특정 권한만 부여합니다.
참고 항목
Azure Portal의 가상 머신 ID 옵션에서 관리 ID 개체 ID를 찾을 수 있습니다. 또는 PowerShell, Azure CLI, Bicep 또는 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'
]
}
}
]
}
}
[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')]"
]
}
릴리스 정책 준비
Key Vault 보안 키 릴리스 정책은 약간 다른 문법을 사용하여 Azure Policy를 모델로 합니다.
JWT(JSON Web Token) 형식으로 Key Vault에 증명된 플랫폼 보고서를 전달하는 것이 아이디어입니다. 그런 다음 JWT를 살펴보고 증명된 플랫폼 보고서 클레임이 정책의 클레임과 일치하는지 여부를 확인합니다.
예를 들어, 증명된 플랫폼 보고서에 다음과 같은 속성이 있는 경우에만 키를 해제하려고 한다고 가정해 보겠습니다.
- MAA(Microsoft Azure Attestation) 서비스 엔드포인트 "https://sharedweu.weu.attest.azure.net"에서 증명했습니다.
- 정책의 이
authority
값은 토큰의 iss
(발급자) 속성과 비교됩니다.
- 또한
sevsnpvm
값을 보유하는 x-ms-attestation-type
이라는 특성을 가진 x-ms-isolation-tee
라는 개체도 포함합니다.
- Azure 서비스로서의 MAA는 CVM이 AMD SEV-SNP 정품 프로세서에서 실행되고 있음을 증명했습니다.
- 또한
azure-compliant-cvm
값을 보유하는 x-ms-compliance-status
라는 특성을 가진 x-ms-isolation-tee
라는 개체도 포함합니다.
- Azure 서비스로서의 MAA는 CVM이 규정을 준수하는 Azure 기밀 가상 머신임을 증명하는 기능이 있습니다.
assets
라는 새 폴더를 만들고 다음 JSON 콘텐츠를 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"
}
]
}
]
}
릴리스 정책은 키 권한의 배열을 포함하는 anyOf
조건입니다. claim
조건은 클레임 이름, 일치 조건 및 값을 식별하는 JSON 개체입니다. AnyOf
및 AllOf
조건 개체는 논리적 OR
및 AND
의 모델링을 허용합니다. 현재 claim
에 대한 equals
비교만 수행할 수 있습니다. 조건 속성은 authority
속성과 함께 배치됩니다.
Important
환경 어설션은 키 릴리스 정책과 일치하는 대상 환경(예: TEE 유형, 게시자, 버전)에 대한 하나 이상의 클레임과 하나 이상의 키 암호화 키를 포함합니다. 키 암호화 키는 대상 실행 환경에서 소유하고 보호하는 공용 RSA 키로, 키 내보내기에 사용됩니다. TEE 키 클레임(x-ms-runtime/keys)에 표시되어야 합니다. 이 클레임은 JSON 웹 키 집합을 나타내는 JSON 개체입니다. JWKS 내에서 키 중 하나는 암호화 키로 사용하기 위한 요구 사항을 충족해야 합니다(key_use는 "enc"이거나 key_ops에 "encrypt"를 포함). 첫 번째 적합한 키가 선택됩니다.
Key Vault는 "x-ms-runtime
" 개체의 "keys
" 배열 속성에서 첫 번째 적합한 키를 선택하고 "key_use": ["enc"]
또는 "key_ops": ["encrypt"]
가 있는 공용 RSA 키를 찾습니다. 증명된 플랫폼 보고서의 예는 다음과 같습니다.
{
//...
"x-ms-runtime": {
"client-payload": {
"nonce": "MTIzNA=="
},
"keys": [
{
"e": "AQAB",
"key_ops": [
"encrypt"
],
"kid": "TpmEphemeralEncryptionKey",
"kty": "RSA",
"n": "9v2XQgAA6y18CxV8dSGnh..."
}
]
},
//...
}
이 예에서는 $.x-ms-runtime.keys
경로 아래에 하나의 키만 있습니다. Key Vault는 TpmEphemeralEncryptionKey
키를 키 암호화 키로 사용합니다.
참고 항목
$.x-ms-isolation-tee.x-ms-runtime.keys
아래에 키가 있을 수 있지만 이는 Key Vault에서 사용할 키가 아닙니다.
릴리스 정책으로 내보낼 수 있는 키 만들기
Azure Confidential Virtual Machine이 release
키 작업을 수행할 수 있도록 하는 Key Vault 액세스 정책을 만듭니다. 마지막으로 키 만들기 중에 릴리스 정책을 base64 인코딩 문자열로 포함해야 합니다. 키는 HSM에서 지원하는 내보낼 수 있는 키여야 합니다.
참고 항목
HSM 지원 키는 Azure Key Vault Premium 및 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 템플릿 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')]"
]
}
Azure Portal로 이동하여 키를 선택하여 Key Vault가 새로운 HSM 지원 키를 만들었으며 여기에 보안 키 릴리스 정책이 포함되어 있는지 확인할 수 있습니다. 의도한 키는 "내보내기 가능"으로 표시됩니다.
게스트 증명 클라이언트
증명은 무언가가 의도한 작동 상태에서 실행되고 있음을 암호화 방식으로 평가하는 데 도움이 됩니다. 이는 검증자인 한 당사자가 잠재적으로 신뢰할 수 없는 피어인 입증인의 신뢰성을 평가하는 프로세스입니다. 원격 게스트 증명을 통해 신뢰할 수 있는 실행 환경은 내부에서 전체 운영 체제를 실행할 수 있는 플랫폼을 제공합니다.
Important
Microsoft는 개발자의 개발 활동에 도움이 될 수 있는 Windows 및 Linux용 C/C++ 라이브러리를 제공합니다. 라이브러리를 사용하면 하드웨어에서 SEV-SNP 플랫폼 보고서를 쉽게 획득하고 Azure Attestation 서비스 인스턴스에서 이를 증명할 수도 있습니다. Azure Attestation 서비스는 Microsoft(공유)에서 호스트된 서비스이거나 자체 프라이빗 인스턴스일 수 있습니다.
게스트 증명 라이브러리를 활용하는 오픈 소스 Windows 및 Linux 클라이언트 이진 파일을 선택하여 CVM으로 게스트 증명 프로세스를 쉽게 만들 수 있습니다. 클라이언트 이진 파일은 증명된 플랫폼 보고서를 Key Vault의 release
키 작업에 필요한 JSON Web Token으로 반환합니다.
참고 항목
Azure Attestation 서비스의 토큰은 8시간 동안 유효합니다.
[Linux]
VM에 로그인합니다.
샘플 Linux 애플리케이션을 복제합니다.
build-essential
패키지를 설치합니다. 이 패키지는 샘플 애플리케이션을 컴파일하는 데 필요한 모든 것을 설치합니다.
sudo apt-get install build-essential
libcurl4-openssl-dev
및 libjsoncpp-dev
패키지를 설치합니다.
sudo apt-get install libcurl4-openssl-dev
sudo apt-get install libjsoncpp-dev
증명 패키지를 다운로드합니다.
증명 패키지를 설치합니다. <version>
을 다운로드한 버전으로 바꿉니다.
sudo dpkg -i azguestattestation1_<latest-version>_amd64.deb
샘플 클라이언트를 실행하려면 압축을 푼 폴더 내부를 탐색하고 아래 명령을 실행합니다.
sudo ./AttestationClient -a <attestation-url> -n <nonce-value> -o token
참고 항목
-o
가 token
으로 지정되지 않은 경우 exe는 증명 결과와 sevsnp
인 플랫폼에 따라 이진 파일 결과를 true 또는 false로 인쇄합니다.
VM에 로그인합니다.
샘플 Windows 애플리케이션을 복제합니다.
압축을 푼 폴더 내부를 탐색하고 VC_redist.x64.exe
를 실행합니다. VC_redist는 컴퓨터에 Microsoft C 및 C++(MSVC) 런타임 라이브러리를 설치합니다.
샘플 클라이언트를 실행하려면 압축을 푼 폴더 내부를 탐색하고 아래 명령을 실행합니다.
sudo ./AttestationClient -a <attestation-url> -n <nonce-value> -o token
참고 항목
-o
가 token
으로 지정되지 않은 경우 exe는 증명 결과와 sevsnp
인 플랫폼에 따라 이진 파일 결과를 true 또는 false로 인쇄합니다.
게스트 인증 결과
게스트 인증 클라이언트의 결과는 단순히 base64로 인코딩된 문자열입니다. 이 인코딩된 문자열 값은 헤더, 본문 및 서명이 있는 서명된 JWT(JSON Web Token)입니다. 문자열을 .
(점) 값으로 분할하고 결과를 base64로 디코딩할 수 있습니다.
eyJhbGciO...
헤더에는 JSON 인코딩 공개 키 집합에 연결되는 JWK 집합 URI라고도 하는 jku
가 포함되어 있습니다. 그 중 하나는 JWS에 디지털 서명하는 데 사용되는 키에 해당합니다. kid
는 JWS 서명에 사용된 키를 나타냅니다.
{
"alg": "RS256",
"jku": "https://sharedweu.weu.attest.azure.net/certs",
"kid": "dRKh+hBcWUfQimSl3Iv6ZhStW3TSOt0ThwiTgUUqZAo=",
"typ": "JWT"
}
게스트 증명 응답의 본문은 키 릴리스 정책에 대해 테스트하기 위한 입력으로 Azure Key Vault에서 유효성을 검사합니다. 앞에서 설명한 것처럼 Azure Key Vault는 "TpmEphemeralEncryptionKey
"를 키 암호화 키로 사용합니다.
{
"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"
}
Microsoft Azure Attestation 서비스 설명서에는 이러한 모든 SEV-SNP 관련 클레임에 대한 설명이 포함된 광범위한 목록이 있습니다.
모든 스크립팅 또는 프로그래밍 언어를 사용하여 AttestationClient 이진 파일을 사용하여 증명된 플랫폼 보고서를 받을 수 있습니다. 이전 단계에서 배포한 가상 머신에 관리 ID가 사용 설정되어 있으므로 IMDS(인스턴스 메타데이터 서비스)에서 Key Vault용 Azure AD 토큰을 가져와야 합니다.
증명된 플랫폼 보고서를 인증 헤더의 본문 페이로드 및 Microsoft Entra 토큰으로 구성하면 키 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
}
키 릴리스 응답
보안 키 릴리스 작업은 JSON 페이로드 내부의 단일 속성만 반환합니다. 그러나 콘텐츠도 base64로 인코딩되었습니다.
{
"value": "eyJhbGciOiJSUzI1NiIsImtpZCI6Ijg4RUFDM.."
}
여기에 또 다른 헤더가 있지만 이 헤더에는 속성으로 X.509 인증서 체인이 있습니다.
{
"alg": "RS256",
"kid": "88EAC2DB6BE4E051B0E05AEAF6CB79E675296121",
"x5t": "iOrC22vk4FGw4Frq9st55nUpYSE",
"typ": "JWT",
"x5t#S256": "BO7jbeU3BG0FEjetF8rSisRbkMfcdy0olhcnmYEwApA",
"x5c": [
"MIIIfDCCBmSgA..XQ==",
"MII..8ZZ8m",
"MII..lMrY="
]
}
PowerShell의 "x5c
" 배열에서 읽을 수 있으며 이는 유효한 인증서인지 확인하는 데 도움이 될 수 있습니다. 예제는 아래와 같습니다.
$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
응답의 JWT 토큰 본문은 get
키 작업을 호출할 때 받는 응답과 매우 유사합니다. 그러나 release
작업에는 무엇보다도 key_hsm
속성이 포함됩니다.
{
"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
}
}
}
}
base64가 $.response.key.release_policy.data
아래의 값을 디코딩하는 경우 이전 단계에서 정의한 Key Vault 키 릴리스 정책의 JSON 표현을 가져옵니다.
key_hsm
속성 base64 디코딩 값은 다음과 같습니다.
{
"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"
}
다음 단계
SKR 정책 예게스트 증명이 설치된 기밀 VM과 클라우드용 Microsoft Defender 통합을 사용하는 방법 알아보기게스트 증명 기능에 대해 자세히 알아보기Azure 기밀 VM에 대해 알아보기