快速入門:使用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 無法在所有位置使用。 如需目前支援的位置,請參閱 Azure 區域提供哪些 VM 產品。

    $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 為基礎的映像,客戶可以選擇 NonPersistedTPM 使用暫時 vTPM 部署的安全性類型。 針對安全性類型,NonPersistedTPM請在範本檔案中使用最低 “apiVersion”: “2023-09-01”。Microsoft.Compute/virtualMachines

  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 授與租使用者

    針對此步驟,您必須是全域 管理員,或需要具有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"
    
  4. 設定您的 Azure 金鑰保存庫。 如需如何改用 Azure 金鑰保存庫 受控 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與和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
      
  5. (選擇性)如果您不想使用 Azure 金鑰保存庫,您可以改為建立 Azure 金鑰保存庫 受控 HSM。

    1. 請遵循快速入門來建立 Azure 金鑰保存庫 受控 HSM,以布建和啟用 Azure 金鑰保存庫 受控 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 金鑰保存庫 建立新的金鑰。 如需如何改用 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.jsonDES)。

      $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,以確保建立成功。

下一步