快速入門:使用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 無法在所有位置使用。 如需目前支援的位置,請參閱 Azure 區域提供哪些 VM 產品。
$deployName="<deployment-name>" $resourceGroup="<resource-group-name>" $vmName= "<confidential-vm-name>" $region="<region-name>"
如果您指定的資源群組不存在,請使用該名稱建立資源群組。
az group create -n $resourceGroup -l $region
使用 ARM 範本搭配自訂參數檔案,將您的 VM 部署至 Azure。 針對 TDX 部署,以下是範例範本: https://aka.ms/TDXtemplate。
az deployment group create ` -g $resourceGroup ` -n $deployName ` -u "https://aka.ms/CVMTemplate" ` -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 為基礎的映像,客戶可以選擇NonPersistedTPM
使用暫時 vTPM 部署的安全性類型。 針對安全性類型,NonPersistedTPM
請在範本檔案中使用最低 “apiVersion”: “2023-09-01”。Microsoft.Compute/virtualMachines
儲存您的參數檔案。
範例 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
授與租使用者針對此步驟,您必須是全域 管理員,或需要具有User Access 管理員 istrator 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 金鑰保存庫。 如需如何改用 Azure 金鑰保存庫 受控 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
與和release
金鑰保存庫的許可權get
。$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 金鑰保存庫,您可以改為建立 Azure 金鑰保存庫 受控 HSM。
請遵循快速入門來建立 Azure 金鑰保存庫 受控 HSM,以布建和啟用 Azure 金鑰保存庫 受控 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 金鑰保存庫 建立新的金鑰。 如需如何改用 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)
使用 AMD SEV-SNP 或 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,以確保建立成功。