Share via


快速入門:使用 ARM 範本部署機密 VM

您可以使用 Azure Resource Manager 範本 (ARM 範本) 快速建立 Azure 機密 VM。 機密 VM 在 AMD SEV-SNP 支援的 AMD 處理器和 Intel TDX 支援的 Intel 處理器上執行,以實現 VM 記憶體加密和隔離。 如需詳細資訊,請參閱機密 VM 概觀

本教學課程介紹如何使用自訂設定部署機密 VM。

必要條件

使用 Azure CLI 部署機密 VM 範本

您可以透過平台代控金鑰來部署內含選用 OS 磁碟機密加密的機密 VM 範本。

若要透過 Azure CLI 使用 ARM 範本建立及部署機密 VM,請執行下列動作:

  1. 在 Azure CLI 中登入 Azure 帳戶。

    az login
    
  2. 設定您的 Azure 訂用帳戶 將 <subscription-id> 取代為您的訂用帳戶識別碼。 請務必使用符合必要條件的訂用帳戶。

    az account set --subscription <subscription-id>
    
  3. 設定機密 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
    
  4. 使用附有自訂參數檔案的 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 參數檔案,請執行下列動作:

  1. 透過 Azure CLI 登入 Azure 帳戶。

  2. 建立 JSON 參數檔案。 例如: azuredeploy.parameters.json

  3. 根據您使用的 OS 映像,將範例 Windows 參數檔案範例 Linux 參數檔案複製到參數檔案中。

  4. 視需要編輯參數檔案中的 JSON 程式碼。 例如,更新 OS 映像名稱 (osImageName) 或系統管理員使用者名稱 (adminUsername)。

  5. 設定安全性類型設定 (securityType)。 選擇 VMGuestStateOnly 表示沒有 OS 磁碟機密加密。 或者,選擇 DiskWithVMGuestState 表示使用平台代控金鑰來進行 OS 磁碟機密加密。 針對僅限 Intel TDX SKU 和以 Linux 為基礎的映像,客戶可以選擇使用暫時 vTPM 部署 NonPersistedTPM 安全性類型。 針對 NonPersistedTPM 安全性類型,請在範本檔案中使用 Microsoft.Compute/virtualMachines 下使用最低的「apiVersion」:「2023-09-01」。

  6. 儲存參數檔案。

範例 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 範本

  1. 透過 Azure CLI 登入 Azure 帳戶。

    az login
    
  2. 設定您的 Azure 訂用帳戶 將 <subscription-id> 取代為您的訂用帳戶識別碼。 請務必使用符合必要條件的訂用帳戶。

    az account set --subscription <subscription-id>
    
  3. 將機密 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"
    
  4. 設定 Azure Key Vault。 如需如何改用 Azure Key Vault 受控 HSM 的詳細資訊,請參閱下一步。

    1. 為您的金鑰保存庫建立資源組。 您的金鑰保存庫執行個體和機密 VM 必須位於相同的 Azure 區域中。

      $resourceGroup = <key vault resource group>
      $region = <Azure region>
      az group create --name $resourceGroup --location $region
      
    2. 建立擁有高階 SKU 的金鑰保存庫執行個體,然後選取您慣用的區域。 不支援標準 SKU。

      $KeyVault = <name of key vault>
      az keyvault create --name $KeyVault --resource-group $resourceGroup --location $region --sku Premium --enable-purge-protection
      
    3. 請確定您有此金鑰保存庫的 [擁有者] 角色。

    4. 授與 Confidential VM Orchestrator 權限,以 getrelease 金鑰保存庫。

      $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
      
  5. (選用) 如果您不想使用 Azure Key Vault,則可以改為建立 Azure Key Vault 受控 HSM。

    1. 請依照建立 Azure Key Vault 受控 HSM 快速入門,佈建和啟動 Azure Key Vault 受控 HSM。

    2. 在 Azure 受控 HSM 上啟用清除保護。 必須執行此步驟,才能啟用主要版本。

      az keyvault update-hsm --subscription $subscriptionId -g $resourceGroup --hsm-name $hsm --enable-purge-protection true
      
    3. 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
      
  6. 使用 Azure Key Vault 建立新的金鑰。 如需如何改用 Azure 受控 HSM 的詳細資訊,請參閱下一步。

    1. 準備主要版本原則,並將其下載到您的本地磁碟。

    2. 建立新的金鑰。

      $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"
      
    3. 取得您所建立金鑰的相關資訊。

      $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
      
    4. 使用 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
      
    5. 將金鑰存取權指派給 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
      
  7. (選用) 從 Azure 受控 HSM 建立新金鑰。

    1. 準備主要版本原則,並將其下載到您的本地磁碟。

    2. 建立新的金鑰。

      $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"
      
    3. 取得您所建立金鑰的相關資訊。

      $encryptionKeyURL = ((az keyvault key show --hsm-name $hsm --name $KeyName) | ConvertFrom-Json).key.kid
      
    4. 部署 DES。

      $desName = <name of DES>
      az disk-encryption-set create -n $desName `
       -g $resourceGroup `
       --key-url $encryptionKeyURL
      
    5. 將金鑰存取權指派給 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
      
  8. 使用客戶自控金鑰來部署機密 VM。

    1. 取得 DES 的資源識別碼。

      $desID = (az disk-encryption-set show -n $desName -g $resourceGroup --query [id] -o tsv)
      
    2. 使用 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
      
  9. 連線到機密 VM,以確定順利建立。

下一步