クイック スタート: ARM テンプレートを使用してコンフィデンシャル VM をデプロイする

ARM 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> をサブスクリプション ID で置き換えます。 前提条件を満たすサブスクリプションを使用してください。

    az account set --subscription <subscription-id>
    
  3. コンフィデンシャル VM の変数を設定します。 デプロイ名 ($deployName)、リソース グループ ($resourceGroup)、VM 名 ($vmName)、および Azure リージョン ( $region) を指定します。 サンプル値は独自の情報に置き換えてください。

    Note

    機密 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 テンプレートとカスタム パラメーター ファイルを使用して Azure に VM を配置する。 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) を構成します。 OS ディスクのコンフィデンシャル暗号化を使用しない場合は、VMGuestStateOnly を選択します。 または、プラットフォーム マネージド キーを使用する OS ディスクのコンフィデンシャル暗号化の場合は、DiskWithVMGuestState を選択します。 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>
    }
  }
}

Note

osImageName 値を適宜置き換えます。

カスタマー マネージド キーによる OS ディスクのコンフィデンシャル暗号化を使用してコンフィデンシャル VM テンプレートをデプロイする

  1. Azure CLI で Azure アカウントにサインインします。

    az login
    
  2. Azure サブスクリプションを設定します。 <subscription-id> をサブスクリプション 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 キー コンテナーをセットアップします。 代わりに Azure Key Vault マネージド HSM を使用する方法については、次のステップを参照してください。

    1. キー コンテナー用のリソース グループを作成します。 キー コンテナー インスタンスとコンフィデンシャル VM は、同じ Azure リージョンに存在する必要があります。

      $resourceGroup = <key vault resource group>
      $region = <Azure region>
      az group create --name $resourceGroup --location $region
      
    2. Premium SKU を使用してキー コンテナー インスタンスを作成し、適当なリージョンを選択します。 Standard SKU はサポートされていません。

      $KeyVault = <name of key vault>
      az keyvault create --name $KeyVault --resource-group $resourceGroup --location $region --sku Premium --enable-purge-protection
      
    3. 自分にこのキー コンテナーでの所有者ロールがあることを確認します。

    4. キー コンテナーの getrelease を行うためのアクセス許可を Confidential VM Orchestrator に付与します。

      $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 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. マネージド HSM に対するアクセス許可を Confidential VM Orchestrator に付与します。

      $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 のリソース ID を取得します。

      $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 に接続して、作成が成功したことを確認します。

次のステップ