快速入門:使用 ARM 範本部署機密 VM
您可以使用 Azure Resource Manager 範本 (ARM 範本) 快速建立 Azure 機密 VM。 機密 VM 在 AMD SEV-SNP 支援的 AMD 處理器和 Intel TDX 支援的 Intel 處理器上執行,以實現 VM 記憶體加密和隔離。 如需詳細資訊,請參閱機密 VM 概觀。
本教學課程介紹如何使用自訂設定部署機密 VM。
必要條件
- Azure 訂用帳戶。 免費試用帳戶無法存取本教學課程中使用的 VM。 其中一個選項是使用隨用隨付訂用帳戶。
- 如果您要從 Azure CLI 部署,請安裝 PowerShell 並安裝 Azure CLI。
使用 Azure CLI 部署機密 VM 範本
您可以透過平台代控金鑰來部署內含選用 OS 磁碟機密加密的機密 VM 範本。
若要透過 Azure CLI 使用 ARM 範本建立及部署機密 VM,請執行下列動作:
在 Azure CLI 中登入 Azure 帳戶。
az login
設定您的 Azure 訂用帳戶 將
<subscription-id>
取代為您的訂用帳戶識別碼。 請務必使用符合必要條件的訂用帳戶。az account set --subscription <subscription-id>
設定機密 VM 的變數。 提供部署名稱 (
$deployName
)、資源群組 ($resourceGroup
)、VM 名稱 ($vmName
) 和 Azure 區域 ($region
)。 使用您自己的資訊取代範例值。注意
機密 VM 不一定在所有位置都能使用。 如需了解目前支援的位置,請參閱可用的 VM 產品 (依 Azure 區域)。
$deployName="<deployment-name>" $resourceGroup="<resource-group-name>" $vmName= "<confidential-vm-name>" $region="<region-name>"
如果您指定的資源群組不存在,請建立有該名稱的資源群組。
az group create -n $resourceGroup -l $region
使用 ARM 範本搭配自訂參數檔案和 範本檔案,將您的 VM 部署至 Azure。
az deployment group create ` -g $resourceGroup ` -n $deployName ` -u "<json-template-file-path>" ` -p "<json-parameter-file-path>" ` -p vmLocation=$region ` vmName=$vmName
定義自訂參數檔案
透過 Azure 命令列介面 (Azure CLI) 建立機密 VM 時,您必須定義自訂參數檔案。 若要建立自訂 JSON 參數檔案,請執行下列動作:
透過 Azure CLI 登入 Azure 帳戶。
建立 JSON 參數檔案。 例如:
azuredeploy.parameters.json
。根據您使用的 OS 映像,將範例 Windows 參數檔案或範例 Linux 參數檔案複製到參數檔案中。
視需要編輯參數檔案中的 JSON 程式碼。 例如,更新 OS 映像名稱 (
osImageName
) 或系統管理員使用者名稱 (adminUsername
)。設定安全性類型設定 (
securityType
)。 選擇VMGuestStateOnly
表示沒有 OS 磁碟機密加密。 或者,選擇DiskWithVMGuestState
表示使用平台代控金鑰來進行 OS 磁碟機密加密。 針對僅限 Intel TDX SKU 和以 Linux 為基礎的映像,客戶可以選擇使用暫時 vTPM 部署NonPersistedTPM
安全性類型。 針對NonPersistedTPM
安全性類型,請在範本檔案中使用Microsoft.Compute/virtualMachines
下使用最低的「apiVersion」:「2023-09-01」。儲存參數檔案。
範例 Windows 參數檔案
使用此範例為 Windows 型機密 VM 建立自訂參數檔案。
{
"$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>"
}
}
}
範例 Linux 參數檔案
使用此範例為 Linux 型機密 VM 建立自訂參數檔案。
{
"$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>
}
}
}
注意
據以取代 osImageName 值。
透過客戶自控金鑰來部署有 OS 磁碟機密加密的機密 VM 範本
透過 Azure CLI 登入 Azure 帳戶。
az login
設定您的 Azure 訂用帳戶 將
<subscription-id>
取代為您的訂用帳戶識別碼。 請務必使用符合必要條件的訂用帳戶。az account set --subscription <subscription-id>
將機密 VM 服務主體
Confidential VM Orchestrator
授與租用戶若要執行此步驟,您必須是全域管理員,或需要具有「使用者存取系統管理員」RBAC 角色。 安裝 Microsoft Graph SDK 以執行下列命令。
Connect-Graph -Tenant "your tenant ID" Application.ReadWrite.All New-MgServicePrincipal -AppId bf7b6499-ff71-4aa2-97a4-f372087be7f0 -DisplayName "Confidential VM Orchestrator"
設定 Azure Key Vault。 如需如何改用 Azure Key Vault 受控 HSM 的詳細資訊,請參閱下一步。
為您的金鑰保存庫建立資源組。 您的金鑰保存庫執行個體和機密 VM 必須位於相同的 Azure 區域中。
$resourceGroup = <key vault resource group> $region = <Azure region> az group create --name $resourceGroup --location $region
建立擁有高階 SKU 的金鑰保存庫執行個體,然後選取您慣用的區域。 不支援標準 SKU。
$KeyVault = <name of key vault> az keyvault create --name $KeyVault --resource-group $resourceGroup --location $region --sku Premium --enable-purge-protection
請確定您有此金鑰保存庫的 [擁有者] 角色。
授與
Confidential VM Orchestrator
權限,以get
和release
金鑰保存庫。$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
(選用) 如果您不想使用 Azure Key Vault,則可以改為建立 Azure Key Vault 受控 HSM。
請依照建立 Azure Key Vault 受控 HSM 快速入門,佈建和啟動 Azure Key Vault 受控 HSM。
在 Azure 受控 HSM 上啟用清除保護。 必須執行此步驟,才能啟用主要版本。
az keyvault update-hsm --subscription $subscriptionId -g $resourceGroup --hsm-name $hsm --enable-purge-protection true
將
Confidential VM Orchestrator
權限授與受控 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
使用 Azure Key Vault 建立新的金鑰。 如需如何改用 Azure 受控 HSM 的詳細資訊,請參閱下一步。
準備主要版本原則,並將其下載到您的本地磁碟。
建立新的金鑰。
$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"
取得您所建立金鑰的相關資訊。
$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
使用 DES ARM 範本部署磁碟加密集 (
deployDES.json
DES)。$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
將金鑰存取權指派給 DES 檔案。
$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
(選用) 從 Azure 受控 HSM 建立新金鑰。
準備主要版本原則,並將其下載到您的本地磁碟。
建立新的金鑰。
$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"
取得您所建立金鑰的相關資訊。
$encryptionKeyURL = ((az keyvault key show --hsm-name $hsm --name $KeyName) | ConvertFrom-Json).key.kid
部署 DES。
$desName = <name of DES> az disk-encryption-set create -n $desName ` -g $resourceGroup ` --key-url $encryptionKeyURL
將金鑰存取權指派給 DES。
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
使用客戶自控金鑰來部署機密 VM。
取得 DES 的資源識別碼。
$desID = (az disk-encryption-set show -n $desName -g $resourceGroup --query [id] -o tsv)
使用 Intel TDX 的機密 VM ARM 範本和 部署參數檔案 (例如,
azuredeploy.parameters.win2022.json
)搭配客戶管理的密鑰來部署機密 VM。$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
連線到機密 VM,以確定順利建立。