快速入門:使用 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_v6 \
  --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 進階版。

  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。 在定價層中,選取 Premium(包含對 HSM 支援金鑰的支援)。 請確定您有此金鑰儲存庫中的擁有者角色。
az keyvault create -n keyVaultName -g myResourceGroup --enabled-for-disk-encryption true --sku premium --enable-purge-protection true --enable-rbac-authorization false
  1. 授與 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 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

注意

在有新建置的區域中,使用 --default-cvm-policy 旗標時,MAA (Microsoft Azure 證明) 端點可能無法使用。 作為一個變通方法,您可以使用以下 PowerShell 腳本取得區域性的 MAA 端點網址:

$sub = "<subscription-id>"
az account set --subscription $sub
$token = Get-AzAccessToken
$region = "<region-name>"
$url = "https://management.azure.com/subscriptions/$sub/providers/Microsoft.Attestation/Locations/$region/defaultProvider?api-version=2021-06-01"
$r = Invoke-WebRequest -Uri $url -Method Get -Headers @{'Authorization' = 'Bearer ' + $token.Token}
$d = $r.content | ConvertFrom-Json
$d.properties.attestUri

將 <subscription-id> 替換為您的 Azure 訂用帳戶 ID,並將 <region-name> 替換為目標部署區域。

  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. 使用磁碟加密設定識別碼來建立虛擬機器。
$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 .

下一步