Share via


快速入門:使用 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 產品

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 \
  --encryption-at-host \

建立虛擬機器和支援資源需要幾分鐘的時間。 下列範例輸出顯示 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 VaultAzure Key Vault 受控硬體安全模組 (HSM)。 根據您的安全性和合規性需求,您可以選擇任一選項。 不過,請務必注意,不支援標準 SKU。 下列範例使用 Azure Key Vault 進階版。

  1. 將機密 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"
  1. 使用 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
  1. 授與 Confidential VM Orchestrator 許可權,以 getrelease 金鑰保存庫。
$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
  1. 使用 az keyvault key create 在金鑰保存庫中建立金鑰。 針對金鑰類型,請使用 RSA-HSM。
az keyvault key create --name mykey --vault-name keyVaultName --default-cvm-policy --exportable --kty RSA-HSM
  1. 使用 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
  1. 使用 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
  1. 使用磁碟加密集識別碼來建立 VM。
$diskEncryptionSetID=(az disk-encryption-set show -n diskEncryptionSetName -g myResourceGroup --query [id] -o tsv)
  1. 使用 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 的建置指示

  1. 使用公用 IP 位址登入您的機密 VM。

  2. 複製範例 Linux 應用程式

  3. 安裝 build-essential 套件。 此套件會安裝編譯範例應用程式所需的一切。

sudo apt-get install build-essential
  1. 安裝以下套件。
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
  1. 下載證明套件

  2. 安裝證明套件。 確定將 <version> 取代為您下載的版本。

sudo dpkg -i azguestattestation1_<latest-version>_amd64.deb
  1. 安裝上述套件之後,請使用下列步驟來建置和執行應用程式。
cd confidential-computing-cvm-guest-attestation/cvm-attestation-sample-app
sudo cmake . && make
sudo ./AttestationClient -o token
  1. 若要將 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 .

下一步