Schnellstart: Bereitstellen einer vertraulichen VM mithilfe einer ARM-Vorlage
Mithilfe einer Azure Resource Manager-Vorlage (ARM-Vorlage) können Sie schnell eine vertrauliche Azure-VM erstellen. Vertrauliche VMs werden sowohl auf AMD-Prozessoren ausgeführt, die von AMD SEV-SNP unterstützt werden, als auch auf Intel-Prozessoren, die von Intel TDX unterstützt werden, um VM-Speicherverschlüsselung und -isolation zu erzielen. Weitere Informationen finden Sie in der Übersicht über Vertrauliche virtuelle Computer.
In diesem Tutorial wird eine vertrauliche VM mit einer benutzerdefinierten Konfiguration bereitgestellt.
Voraussetzungen
- Ein Azure-Abonnement. Kostenlose Testkonten haben keinen Zugriff auf die in diesem Tutorial verwendeten virtuellen Computer. Eine Option besteht darin, ein Abonnement mit nutzungsbasierter Bezahlung zu verwenden.
- Wenn Sie die Bereitstellung über die Azure CLI ausführen möchten, müssen Sie PowerShell installieren und die Azure-Befehlszeilenschnittstelle installieren.
Bereitstellen der Vorlage für vertrauliche VMs über die Azure CLI
Sie können eine vertrauliche VM-Vorlage bereitstellen, die optional über eine Verschlüsselung des vertraulichen Betriebssystemdatenträgers mit einem plattformseitig verwalteten Schlüssel verfügt.
So erstellen Sie Ihre vertrauliche VM mithilfe einer ARM-Vorlage über die Azure CLI und stellen sie bereit
Melden Sie sich in der Azure CLI bei Ihrem Azure-Konto an.
az login
Legen Sie Ihr Azure-Abonnement fest. Ersetzen Sie
<subscription-id>
durch Ihre Abonnement-ID. Vergewissern Sie sich, dass Ihr Abonnement die Voraussetzungen erfüllt.az account set --subscription <subscription-id>
Legen Sie die Variablen für Ihre vertrauliche VM fest. Geben Sie den Bereitstellungsnamen (
$deployName
), die Ressourcengruppe ($resourceGroup
), den VM-Namen ($vmName
) und die Azure-Region ($region
) an. Ersetzen Sie die Beispielwerte nach Bedarf durch Ihre eigenen Informationen.Hinweis
Vertrauliche VMs sind nicht an allen Standorten verfügbar. Informationen zu den derzeit unterstützten Standorten finden Sie unter Verfügbare Produkte nach Region.
$deployName="<deployment-name>" $resourceGroup="<resource-group-name>" $vmName= "<confidential-vm-name>" $region="<region-name>"
Ist die angegebene Ressourcengruppe nicht vorhanden, erstellen Sie eine Ressourcengruppe mit diesem Namen.
az group create -n $resourceGroup -l $region
Stellen Ihrer VM mithilfe einer ARM-Vorlage mit einer benutzerdefinierten Parameterdatei und einer Vorlagendatei in Azure bereit.
az deployment group create ` -g $resourceGroup ` -n $deployName ` -u "<json-template-file-path>" ` -p "<json-parameter-file-path>" ` -p vmLocation=$region ` vmName=$vmName
Definieren einer benutzerdefinierten Parameterdatei
Wenn Sie eine vertrauliche VM über die Azure-Befehlszeilenschnittstelle (Azure CLI) erstellen, müssen Sie eine benutzerdefinierte Parameterdatei definieren. Führen Sie die folgenden Schritte aus, um eine benutzerdefinierte JSON-Parameterdatei zu erstellen:
Melden Sie sich über die Azure CLI bei Ihrem Azure-Konto an.
Erstellen Sie eine JSON-Parameterdatei. Beispiel:
azuredeploy.parameters.json
.Fügen Sie abhängig vom verwendeten Betriebssystemimage entweder das Beispiel einer Windows-Parameterdatei oder das Beispiel einer Linux-Parameterdatei in Ihre Parameterdatei ein.
Bearbeiten Sie ggf. den JSON-Code in der Parameterdatei. Aktualisieren Sie z. B. den Namen des Betriebssystemimages (
osImageName
) oder den Namen des Administratorbenutzers (adminUsername
).Konfigurieren Sie Ihre Sicherheitstypeinstellung (
securityType
). Wählen SieVMGuestStateOnly
für „keine Verschlüsselung des vertraulichen Betriebssystemdatenträgers“ aus. Oder wählen SieDiskWithVMGuestState
für „Verschlüsselung des vertraulichen Betriebssystemdatenträgers mit plattformseitig verwaltetem Schlüssel“ aus. Nur für Intel TDX-SKUs und Linux-basierte Images können Kunden denNonPersistedTPM
Sicherheitstyp auswählen, der mit einem ephemeren vTPM bereitgestellt werden soll. Verwenden Sie für denNonPersistedTPM
Sicherheitstyp die minimale "apiVersion": "2023-09-01" unterMicrosoft.Compute/virtualMachines
der Vorlagendatei.Speichern Sie Ihre Parameterdatei.
Beispiel einer Windows-Parameterdatei
Verwenden Sie dieses Beispiel, um eine benutzerdefinierte Parameterdatei für eine Windows-basierte vertrauliche VM zu erstellen.
{
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"vmSize": {
"value": "Standard_DC2as_v5"
},
"osImageName": {
"value": "Windows Server 2022 Gen 2"
},
"securityType": {
"value": "DiskWithVMGuestState"
},
"adminUsername": {
"value": "testuser"
},
"adminPasswordOrKey": {
"value": "<your password>"
}
}
}
Beispiel einer Linux-Parameterdatei
Verwenden Sie dieses Beispiel, um eine benutzerdefinierte Parameterdatei für eine Linux-basierte vertrauliche VM zu erstellen.
{
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"vmSize": {
"value": "Standard_DC2as_v5"
},
"osImageName": {
"value": "Ubuntu 20.04 LTS Gen 2"
},
"securityType": {
"value": "DiskWithVMGuestState"
},
"adminUsername": {
"value": "testuser"
},
"authenticationType": {
"value": "sshPublicKey"
},
"adminPasswordOrKey": {
"value": <your SSH public key>
}
}
}
Hinweis
Ersetzen Sie den osImageName-Wert.
Bereitstellen einer vertraulichen VM-Vorlage mit der Verschlüsselung des vertraulichen Betriebssystemdatenträgers mit kundenseitig verwaltetem Schlüssel
Melden Sie sich über die Azure CLI bei Ihrem Azure-Konto an.
az login
Legen Sie Ihr Azure-Abonnement fest. Ersetzen Sie
<subscription-id>
durch Ihre Abonnement-ID. Vergewissern Sie sich, dass Ihr Abonnement die Voraussetzungen erfüllt.az account set --subscription <subscription-id>
Gewähren Sie dem Mandanten den vertraulichen VM-Dienstprinzipal
Confidential VM Orchestrator
Für diesen Schritt müssen Sie ein globaler Administrator sein, oder Sie benötigen die RBAC-Rolle „Benutzerzugriffsadministrator“. Installieren Sie das Microsoft Graph SDK, um die folgenden Befehle auszuführen.
Connect-Graph -Tenant "your tenant ID" Application.ReadWrite.All New-MgServicePrincipal -AppId bf7b6499-ff71-4aa2-97a4-f372087be7f0 -DisplayName "Confidential VM Orchestrator"
Richten Sie Ihren Azure-Schlüsseltresor ein. Informationen zum Verwenden eines verwalteten Azure Key Vault-HSM finden Sie im nächsten Schritt.
Erstellen Sie eine Ressourcengruppe für Ihren Schlüsseltresor. Ihre Schlüsseltresorinstanz und Ihre vertrauliche VM müssen sich in derselben Azure-Region befinden.
$resourceGroup = <key vault resource group> $region = <Azure region> az group create --name $resourceGroup --location $region
Erstellen Sie eine Schlüsseltresorinstanz mit einer Premium-SKU, und wählen Sie Ihre bevorzugte Region aus. Die Standard-SKU wird nicht unterstützt.
$KeyVault = <name of key vault> az keyvault create --name $KeyVault --resource-group $resourceGroup --location $region --sku Premium --enable-purge-protection
Stellen Sie sicher, dass Sie über eine Besitzerrolle in diesem Schlüsseltresor verfügen.
Erteilen Sie dem Schlüsseltresor
Confidential VM Orchestrator
-Berechtigungen fürget
undrelease
.$cvmAgent = az ad sp show --id "bf7b6499-ff71-4aa2-97a4-f372087be7f0" | Out-String | ConvertFrom-Json az keyvault set-policy --name $KeyVault --object-id $cvmAgent.Id --key-permissions get release
(Optional) Wenn Sie keinen Azure-Schlüsseltresor verwenden möchten, können Sie stattdessen ein verwaltetes Azure Key Vault-HSM erstellen.
Folgen Sie dem Schnellstart zum Erstellen eines verwalteten Azure Key Vault-HSM, um ein verwaltetes Azure Key Vault-HSM bereitzustellen und zu aktivieren.
Aktivieren Sie den Löschschutz auf dem verwalteten Azure-HSM. Dieser Schritt ist erforderlich, um die Schlüsselfreigabe zu aktivieren.
az keyvault update-hsm --subscription $subscriptionId -g $resourceGroup --hsm-name $hsm --enable-purge-protection true
Gewähren Sie
Confidential VM Orchestrator
-Berechtigungen für das verwaltete HSM.$cvmAgent = az ad sp show --id "bf7b6499-ff71-4aa2-97a4-f372087be7f0" | Out-String | ConvertFrom-Json az keyvault role assignment create --hsm-name $hsm --assignee $cvmAgent.Id --role "Managed HSM Crypto Service Release User" --scope /keys/$KeyName
Erstellen Sie einen neuen Schlüssel unter Verwendung von Azure Key Vault. Informationen zum Verwenden eines verwalteten Azure-HSM finden Sie im nächsten Schritt.
Bereiten Sie die Schlüsselfreigaberichtlinie vor, und laden Sie sie auf Ihren lokalen Datenträger herunter.
Erstellen Sie einen neuen Schlüssel.
$KeyName = <name of key> $KeySize = 3072 az keyvault key create --vault-name $KeyVault --name $KeyName --ops wrapKey unwrapkey --kty RSA-HSM --size $KeySize --exportable true --policy "@.\skr-policy.json"
Rufen Sie Informationen zu dem Schlüssel ab, den Sie erstellt haben.
$encryptionKeyVaultId = ((az keyvault show -n $KeyVault -g $resourceGroup) | ConvertFrom-Json).id $encryptionKeyURL= ((az keyvault key show --vault-name $KeyVault --name $KeyName) | ConvertFrom-Json).key.kid
Stellen Sie einen Datenträgerverschlüsselungssatz (Disk Encryption Set, DES) mithilfe einer DES-ARM-Vorlage (
deployDES.json
) bereit.$desName = <name of DES> $deployName = <name of deployment> $desArmTemplate = <name of DES ARM template file> az deployment group create ` -g $resourceGroup ` -n $deployName ` -f $desArmTemplate ` -p desName=$desName ` -p encryptionKeyURL=$encryptionKeyURL ` -p encryptionKeyVaultId=$encryptionKeyVaultId ` -p region=$region
Weisen Sie der DES-Datei den Schlüsselzugriff zu.
$desIdentity= (az disk-encryption-set show -n $desName -g $resourceGroup --query [identity.principalId] -o tsv) az keyvault set-policy -n $KeyVault ` -g $resourceGroup ` --object-id $desIdentity ` --key-permissions wrapkey unwrapkey get
(Optional) Erstellen Sie einen neuen Schlüssel aus einem verwalteten Azure-HSM.
Bereiten Sie die Schlüsselfreigaberichtlinie vor, und laden Sie sie auf Ihren lokalen Datenträger herunter.
Erstellen Sie den neuen Schlüssel.
$KeyName = <name of key> $KeySize = 3072 az keyvault key create --hsm-name $hsm --name $KeyName --ops wrapKey unwrapkey --kty RSA-HSM --size $KeySize --exportable true --policy "@.\skr-policy.json"
Rufen Sie Informationen zu dem Schlüssel ab, den Sie erstellt haben.
$encryptionKeyURL = ((az keyvault key show --hsm-name $hsm --name $KeyName) | ConvertFrom-Json).key.kid
Stellen Sie einen DES bereit.
$desName = <name of DES> az disk-encryption-set create -n $desName ` -g $resourceGroup ` --key-url $encryptionKeyURL
Weisen Sie dem DES den Schlüsselzugriff zu.
desIdentity=$(az disk-encryption-set show -n $desName -g $resourceGroup --query [identity.principalId] -o tsv) az keyvault set-policy -n $hsm ` -g $resourceGroup ` --object-id $desIdentity ` --key-permissions wrapkey unwrapkey get
Stellen Sie Ihre vertrauliche VM mit dem kundenseitig verwalteten Schlüssel bereit.
Rufen Sie die Ressourcen-ID für DES ab.
$desID = (az disk-encryption-set show -n $desName -g $resourceGroup --query [id] -o tsv)
Stellen Sie Ihre vertrauliche VM mithilfe einer vertraulichen VM-ARM-Vorlage für Intel TDX und einer Bereitstellungsparameterdatei (z. B.
azuredeploy.parameters.win2022.json
) mit kundenseitig verwaltetem Schlüssel bereit.$deployName = <name of deployment> $vmName = <name of confidential VM> $cvmArmTemplate = <name of confidential VM ARM template file> $cvmParameterFile = <name of confidential VM parameter file> az deployment group create ` -g $resourceGroup ` -n $deployName ` -f $cvmArmTemplate ` -p $cvmParameterFile ` -p diskEncryptionSetId=$desID ` -p vmName=$vmName
Stellen Sie eine Verbindung mit Ihrer vertraulichen VM her, um sicherzustellen, dass die Erstellung erfolgreich war.