استخدم حساب Azure المقترن باشتراك Azure الذي يحتوي على الجهاز الظاهري.
لتمكين الهوية المُدارة التي يعينها النظام، قم بتحميل القالب في محرر، وحدد موقع Microsoft.Compute/virtualMachines
موارد الاهتمام داخل قسم resources
وأضف خاصية "identity"
على نفس مستوى "type": "Microsoft.Compute/virtualMachines"
خاصية. استخدم بناء الجملة التالي:
"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 الخاص بك، يجب عليك تزويدها بالوصول إلى مستوى بيانات Azure Key Vault حيث يتم تخزين الكائنات الرئيسية. للتأكد من أن جهازنا الظاهري السري فقط يمكنه تنفيذ عملية الإصدار، سنمنح الإذن المحدد المطلوب فقط.
إشعار
يمكنك العثور على معرف كائن الهوية المدارة في خيارات هوية الجهاز الظاهري، في مدخل Microsoft Azure. بدلا من ذلك يمكنك استرداده باستخدام قوالب 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، مع قواعد نحوية مختلفة قليلا.
الفكرة هي عندما نمرر تقرير النظام الأساسي المصدق عليه، في شكل JSON Web Token (JWT)، إلى Key Vault. وسينظر بدوره في JWT ويتحقق مما إذا كانت مطالبات تقرير النظام الأساسي المصدق عليها تطابق المطالبات في السياسة أم لا.
على سبيل المثال، لنفترض أننا نريد إصدار مفتاح فقط عندما يحتوي تقرير النظام الأساسي المصدق عليه على خصائص مثل:
- مصدق من قبل نقطة نهاية خدمة Microsoft Azure Attestation (MAA) "https://sharedweu.weu.attest.azure.net".
- تتم مقارنة هذه
authority
القيمة من النهج بالخاصية iss
(المصدر)، في الرمز المميز.
- وأنه يحتوي أيضا على كائن يسمى
x-ms-isolation-tee
بخاصية تسمى x-ms-attestation-type
، والتي تحتوي على قيمة sevsnpvm
.
- لقد شهد MAA كخدمة Azure أن CVM قيد التشغيل في معالج أصلي AMD SEV-SNP.
- وأنه يحتوي أيضا على كائن يسمى
x-ms-isolation-tee
بخاصية تسمى x-ms-compliance-status
، والتي تحتوي على القيمة azure-compliant-cvm
.
- لدى MAA كخدمة Azure القدرة على إثبات أن 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
. حاليا، يمكننا إجراء equals
مقارنة فقط على claim
. يتم وضع خصائص الشرط مع authority
الخصائص.
هام
يحتوي تأكيد البيئة على مفتاح تشفير مفتاح على الأقل ومطالبة واحدة أو أكثر حول البيئة الهدف (على سبيل المثال، نوع TEE والناشر والإصدار) التي تتم مطابقتها مع نهج إصدار المفتاح. مفتاح تشفير المفتاح هو مفتاح RSA عام مملوك ومحمي بواسطة بيئة التنفيذ الهدف المستخدمة لتصدير المفتاح. لابد أن يظهر في مطالبة مفاتيح TEE (x-ms-runtime/keys). هذه المطالبة هي عنصر JSON يمثل مجموعة مفاتيح ويب JSON. داخل JWKS، يجب أن يفي أحد المفاتيح بمتطلبات الاستخدام كمفتاح تشفير (key_use هو "enc"، أو key_ops يحتوي على "encrypt"). يتم اختيار أول مفتاح مناسب.
يختار Key Vault أول مفتاح مناسب من خاصية الصفيف "keys
" في الكائن "x-ms-runtime
"، ويبحث عن مفتاح RSA عام مع "key_use": ["enc"]
أو "key_ops": ["encrypt"]
. قد يبدو مثال على تقرير النظام الأساسي المصدق عليه كما يلي:
{
//...
"x-ms-runtime": {
"client-payload": {
"nonce": "MTIzNA=="
},
"keys": [
{
"e": "AQAB",
"key_ops": [
"encrypt"
],
"kid": "TpmEphemeralEncryptionKey",
"kty": "RSA",
"n": "9v2XQgAA6y18CxV8dSGnh..."
}
]
},
//...
}
في هذا المثال، لدينا مفتاح واحد فقط تحت $.x-ms-runtime.keys
المسار. يستخدم TpmEphemeralEncryptionKey
Key Vault المفتاح كمفتاح تشفير المفتاح.
إشعار
لاحظ أنه قد يكون هناك مفتاح ضمن $.x-ms-isolation-tee.x-ms-runtime.keys
، وهذا ليس المفتاح الذي سيستخدمه Key Vault.
إنشاء مفتاح قابل للتصدير باستخدام نهج الإصدار
نقوم بإنشاء نهج الوصول إلى Key Vault الذي يتيح للجهاز الظاهري السري Azure تنفيذ release
عملية المفتاح. وأخيرا، يجب أن نقوم بتضمين نهج الإصدار الخاص بنا كسلسلة مشفرة 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')]"
]
}
يمكننا التحقق من أن Key Vault قد أنشأ مفتاحا جديدا مدعوما من HSM وأنه يحتوي على نهج إصدار المفتاح الآمن من خلال الانتقال إلى مدخل Microsoft Azure وتحديد مفتاحنا. سيتم وضع علامة على المفتاح المقصود على أنه "قابل للتصدير".
عميل تصديق الضيف
يساعدنا التصديق على تقييم شيء ما قيد التشغيل في حالة التشغيل المقصودة بشكل مشفر. إنها العملية التي يقوم من خلالها طرف واحد، المدقق، بتقييم الجدارة بالثقة لنظير يحتمل أن يكون غير موثوق به، وهو المصدق. مع إثبات الضيف عن بعد، توفر بيئة التنفيذ الموثوق بها نظاما أساسيا يسمح لك بتشغيل نظام تشغيل كامل داخله.
هام
تقدم Microsoft مكتبة C/C++، لكل من Windows وLinux التي يمكن أن تساعد جهود التطوير الخاصة بك. تسهل المكتبة الحصول على تقرير النظام الأساسي SEV-SNP من الأجهزة وأيضا التصديق عليه من خلال مثيل خدمة Azure Attestation. يمكن أن تكون خدمة Azure Attestation إما واحدة مستضافة من قبل Microsoft (مشتركة) أو مثيل خاص بك.
يمكن اختيار مصدر مفتوح ثنائي عميل Windows وLinux يستخدم مكتبة تصديق الضيف لتسهيل عملية تصديق الضيف باستخدام CVMs. يقوم ثنائي العميل بإرجاع تقرير النظام الأساسي المصدق عليه كرمز JSON Web Token، وهو ما هو مطلوب لعملية مفتاح Key Vault release
.
إشعار
الرمز المميز من خدمة Azure Attestation صالح لمدة 8 ساعات.
[Linux]
تسجيل الدخول إلى الجهاز الظاهري الخاص بك.
استنساخ نموذج تطبيق 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
تسجيل الدخول إلى الجهاز الظاهري الخاص بك.
استنساخ نموذج تطبيق 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
نتيجة تصديق الضيف
النتيجة من عميل Guest Attestation هي ببساطة سلسلة مشفرة base64. قيمة السلسلة المرمزة هذه هي رمز ويب JSON مميز موقع (JWT)، مع رأس و نص وتوقيع. يمكنك تقسيم السلسلة حسب .
القيمة (نقطة) وفك ترميز base64 النتائج.
eyJhbGciO...
يحتوي العنوان على jku
، المعروف أيضا باسم JWK Set URI الذي يرتبط بمجموعة من المفاتيح العامة المشفرة JSON. واحد منها يتوافق مع المفتاح المستخدم لتوقيع 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. نظرا لأن الجهاز الظاهري الذي نشرناه في خطوة سابقة قد قام بتمكين الهوية المدارة، يجب أن نحصل على رمز Azure AD المميز ل Key Vault من خدمة بيانات تعريف المثيل (IMDS).
من خلال تكوين تقرير النظام الأساسي المصدق كحمولة النص الأساسي والرمز المميز ل 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="
]
}
يمكنك القراءة من الصفيف "x5c
" في PowerShell، يمكن أن يساعدك هذا في التحقق من أن هذه شهادة صالحة. وفيما يلي مثال على ذلك:
$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
، فستحصل على تمثيل JSON لنهج إصدار مفتاح Key Vault الذي حددناه في خطوة سابقة.
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 تعرف على كيفية استخدام تكامل Microsoft Defender for Cloud مع الأجهزة الظاهرية السرية مع تثبيت تصديق الضيفتعرف على المزيد حول ميزةتصديق الضيف تعرف على الأجهزة الظاهرية السرية ل Azure