快速入門:使用 Azure CLI 建立機密 VM
適用於:✔️ Linux VM ✔️ Windows VM
本快速入門示範如何使用 Azure 命令列介面 (Azure CLI) 在 Azure 中部署機密虛擬機器 (機密 VM)。 Azure CLI 可用來透過命令列或指令碼建立和管理 Azure 資源。
必要條件
如果您沒有 Azure 訂用帳戶,請在開始前建立免費 Azure 帳戶。
啟動 Azure Cloud Shell
Azure Cloud Shell 是免費的互動式 Shell,可讓您用來執行本文中的步驟。 它具有預先安裝和設定的共用 Azure 工具,可與您的帳戶搭配使用。
若要開啟 Cloud Shell,只要選取程式碼區塊右上角的 [試試看] 即可。 您也可以移至 https://shell.azure.com/bash,在另一個瀏覽器索引標籤中開啟 Cloud Shell。 選取 [複製] 即可複製程式碼區塊,將它貼到 Cloud Shell 中,然後選取 Enter 鍵加以執行。
如果您偏好在本機安裝和使用 CLI,本快速入門需要有 Azure CLI 2.38.0 版或更新版本。 執行 az--version
以尋找版本。 如果您需要安裝或升級,請參閱安裝 Azure CLI。
建立資源群組
使用 az group create 命令來建立資源群組。 Azure 資源群組是在其中部署與管理 Azure 資源的邏輯容器。 下列範例會在 northeurope 位置建立名為 myResourceGroup 的資源群組:
注意
機密 VM 不一定在所有位置都能使用。 如需瞭解目前支援的位置,請參閱 Azure 區域提供哪些 VM 產品。
az group create --name myResourceGroup --location northeurope
使用平台代控金鑰建立機密虛擬機器
使用 az vm create 命令來建立 VM。
下列範例會建立名為 myVM 的 VM,並新增名為 azureuser 的使用者帳戶。 --generate-ssh-keys
參數用來自動產生 SSH 金鑰,並將它放在預設金鑰位置 (~/.ssh)。 若要改為使用一組特定金鑰,請使用 --ssh-key-values
選項。
針對 size
,選取機密 VM 大小。 如需詳細資訊,請參閱支援的機密 VM 系列。
選取 VMGuestStateOnly
表示沒有 OS 磁碟機密加密。 或者,選擇 DiskWithVMGuestState
表示使用平台代控金鑰來進行 OS 磁碟機密加密。 預設會啟用安全開機,但對於 VMGuestStateOnly
是選擇性的。 如需詳細資訊,請參閱安全開機和 vTPM。 如需有關磁碟加密和主機加密的詳細資訊,請參閱機密 OS 磁碟加密和主機加密。
az vm create \
--resource-group myResourceGroup \
--name myVM \
--size Standard_DC4es_v5 \
--admin-username <azure-username> \
--admin-password <azure-password> \
--enable-vtpm true \
--image "Canonical:0001-com-ubuntu-confidential-vm-jammy:22_04-lts-cvm:latest" \
--public-ip-sku Standard \
--security-type ConfidentialVM \
--os-disk-security-encryption-type VMGuestStateOnly \
--enable-secure-boot true
建立虛擬機器和支援資源需要幾分鐘的時間。 下列範例輸出顯示 VM 建立作業成功。
{
"fqdns": "",
"id": "/subscriptions/<guid>/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/myVM",
"location": "northeurope",
"macAddress": "<MAC-address>",
"powerState": "VM running",
"privateIpAddress": "10.20.255.255",
"publicIpAddress": "192.168.255.255",
"resourceGroup": "myResourceGroup",
"zones": ""
}
記下 publicIpAddress
以供稍後使用。
使用客戶自控金鑰建立機密虛擬機器
若要建立機密磁碟加密集,您有兩個選項:使用 Azure Key Vault 或 Azure Key Vault 受控硬體安全模組 (HSM)。 根據您的安全性和合規性需求,您可以選擇任一選項。 不過,請務必注意,不支援標準 SKU。 下列範例使用 Azure Key Vault 進階版。
- 將機密 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"
- 使用 az keyvault create 命令建立 Azure Key Vault。 針對定價層,選取 [進階 (包含支援 HSM 支援的金鑰)]。 請確定您有此金鑰儲存庫中的擁有者角色。
az keyvault create -n keyVaultName -g myResourceGroup --enabled-for-disk-encryption true --sku premium --enable-purge-protection true --enable-rbac-authorization false
- 授與
get
和release
金鑰保存庫Confidential VM Orchestrator
許可權。
$cvmAgent = az ad sp show --id "bf7b6499-ff71-4aa2-97a4-f372087be7f0" | Out-String | ConvertFrom-Json
az keyvault set-policy --name keyVaultName --object-id $cvmAgent.Id --key-permissions get release
- 使用 az keyvault key create 在金鑰保存庫中建立金鑰。 針對金鑰類型,請使用 RSA-HSM。
az keyvault key create --name mykey --vault-name keyVaultName --default-cvm-policy --exportable --kty RSA-HSM
- 使用 az disk-encryption-set create 建立磁碟加密集。 將加密型態設定為
ConfidentialVmEncryptedWithCustomerKey
。
$keyVaultKeyUrl=(az keyvault key show --vault-name keyVaultName --name mykey--query [key.kid] -o tsv)
az disk-encryption-set create --resource-group myResourceGroup --name diskEncryptionSetName --key-url $keyVaultKeyUrl --encryption-type ConfidentialVmEncryptedWithCustomerKey
- 使用 az key vault set-policy,將磁碟加密集資源存取權授與金鑰保存庫。
$desIdentity=(az disk-encryption-set show -n diskEncryptionSetName -g myResourceGroup --query [identity.principalId] -o tsv)
az keyvault set-policy -n keyVaultName -g myResourceGroup --object-id $desIdentity --key-permissions wrapkey unwrapkey get
- 使用磁碟加密集識別碼來建立 VM。
$diskEncryptionSetID=(az disk-encryption-set show -n diskEncryptionSetName -g myResourceGroup --query [id] -o tsv)
- 使用 az vm create 命令來建立 VM。 選擇 [
DiskWithVMGuestState
],以使用客戶自控金鑰進行 OS 磁碟機密加密。 啟用安全開機是選擇性的,但建議啟用。 如需詳細資訊,請參閱安全開機和 vTPM。 如需磁碟加密的詳細資訊,請參閱機密 OS 磁碟加密。
az vm create \
--resource-group myResourceGroup \
--name myVM \
--size Standard_DC4as_v5 \
--admin-username <azure-user> \
--admin-password <azure-password> \
--enable-vtpm true \
--enable-secure-boot true \
--image "Canonical:0001-com-ubuntu-confidential-vm-focal:20_04-lts-cvm:latest" \
--public-ip-sku Standard \
--security-type ConfidentialVM \
--os-disk-security-encryption-type DiskWithVMGuestState \
--os-disk-secure-vm-disk-encryption-set $diskEncryptionSetID \
建立虛擬機器和支援資源需要幾分鐘的時間。 下列範例輸出顯示 VM 建立作業成功。
{
"fqdns": "",
"id": "/subscriptions/<guid>/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/myVM",
"location": "eastus",
"macAddress": "<MAC-address>",
"powerState": "VM running",
"privateIpAddress": "10.20.255.255",
"publicIpAddress": "192.168.255.255",
"resourceGroup": "myResourceGroup",
"zones": ""
}
記下 publicIpAddress
以供稍後使用。
透過 Microsoft Azure 證明範例應用程式連線並證明 AMD 型 CVM
若要使用 C++ 中的範例應用程式搭配客體證明 API 使用,請使用下列步驟。 此範例使用 Linux 機密虛擬機器。 針對 Windows,請參閱適用於 Windows 的建置指示。
使用公用 IP 位址登入您的機密 VM。
安裝
build-essential
套件。 此套件會安裝編譯範例應用程式所需的一切。
sudo apt-get install build-essential
- 安裝以下套件。
sudo apt-get install libcurl4-openssl-dev
sudo apt-get install libjsoncpp-dev
sudo apt-get install libboost-all-dev
sudo apt install nlohmann-json3-dev
下載證明套件。
安裝證明套件。 確定將
<version>
取代為您下載的版本。
sudo dpkg -i azguestattestation1_<latest-version>_amd64.deb
- 安裝上述套件之後,請使用下列步驟來建置和執行應用程式。
cd confidential-computing-cvm-guest-attestation/cvm-attestation-sample-app
sudo cmake . && make
sudo ./AttestationClient -o token
- 若要將 Web 權杖轉換成 JSON,請使用下列步驟。
sudo ./AttestationClient -o token>> /attestation_output
JWT=$(cat /attestation_output)
echo -n $JWT | cut -d "." -f 1 | base64 -d 2>/dev/null | jq .
echo -n $JWT | cut -d "." -f 2 | base64 -d 2>/dev/null | jq .