VM'yi içeren Azure aboneliğiyle ilişkili bir Azure hesabı kullanın.
Sistem tarafından atanan yönetilen kimliği etkinleştirmek için şablonu bir düzenleyiciye yükleyin, bölümünde ilgilendiğiniz kaynağı bulun Microsoft.Compute/virtualMachines
ve özelliği özelliğiyle "type": "Microsoft.Compute/virtualMachines"
aynı düzeyde ekleyin"identity"
.resources
Aşağıdaki sözdizimini kullanın:
"identity": {
"type": "SystemAssigned"
},
Son şablon aşağıdaki örneğe bakar
"resources": [
{
"apiVersion": "2021-11-01",
"type": "Microsoft.Compute/virtualMachines",
"name": "[parameters('vmName')]",
"location": "[parameters('location')]",
"identity": {
"type": "SystemAssigned",
},
//other resource provider properties...
}
]
Erişim ilkesini Azure Key Vault'a ekleme
CVM'niz için sistem tarafından atanan yönetilen kimliği etkinleştirdikten sonra, anahtar nesnelerinin depolandığı Azure Key Vault veri düzlemine erişim sağlamanız gerekir. Yayın işlemini yalnızca gizli sanal makinemizin yürütediğinden emin olmak için yalnızca gerekli izni vereceğiz.
Dekont
Yönetilen kimlik nesne kimliğini Azure portalındaki sanal makine kimliği seçeneklerinde bulabilirsiniz. Alternatif olarak PowerShell, Azure CLI, Bicep veya ARM şablonlarıyla da alabilirsiniz.
[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 şablonu 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')]"
]
}
Yayın ilkesini hazırlama
Key Vault Güvenli Anahtar Yayın İlkeleri, Azure İlkesi sonra biraz farklı bir dil bilgisi ile modellenir.
Fikir, test edilmiş platform raporunu JSON Web Belirteci (JWT) biçiminde Key Vault'a geçirmemizdir. Buna karşılık JWT'ye bakar ve test edilen platform raporu taleplerinin ilkedeki talepler ile eşleşip eşleşmediğini denetler.
Örneğin, bir anahtarı yalnızca test edilmiş platform raporumuzda aşağıdaki gibi özellikler olduğunda yayınlamak istediğimizi varsayalım:
- Microsoft Azure Doğrulama (MAA) hizmet uç noktası "https://sharedweu.weu.attest.azure.net".
- İlkedeki bu
authority
değer belirteçteki iss
(veren) özelliğiyle karşılaştırılır.
- Ayrıca değerini
sevsnpvm
tutan adlı bir özelliği ile adlı x-ms-isolation-tee
x-ms-attestation-type
bir nesnesi de içerdiğini ifade eder.
- Azure hizmeti olarak MAA, CVM'nin AMD SEV-SNP orijinal işlemcide çalıştığını doğrulamıştır.
- Ayrıca değerini
azure-compliant-cvm
tutan adlı bir özelliği ile adlı x-ms-isolation-tee
x-ms-compliance-status
bir nesnesi de içerdiğini ifade eder.
- Azure hizmeti olarak MAA, CVM'nin uyumlu bir Azure gizli sanal makinesi olduğunu kanıtlar.
adlı assets
yeni bir klasör oluşturun ve adlı bir dosyaya cvm-release-policy.json
aşağıdaki JSON içeriğini ekleyin:
{
"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"
}
]
}
]
}
Yayın ilkesi, bir anyOf
dizi anahtar yetkiliyi içeren bir koşuldur. Koşul claim
, talep adını, eşleştirme koşulunu ve değeri tanımlayan bir JSON nesnesidir. AnyOf
ve AllOf
koşul nesneleri, mantıksal OR
ve AND
'nin modellenmesine olanak sağlar. Şu anda yalnızca üzerinde claim
bir equals
karşılaştırma gerçekleştirebiliriz. Koşul özellikleri özelliklerle authority
birlikte yerleştirilir.
Önemli
Ortam onaylama işlemi en az bir anahtar şifreleme anahtarı ve hedef ortam hakkında Anahtar Yayın İlkesi ile eşleşen bir veya daha fazla talep (örneğin, TEE türü, yayımcı, sürüm) içerir. Anahtar şifreleme anahtarı, anahtar dışarı aktarma için kullanılan hedef yürütme ortamı tarafından sahip olunan ve korunan bir ortak RSA anahtarıdır. TEE anahtarları talebinde (x-ms-runtime/keys) görünmelidir. Bu talep, JSON Web Anahtarı Kümesini temsil eden bir JSON nesnesidir. JWKS içinde anahtarlardan birinin şifreleme anahtarı olarak kullanım gereksinimlerini karşılaması gerekir (key_use "enc" veya key_ops "şifreleme" içerir). İlk uygun anahtar seçilir.
Key Vault , "" nesnesindekix-ms-runtime
"keys
" dizi özelliğinden ilk uygun anahtarı seçer, veya "key_ops": ["encrypt"]
ile "key_use": ["enc"]
ortak bir RSA anahtarı arar. Test edilmiş bir platform raporu örneği şöyle görünür:
{
//...
"x-ms-runtime": {
"client-payload": {
"nonce": "MTIzNA=="
},
"keys": [
{
"e": "AQAB",
"key_ops": [
"encrypt"
],
"kid": "TpmEphemeralEncryptionKey",
"kty": "RSA",
"n": "9v2XQgAA6y18CxV8dSGnh..."
}
]
},
//...
}
Bu örnekte, yolun altında $.x-ms-runtime.keys
yalnızca bir anahtar vardır. Key Vault, anahtarı anahtar şifreleme anahtarı olarak kullanır TpmEphemeralEncryptionKey
.
Dekont
altında $.x-ms-isolation-tee.x-ms-runtime.keys
bir anahtar olabileceğine dikkat edin. Anahtar Kasası'nın kullanacağı anahtar bu değildir .
Yayın ilkesiyle dışarı aktarılabilir anahtar oluşturma
Azure Gizli Sanal Makinesi'nin anahtar işlemini gerçekleştirmesine release
olanak tanıyan bir Key Vault erişim ilkesi oluşturuyoruz. Son olarak, sürüm ilkemizi anahtar oluşturma sırasında base64 kodlanmış dizesi olarak eklemeliyiz. Anahtar, HSM tarafından desteklenen dışarı aktarılabilir bir anahtar olmalıdır.
Dekont
HSM destekli anahtarlar Azure Key Vault Premium ve Azure Key Vault Yönetilen HSM ile kullanılabilir.
[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 şablonu 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')]"
]
}
Key Vault'un yeni, HSM destekli bir anahtar oluşturduğunu ve Azure portalına gidip anahtarımızı seçerek güvenli anahtar sürüm ilkemizi içerdiğini doğrulayabiliriz. Hedeflenen anahtar "dışarı aktarılabilir" olarak işaretlenir.
Konuk kanıtlama istemcisi
Kanıtlama, bir şeyin istenen işletim durumunda çalıştığını kriptografik olarak değerlendirmemize yardımcı olur. Bir tarafın, doğrulayıcının güvenilmeyen potansiyel bir eş olan attester'in güvenilirliğini değerlendirmesi sürecidir. Uzak konuk kanıtlama ile, güvenilen yürütme ortamı içinde bir işletim sisteminin tamamını çalıştırmanızı sağlayan bir platform sunar.
Önemli
Microsoft, hem Windowshem de Linux için geliştirme çabalarınıza yardımcı olabilecek bir C/C++ kitaplığı sunar. Kitaplık, donanımdan bir SEV-SNP platform raporu almayı ve ayrıca bir Azure Doğrulama hizmeti örneği tarafından kanıtını almayı kolaylaştırır. Azure Doğrulama hizmeti, Microsoft tarafından barındırılan bir hizmet (paylaşılan) veya kendi özel örneğiniz olabilir.
CVM'lerle konuk kanıtlama işlemini kolaylaştırmak için konuk kanıtlama kitaplığını kullanan açık kaynak d Windows ve Linux istemci ikili dosyası seçilebilir. İstemci ikili dosyası, test edilen platform raporunu JSON Web Belirteci olarak döndürür. Bu, Key Vault'un release
anahtar işlemi için gereklidir.
Dekont
Azure Doğrulama hizmetinden bir belirteç 8 saat geçerlidir.
[Linux]
VM'nizde oturum açın.
Örnek Linux uygulamasını kopyalayın.
build-essential
paketini yükleyin. Bu paket, örnek uygulamayı derlemek için gereken her şeyi yükler.
sudo apt-get install build-essential
libcurl4-openssl-dev
ve libjsoncpp-dev
paketlerini yükleyin.
sudo apt-get install libcurl4-openssl-dev
sudo apt-get install libjsoncpp-dev
Kanıtlama paketini indirin .
Kanıtlama paketini yükleyin. değerini indirdiğiniz sürümle değiştirdiğinizden <version>
emin olun.
sudo dpkg -i azguestattestation1_<latest-version>_amd64.deb
Örnek istemciyi çalıştırmak için sıkıştırması açılmış klasörün içinde gezinin ve aşağıdaki komutu çalıştırın:
sudo ./AttestationClient -a <attestation-url> -n <nonce-value> -o token
Dekont
olarak belirtilmezse-o
, exe kanıtlama sonucuna ve platformuna bağlı olarak true veya false ikili sonucunu yazdırırsevsnp
.token
VM'nizde oturum açın.
Örnek Windows uygulamasını kopyalayın.
Sıkıştırması açılmış klasörün içinde gezinin ve komutunu çalıştırın VC_redist.x64.exe
. VC_redist makineye Microsoft C ve C++ (MSVC) çalışma zamanı kitaplıklarını yükler.
Örnek istemciyi çalıştırmak için sıkıştırması açılmış klasörün içinde gezinin ve aşağıdaki komutu çalıştırın:
sudo ./AttestationClient -a <attestation-url> -n <nonce-value> -o token
Dekont
olarak belirtilmezse-o
, exe kanıtlama sonucuna ve platformuna bağlı olarak true veya false ikili sonucunu yazdırırsevsnp
.token
Konuk Kanıtlama sonucu
Konuk Kanıtlama istemcisinden elde edilen sonuç yalnızca base64 kodlanmış bir dizedir. Bu kodlanmış dize değeri, üst bilgi, gövde ve imza içeren imzalı bir JSON Web Belirtecidir (JWT). Dizeyi .
(nokta) değerine bölebilir ve base64 sonuçların kodunu çözebilirsiniz.
eyJhbGciO...
Üst bilgi, JSON ile kodlanmış ortak anahtar kümesine bağlanan JWK Kümesi URI'sini de içerirjku
. Bunlardan biri, JWS'yi dijital olarak imzalamak için kullanılan anahtara karşılık gelir. , kid
JWS'yi imzalamak için hangi anahtarın kullanıldığını gösterir.
{
"alg": "RS256",
"jku": "https://sharedweu.weu.attest.azure.net/certs",
"kid": "dRKh+hBcWUfQimSl3Iv6ZhStW3TSOt0ThwiTgUUqZAo=",
"typ": "JWT"
}
Konuk kanıtlama yanıtının gövdesi, anahtar yayın ilkesine karşı test etmek için giriş olarak Azure Key Vault tarafından doğrulanır. Daha önce belirtildiği gibi Azure Key Vault anahtar şifreleme anahtarı olarak "TpmEphemeralEncryptionKey
" kullanır.
{
"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 Doğrulama hizmeti belgeleri, SEV-SNP ile ilgili tüm taleplerin açıklamalarını içeren kapsamlı bir listeye sahiptir.
AttestationClient ikili dosyasını kullanarak doğrulanmış bir platform raporu almak için herhangi bir betik veya programlama dilini kullanabiliriz. Önceki bir adımda dağıttığınız sanal makinede yönetilen kimlik etkinleştirildiğinden örnek meta veri hizmetinden (I AVH) Key Vault için bir Azure AD belirteci almalıyız.
Onaylanmış platform raporunu gövde yükü ve yetkilendirme üst bilgimizde Microsoft Entra belirtecini olarak yapılandırarak, anahtar release
işlemini gerçekleştirmek için gereken her şeye sahip olursunuz.
#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
}
Anahtar Yayın Yanıtı
Güvenli anahtar bırakma işlemi, JSON yükünün içinde yalnızca tek bir özellik döndürür. Bununla birlikte, içerik base64 de kodlanmıştır.
{
"value": "eyJhbGciOiJSUzI1NiIsImtpZCI6Ijg4RUFDM.."
}
Burada başka bir üst bilgimiz var, ancak bunun özelliği olarak X.509 sertifika zinciri var.
{
"alg": "RS256",
"kid": "88EAC2DB6BE4E051B0E05AEAF6CB79E675296121",
"x5t": "iOrC22vk4FGw4Frq9st55nUpYSE",
"typ": "JWT",
"x5t#S256": "BO7jbeU3BG0FEjetF8rSisRbkMfcdy0olhcnmYEwApA",
"x5c": [
"MIIIfDCCBmSgA..XQ==",
"MII..8ZZ8m",
"MII..lMrY="
]
}
PowerShell'deki "x5c
" dizisinden okuyabilirsiniz; bu, bunun geçerli bir sertifika olduğunu doğrulamanıza yardımcı olabilir. Aşağıda örnek verilmiştir:
$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
Yanıtın JWT belirteci gövdesi, anahtar işlemi çağrılırken aldığınız yanıta get
inanılmaz derecede benzer. Ancak, release
işlem diğer şeylerin yanı sıra özelliğini de içerir 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'ünüzün altındaki $.response.key.release_policy.data
değerin kodunu çözmesi halinde, önceki bir adımda tanımladığımız Key Vault anahtar yayın ilkesinin JSON gösterimini alırsınız.
key_hsm
base64 kod çözme özelliği şöyle görünür:
{
"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"
}
Sonraki adımlar
SKR İlkesi ÖrnekleriKonuk kanıtlama yüklügizli VM'lerle Bulut için Microsoft Defender tümleştirmesini kullanmayı öğrenin Konuk kanıtlama özelliğihakkında daha fazla bilgi edinin Azure gizli VM'leri hakkında daha fazla bilgi edinin