Verwenden Sie ein Azure-Konto, das dem Azure-Abonnement zugeordnet ist, das den virtuellen Computer 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 wie 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 Benutzerzugriffsrichtlinie zu Azure Key Vault
Nachdem Sie eine systemseitig zugewiesene verwaltete Identität für Ihren CVM aktiviert haben, müssen Sie ihr Zugriff auf die Azure Key Vault-Datenebene gewähren, in der Schlüsselobjekte gespeichert werden. Um sicherzustellen, dass nur unser vertraulicher virtueller Computer den Freigabevorgang ausführen kann, erteilen wir nur die Berechtigung, die wirklich 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 oder der 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 Freigaberichtlinie
Key Vault-Richtlinien für die sichere Schlüsselfreigabe werden nach Azure Policy modelliert, wobei eine etwas andere Grammatik gilt.
Die Idee ist, den Nachweisplattformbericht in Form eines JSON Web Token (JWT) an Key Vault übergeben. Dort wird das JWT darauf überprüft, ob die Ansprüche im Nachweisplattformbericht mit den Ansprüchen in der Richtlinie übereinstimmen.
Beispielsweise könnten wir einen Schlüssel nur freigeben wollen, wenn unser Nachweisplattformbericht Eigenschaften wie die folgenden aufweist:
- Nachweis durch Microsoft Azure Attestation-Dienstendpunkt (MAA) "https://sharedweu.weu.attest.azure.net"
- Dieser
authority
-Wert aus der Richtlinie wird mit der Eigenschaft iss
(Aussteller) im Token verglichen.
- Zudem wird überprüft, ob auch ein Objekt namens
x-ms-isolation-tee
mit einer Eigenschaft namens x-ms-attestation-type
vorhanden ist, die den Wert sevsnpvm
enthält.
- MAA als Azure-Dienst hat bestätigt, dass die CVM in einem AMD SEV-SNP-Originalprozessor ausgeführt wird.
- Zudem wird überprüft, ob auch ein Objekt namens
x-ms-isolation-tee
mit einer Eigenschaft namens x-ms-compliance-status
vorhanden ist, die den Wert azure-compliant-cvm
enthält.
- MAA als Azure-Dienst kann bestätigen, dass der CVM ein konformer virtueller Azure-Computer ist.
Erstellen Sie einen neuen Ordner namens assets
, und fügen Sie der Datei mit dem Namen cvm-release-policy.json
den folgenden JSON-Inhalt 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üsselstellen enthält. Eine claim
-Bedingung ist ein JSON-Objekt, das einen Anspruchsnamen, eine Bedingung für den Abgleich und einen Wert ermittelt. Die Bedingungsobjekte AnyOf
und AllOf
ermöglichen die Modellierung einer logischen OR
- und AND
-Bedingung. Derzeit können wir nur einen equals
-Vergleich in claim
durchführen. Bedingungseigenschaften werden zusammen mit authority
-Eigenschaften platziert.
Wichtig
Eine Umgebungsassertion enthält mindestens einen Schlüsselverschlüsselungsschlüssel und mindestens einen Anspruch über die Zielumgebung (z. B. TEE-Typ, Herausgeber, Version), die mit der Schlüsselfreigaberichtlinie abgeglichen werden. Der Schlüsselverschlüsselungsschlüssel ist ein öffentlicher RSA-Schlüssel, der im Besitz der Zielausführungsumgebung ist, die für den Schlüsselexport verwendet wird, und von dieser auch geschützt 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 aus der Arrayeigenschaft keys
im Objekt x-ms-runtime
aus und sucht nach einem öffentlichen RSA-Schlüssel mit "key_use": ["enc"]
oder "key_ops": ["encrypt"]
. Ein Beispiel für einen dokumentierten Nachweisplattformbericht 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 Pfad $.x-ms-runtime.keys
. Key Vault verwendet den TpmEphemeralEncryptionKey
-Schlüssel als Schlüsselverschlüsselungsschlüssel.
Hinweis
Beachten Sie, dass unter $.x-ms-isolation-tee.x-ms-runtime.keys
möglicherweise ein Schlüssel vorhanden ist. Das ist nicht der Schlüssel, den Key Vault verwenden wird.
Erstellen eines exportierbaren Schlüssels mit Freigaberichtlinie
Wir erstellen eine Key Vault-Zugriffsrichtlinie, die es einem virtuellen Azure-Computer ermöglicht, den release
-Schlüsselvorgang auszuführen. Schließlich müssen wir unsere Freigaberichtlinie während der Schlüsselerstellung als base64-codierte Zeichenfolge einschließen. Der Schlüssel muss ein exportierbarer Schlüssel sein, der auf einem HSM basiert.
Hinweis
HSM-basierte Schlüssel sind mit Azure Key Vault Premium und verwalteten Azure Key Vault-HSMs 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')]"
]
}
Sie können überprüfen, ob Key Vault einen neuen, HSM-basierten Schlüssel erstellt hat und ob dieser Ihre Richtlinie für sichere Schlüsselfreigabe enthält, indem Sie zum Azure-Portal navigieren und den Schlüssel auswählen. Der beabsichtigte Schlüssel wird als exportierbar gekennzeichnet.
Gastnachweisclient
Ein Nachweis hilft, kryptografisch zu bewerten, 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 Remotegastnachweis bietet die Trusted Execution Environment eine Plattform, auf der Sie ein gesamtes Betriebssystem ausführen können.
Wichtig
Microsoft bietet eine C-/C++-Bibliothek für Windows und Linux, die Ihnen bei der Entwicklung helfen kann. Die Bibliothek erleichtert das Abrufen eines SEV-SNP-Plattformberichts von der Hardware und die Bestätigung durch eine Instanz des Azure Attestation-Diensts. Der Azure Attestation-Dienst kann entweder von Microsoft (freigegeben) oder von Ihrer eigenen privaten Instanz gehostet werden.
Eine Open-Source-Binärdatei für Windows- und Linux-Clients, die die Gastnachweisbibliothek verwendet, kann ausgewählt werden, um den Gastnachweisprozess mit CVMs zu vereinfachen. Die Clientbinärdatei gibt den Nachweisplattformbericht als JSON Web Token zurück, was für den release
-Schlüsselvorgang von Key Vault erforderlich ist.
Hinweis
Ein Token aus dem Azure Attestation-Dienst ist für 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 in den entzippten Ordner, und führen Sie den folgenden Befehl aus:
sudo ./AttestationClient -a <attestation-url> -n <nonce-value> -o token
Hinweis
Wenn -o
nicht als token
angegeben ist, gibt die EXE-Datei ein binäres Ergebnis (true oder false) aus, abhängig vom Nachweisergebnis und der Plattform (sevsnp
).
Melden Sie sich bei Ihrer VM an.
Klonen Sie die Windows-Beispielanwendung.
Navigieren Sie in den entzippten Ordner, und führen Sie VC_redist.x64.exe
aus. VC_redist installiert die Microsoft C- und C++-Runtimebibliotheken (MSVC) auf dem Computer.
Um den Beispielclient auszuführen, navigieren Sie in den entzippten Ordner, und führen Sie den folgenden Befehl aus:
sudo ./AttestationClient -a <attestation-url> -n <nonce-value> -o token
Hinweis
Wenn -o
nicht als token
angegeben ist, gibt die EXE-Datei ein binäres Ergebnis (true oder false) aus, 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 Web Token (JWT), mit einem Header, einem Textkörper und einer Signatur. Sie können die Zeichenfolge nach dem.
-Wert (Punkt) teilen und die Ergebnisse base64-decodieren.
eyJhbGciO...
Der Header enthält jku
, auch bekannt als 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. kid
gibt an, welcher Schlüssel zum Signieren der 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 ihn mit der Schlüsselfreigaberichtlinie abzugleichen. Wie bereits erwähnt, verwendet Azure Key Vault 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 Attestation-Dienst enthält eine umfangreiche Liste mit Beschreibungen aller dieser SEV-SNP-bezogenen Ansprüche.
Sie können jede Skript- oder Programmiersprache verwenden, um einen Nachweisplattformbericht mithilfe der AttestationClient-Binärdatei abzurufen. Da für den virtuellen Computer, den wir in einem vorherigen Schritt bereitgestellt haben, verwaltete Identitäten aktiviert sind, sollten wir ein Azure AD-Token für Key Vault aus Instance Metadata Service (IMDS) abrufen.
Indem Sie den Nachweisplattformbericht als Textkörpernutzdaten und das Microsoft Entra-Token im Autorisierungsheader konfigurieren, haben Sie alles, was erforderlich ist, um den release
-Schlüsselvorgang auszuführen.
#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
}
Antwort auf Schlüsselfreigabe
Der Vorgang zur sicheren Schlüsselfreigabe gibt nur eine einzelne Eigenschaft innerhalb der JSON-Nutzdaten 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-Textkörper der Antwort sieht ähnlich aus wie die Antwort, die Sie erhalten, wenn Sie den get
-Schlüsselvorgang aufrufen. Der release
-Vorgang umfasst 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 Sie den Wert unter $.response.key.release_policy.data
base64-decodieren, erhalten Sie die JSON-Darstellung der Key Vault-Schlüsselfreigaberichtlinie, die wir in einem früheren Schritt definiert haben.
Der base64-decodierte Wert der key_hsm
-Eigenschaft 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-RichtlinienbeispieleVerwenden der Microsoft Defender for Cloud-Integration mit vertraulichen VMs mit installiertem GastnachweisInformationen zum GastnachweisfeatureInformationen zu vertraulichen virtuellen Azure-Computern