Verwenden Sie ein Azure-Konto, das dem Azure-Abonnement zugeordnet ist, das die VM enthält.
Um die vom System zugewiesene verwaltete Identität zu aktivieren, laden Sie die Vorlage in einem Editor, suchen Sie die gewünschte Ressource Microsoft.Compute/virtualMachines
im Abschnitt resources
, und fügen Sie die "identity"
-Eigenschaft in der gleichen Ebene wie die "type": "Microsoft.Compute/virtualMachines"
-Eigenschaft hinzu. Verwenden Sie die folgende Syntax:
"identity": {
"type": "SystemAssigned"
},
Die endgültige Vorlage sieht im folgenden Beispiel aus.
"resources": [
{
"apiVersion": "2021-11-01",
"type": "Microsoft.Compute/virtualMachines",
"name": "[parameters('vmName')]",
"location": "[parameters('location')]",
"identity": {
"type": "SystemAssigned",
},
//other resource provider properties...
}
]
Hinzufügen der Zugriffsrichtlinie zu Azure Key Vault
Nachdem Sie eine vom System zugewiesene verwaltete Identität für Ihren CVM aktiviert haben, müssen Sie ihm Zugriff auf die Azure Key Vault-Datenebene gewähren, auf der wichtige Objekte gespeichert werden. Um sicherzustellen, dass nur unser vertraulicher virtueller Computer den Releasevorgang ausführen kann, erteilen wir nur die spezifische Berechtigung, die erforderlich ist.
Hinweis
Die ID des verwalteten Identitätsobjekts finden Sie in den Identitätsoptionen des virtuellen Computers im Azure-Portal. Alternativ können Sie sie mit PowerShell-, Azure CLI-, Bicep- oder ARM-Vorlagen abrufen.
[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-Vorlage 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')]"
]
}
Vorbereiten der Releaserichtlinie
Key Vault Secure Key Release Policies werden nach Azure-Richtlinie modelliert, mit einer etwas anderen Grammatik.
Die Idee ist, wenn wir den dokumentierten Plattformbericht in Form eines JSON-Webtokens (JWT) an Key Vault übergeben. Es wird wiederum das JWT betrachten und überprüfen, ob die nachweisten Plattformberichtsansprüche mit den Ansprüchen in der Richtlinie übereinstimmen.
Angenommen, wir möchten einen Schlüssel nur freigeben, wenn unser bescheinigter Plattformbericht Eigenschaften wie:
- Vom Microsoft Azure Attestation (MAA)-Dienstendpunkthttps://sharedweu.weu.attest.azure.net" ";" bestätigt.
- Dieser
authority
Wert aus der Richtlinie wird mit der iss
Eigenschaft (Aussteller) im Token verglichen.
- Und dass es auch ein Objekt enthält, das mit einer Eigenschaft aufgerufen
x-ms-isolation-tee
wird, die einen x-ms-attestation-type
Wert sevsnpvm
enthält.
- MAA als Azure-Dienst hat bestätigt, dass der CVM in einem AMD SEV-SNP-Originalprozessor ausgeführt wird.
- Und dass es auch ein Objekt enthält, das mit einer Eigenschaft aufgerufen
x-ms-isolation-tee
wird x-ms-compliance-status
, die den Wert azure-compliant-cvm
enthält.
- MAA als Azure-Dienst hat die Möglichkeit, zu bestätigen, dass der CVM ein konformer virtueller Azure-Computer ist.
Erstellen Sie einen neuen Ordner namens assets
, und fügen Sie den folgenden JSON-Inhalt zu einer Datei mit dem Namen cvm-release-policy.json
hinzu:
{
"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"
}
]
}
]
}
Die Freigaberichtlinie ist eine anyOf
Bedingung, die ein Array von Schlüsselautoren enthält. Eine claim
Bedingung ist ein JSON-Objekt, das einen Anspruchsnamen, eine Bedingung für den Abgleich und einen Wert identifiziert. Die Und AllOf
Bedingungsobjekte AnyOf
ermöglichen die Modellierung einer logischen OR
und AND
. Derzeit können wir nur einen equals
Vergleich für ein claim
. Bedingungseigenschaften werden zusammen mit authority
Eigenschaften platziert.
Wichtig
Eine Umgebungs assertion enthält mindestens einen Schlüsselverschlüsselungsschlüssel und mindestens einen Anspruch über die Zielumgebung (z. B. TEE-Typ, Herausgeber, Version), die mit der Key Release-Richtlinie übereinstimmen. Der Schlüsselverschlüsselungsschlüssel ist ein öffentlicher RSA-Schlüssel, der im Besitz der Zielausführungsumgebung ist und für den Schlüsselexport verwendet wird. Er muss im TEE-Schlüsselanspruch (x-ms-runtime/keys) vorkommen. Dieser Anspruch ist ein JSON-Objekt, das einen JSON Web Key darstellt. Innerhalb des JWKS muss einer der Schlüssel die Anforderungen für die Verwendung als Verschlüsselungsschlüssel erfüllen (key_use ist "enc", bzw. key_ops enthält "encrypt"). Der erste geeignete Schlüssel wird ausgewählt.
Key Vault wählt den ersten geeigneten Schlüssel auskeys
der Arrayeigenschaft "" im Objekt "x-ms-runtime
" aus, es sucht nach einem öffentlichen RSA-Schlüssel mit "key_use": ["enc"]
oder "key_ops": ["encrypt"]
. Ein Beispiel für einen dokumentierten Plattformbericht würde wie folgt aussehen:
{
//...
"x-ms-runtime": {
"client-payload": {
"nonce": "MTIzNA=="
},
"keys": [
{
"e": "AQAB",
"key_ops": [
"encrypt"
],
"kid": "TpmEphemeralEncryptionKey",
"kty": "RSA",
"n": "9v2XQgAA6y18CxV8dSGnh..."
}
]
},
//...
}
In diesem Beispiel haben wir nur einen Schlüssel unter dem $.x-ms-runtime.keys
Pfad. Key Vault verwendet den TpmEphemeralEncryptionKey
Schlüssel als Schlüsselverschlüsselungsschlüssel.
Hinweis
Beachten Sie, dass unter Umständen ein Schlüssel vorhanden $.x-ms-isolation-tee.x-ms-runtime.keys
ist, ist dies nicht der Schlüssel, den Key Vault verwendet.
Erstellen eines exportierbaren Schlüssels mit Releaserichtlinie
Wir erstellen eine Schlüsseltresor-Zugriffsrichtlinie, mit der ein virtueller Azure-Computer den release
Schlüsselvorgang ausführen kann. Schließlich müssen wir unsere Releaserichtlinie während der Schlüsselerstellung als base64-codierte Zeichenfolge einschließen. Der Schlüssel muss ein exportierbarer Schlüssel sein, der von einem HSM unterstützt wird.
Hinweis
HSM-gesicherte Schlüssel sind mit azure Key Vault Premium und Azure Key Vault Managed HSM verfügbar.
[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-Vorlage 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')]"
]
}
Wir können überprüfen, ob Key Vault einen neuen, HSM-gesicherten Schlüssel erstellt hat und dass er unsere Richtlinie für sichere Schlüsselfreigabe enthält, indem wir zum Azure-Portal navigieren und unseren Schlüssel auswählen. Der beabsichtigte Schlüssel wird als "exportierbar" markiert.
Gastnachweisclient
Der Nachweis hilft uns, kryptografisch zu beurteilen , ob etwas im beabsichtigten Betriebszustand ausgeführt wird. Es ist der Prozess, mit dem eine Partei, der Prüfer, die Vertrauenswürdigkeit eines potenziell nicht vertrauenswürdigen Peers, den Nachweiser, bewertet. Mit dem Remote-Gastnachweis bietet die vertrauenswürdige Ausführungsumgebung eine Plattform, mit der Sie ein gesamtes Betriebssystem darin ausführen können.
Wichtig
Microsoft bietet eine C/C++-Bibliothek für Windows und Linux an, die Ihre Entwicklungsbemühungen unterstützen kann. Die Bibliothek erleichtert das Abrufen eines SEV-SNP-Plattformberichts aus der Hardware und die Bestätigung durch eine Instanz des Azure-Nachweisdiensts. Der Azure-Nachweisdienst kann entweder von Microsoft (freigegeben) oder von Ihrer eigenen privaten Instanz gehostet werden.
Eine open sourced Windows- und Linux-Client-Binärdatei, die die Gastnachweisbibliothek verwendet, kann ausgewählt werden, um den Gastnachweisprozess mit CVMs zu vereinfachen. Die Client-Binärdatei gibt den nachweisten Plattformbericht als JSON-Webtoken zurück, was für den Schlüsselvorgang von release
Key Vault erforderlich ist.
Hinweis
Ein Token aus dem Azure-Nachweisdienst ist 8 Stunden gültig.
[Linux]
Melden Sie sich bei Ihrer VM an.
Klonen Sie die Linux-Beispielanwendung.
Installieren Sie das build-essential
-Paket. Dieses Paket installiert alles, was für die Kompilierung der Beispielanwendung erforderlich ist.
sudo apt-get install build-essential
Installieren Sie die Pakete libcurl4-openssl-dev
und libjsoncpp-dev
.
sudo apt-get install libcurl4-openssl-dev
sudo apt-get install libjsoncpp-dev
Laden Sie das Nachweispaket herunter .
Installieren Sie das Nachweispaket. Ersetzen Sie <version>
unbedingt durch die von Ihnen heruntergeladene Version.
sudo dpkg -i azguestattestation1_<latest-version>_amd64.deb
Um den Beispielclient auszuführen, navigieren Sie innerhalb des entzippten Ordners, und führen Sie den folgenden Befehl aus:
sudo ./AttestationClient -a <attestation-url> -n <nonce-value> -o token
Hinweis
Wenn -o
nicht als angegeben token
wird, druckt die exe ein binäres Ergebnis wahr oder falsch, abhängig vom Nachweisergebnis und der Plattform.sevsnp
Melden Sie sich bei Ihrer VM an.
Klonen Sie die Windows-Beispielanwendung.
Navigieren Sie innerhalb des entzippten Ordners, und führen Sie den Befehl aus VC_redist.x64.exe
. VC_redist installiert Microsoft C- und C++-Laufzeitbibliotheken (MSVC) auf dem Computer.
Um den Beispielclient auszuführen, navigieren Sie innerhalb des entzippten Ordners, und führen Sie den folgenden Befehl aus:
sudo ./AttestationClient -a <attestation-url> -n <nonce-value> -o token
Hinweis
Wenn -o
nicht als angegeben token
wird, druckt die exe ein binäres Ergebnis wahr oder falsch, abhängig vom Nachweisergebnis und der Plattform.sevsnp
Ergebnis des Gastnachweises
Das Ergebnis des Gastnachweisclients ist einfach eine base64-codierte Zeichenfolge. Dieser codierte Zeichenfolgenwert ist ein signiertes JSON-Webtoken (JWT) mit einer Kopfzeile, einem Textkörper und einer Signatur. Sie können die Zeichenfolge durch den .
(Punkt)-Wert teilen und die Ergebnisse base64 decodieren.
eyJhbGciO...
Der Header enthält einen jku
JWK Set-URI, der mit einer Reihe von JSON-codierten öffentlichen Schlüsseln verknüpft ist. Einer davon entspricht dem Schlüssel, der zum digitalen Signieren der JWS verwendet wird. Dies kid
gibt an, welcher Schlüssel zum Signieren des JWS verwendet wurde.
{
"alg": "RS256",
"jku": "https://sharedweu.weu.attest.azure.net/certs",
"kid": "dRKh+hBcWUfQimSl3Iv6ZhStW3TSOt0ThwiTgUUqZAo=",
"typ": "JWT"
}
Der Textkörper der Gastnachweisantwort wird von Azure Key Vault als Eingabe überprüft, um mit der Schlüsselfreigaberichtlinie zu testen. Wie bereits erwähnt, verwendet Azure Key Vault das "TpmEphemeralEncryptionKey
" als Schlüsselverschlüsselungsschlüssel.
{
"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"
}
Die Dokumentation für den Microsoft Azure-Nachweisdienst enthält eine umfangreiche Liste mit Beschreibungen aller dieser SEV-SNP-bezogenen Ansprüche.
Wir können jede Skript- oder Programmiersprache verwenden, um einen attestierten Plattformbericht mithilfe der Binärdatei "AttestationClient" zu erhalten. Da der virtuelle Computer, den wir in einem vorherigen Schritt bereitgestellt haben, verwaltete Identität aktiviert ist, sollten wir ein Azure AD-Token für Key Vault aus dem Instanzmetadatendienst (IMDS) abrufen.
Indem Sie den nachweisten Plattformbericht als Body-Nutzlast und das Microsoft Entra-Token in unserem Autorisierungsheader konfigurieren, haben Sie alles, was zum Ausführen des Schlüsselvorgangs release
erforderlich ist.
#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
}
Key Release Response
Der Vorgang zum Freigeben sicherer Schlüssel gibt nur eine einzelne Eigenschaft innerhalb der JSON-Nutzlast zurück. Der Inhalt wurde jedoch auch base64 codiert.
{
"value": "eyJhbGciOiJSUzI1NiIsImtpZCI6Ijg4RUFDM.."
}
Hier haben wir einen anderen Header, obwohl dieser eine X.509-Zertifikatkette als Eigenschaft aufweist.
{
"alg": "RS256",
"kid": "88EAC2DB6BE4E051B0E05AEAF6CB79E675296121",
"x5t": "iOrC22vk4FGw4Frq9st55nUpYSE",
"typ": "JWT",
"x5t#S256": "BO7jbeU3BG0FEjetF8rSisRbkMfcdy0olhcnmYEwApA",
"x5c": [
"MIIIfDCCBmSgA..XQ==",
"MII..8ZZ8m",
"MII..lMrY="
]
}
Sie können aus dem Array "x5c
" in PowerShell lesen. Dadurch können Sie überprüfen, ob es sich um ein gültiges Zertifikat handelt. Unten ist ein Beispiel aufgeführt:
$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
Der JWT-Tokentext der Antwort ähnelt unglaublich der Antwort, die Sie beim Aufrufen des get
Schlüsselvorgangs erhalten. release
Der Vorgang enthält jedoch unter anderem die key_hsm
Eigenschaft.
{
"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
}
}
}
}
Wenn Ihr base64 den Wert unter $.response.key.release_policy.data
decodiert, erhalten Sie die JSON-Darstellung der Key Vault-Schlüsselfreigaberichtlinie, die wir in einem früheren Schritt definiert haben.
Der key_hsm
decodierte Eigenschaftswert base64 sieht wie folgt aus:
{
"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"
}
Nächste Schritte
SKR-RichtlinienbeispieleErfahren Sie, wie Sie die Microsoft Defender for Cloud-Integration mit vertraulichen VMs mit installiertemGastnachweis verwenden. Erfahren Sie mehr über das GastnachweisfeatureInformationen zu vertraulichen Azure-VMs