クイック スタート: ARM テンプレートを使用してコンフィデンシャル VM をデプロイする
ARM Azure Resource Manager のテンプレート (ARM テンプレート) を使用して、Azure コンフィデンシャル VM を短時間で作成することができます。 コンフィデンシャル VM は、AMD SEV-SNP によってサポートされる AMD プロセッサと、Intel TDX によってサポートされる Intel プロセッサの両方で実行でき、VM のメモリ暗号化と分離を実現します。 詳細については、コンフィデンシャル VM の概要を参照してください。
このチュートリアルでは、カスタム構成を使用したコンフィデンシャル VM のデプロイについて説明します。
前提条件
- Azure サブスクリプション。 無料試用版アカウントでは、このチュートリアルで使用されている VM にアクセスできません。 1 つの選択肢として、従量課金制サブスクリプションを使用する方法があります。
- Azure CLI からデプロイする場合は、PowerShell をインストール し、 Azure CLI をインストールします。
Azure CLI を使用したコンフィデンシャル VM テンプレートのデプロイ
プラットフォーム マネージド キーによるオプションの OS ディスク コンフィデンシャル暗号化を使用するコンフィデンシャル VM テンプレートをデプロイできます。
Azure CLI で ARM テンプレートを使用して、コンフィデンシャル VM を作成してデプロイするには:
Azure CLI の Azure アカウントにサインインします。
az login
Azure サブスクリプションを設定します。
<subscription-id>
をサブスクリプション ID で置き換えます。 前提条件を満たすサブスクリプションを使用してください。az account set --subscription <subscription-id>
コンフィデンシャル 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
ARM テンプレートをカスタム パラメーター ファイルとテンプレート ファイルと共に使用して VM を Azure にデプロイします。
az deployment group create ` -g $resourceGroup ` -n $deployName ` -u "<json-template-file-path>" ` -p "<json-parameter-file-path>" ` -p vmLocation=$region ` vmName=$vmName
カスタム パラメーター ファイルの定義
Azure コマンド ライン インターフェイス (Azure CLI) を使用してコンフィデンシャル VM を作成するときは、カスタム パラメーター ファイルを定義する必要があります。 カスタム JSON パラメーターファイルを作成するには、次のようにします。
Azure CLI で Azure アカウントにサインインします。
JSON パラメーター ファイルを作成します。 たとえば、「
azuredeploy.parameters.json
」のように入力します。使用している OS イメージに応じて、Windows パラメーター ファイルの例または Linux パラメーター ファイルの例を自分のパラメーター ファイルにコピーします。
必要に応じて、パラメーターファイルで JSON コードを編集します。 たとえば、OS イメージの名前 (
osImageName
) や管理者ユーザーの名前 (adminUsername
) を更新します。セキュリティの種類の設定 (
securityType
) を構成します。 OS ディスクのコンフィデンシャル暗号化を使用しない場合は、VMGuestStateOnly
を選択します。 または、プラットフォーム マネージド キーを使用する OS ディスクのコンフィデンシャル暗号化の場合は、DiskWithVMGuestState
を選択します。 Intel TDX SKU と Linux ベースのイメージの場合のみ、一時的な vTPM を使用してデプロイするセキュリティの種類NonPersistedTPM
を選択できます。 セキュリティの種類NonPersistedTPM
には、テンプレート ファイルのMicrosoft.Compute/virtualMachines
の下にある最小の "apiVersion": "2023-09-01" を使用します。パラメーター ファイルを保存します。
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 テンプレートをデプロイする
Azure CLI で Azure アカウントにサインインします。
az login
Azure サブスクリプションを設定します。
<subscription-id>
をサブスクリプション ID で置き換えます。 前提条件を満たすサブスクリプションを使用してください。az account set --subscription <subscription-id>
コンフィデンシャル 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"
お使いの Azure キー コンテナーをセットアップします。 代わりに Azure Key Vault マネージド HSM を使用する方法については、次のステップを参照してください。
キー コンテナー用のリソース グループを作成します。 キー コンテナー インスタンスとコンフィデンシャル VM は、同じ Azure リージョンに存在する必要があります。
$resourceGroup = <key vault resource group> $region = <Azure region> az group create --name $resourceGroup --location $region
Premium SKU を使用してキー コンテナー インスタンスを作成し、適当なリージョンを選択します。 Standard SKU はサポートされていません。
$KeyVault = <name of key vault> az keyvault create --name $KeyVault --resource-group $resourceGroup --location $region --sku Premium --enable-purge-protection
自分にこのキー コンテナーでの所有者ロールがあることを確認します。
キー コンテナーの
get
とrelease
を行うためのアクセス許可を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
(省略可能) Azure キー コンテナーを使用したくない場合は、代わりに Azure Key Vault マネージド HSM を作成できます。
Azure Key Vault マネージド HSM の作成に関するクイックスタートに従って、Azure Key Vault マネージド HSM をプロビジョニングしてアクティブにします。
Azure マネージド HSM で消去保護を有効にします。 このステップは、キーの解放を有効にするために必要です。
az keyvault update-hsm --subscription $subscriptionId -g $resourceGroup --hsm-name $hsm --enable-purge-protection true
マネージド 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
Azure Key Vault を使用して新しいキーを作成します。 代わりに Azure マネージド HSM を使用する方法については、次のステップを参照してください。
キー リリース ポリシーを準備して、ローカル ディスクにダウンロードします。
新しいキーを作成します。
$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"
作成したキーに関する情報を取得します。
$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
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
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
(省略可能) Azure マネージド HSM から新しいキーを作成します。
キー リリース ポリシーを準備して、ローカル ディスクにダウンロードします。
新しいキーを作成します。
$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"
作成したキーに関する情報を取得します。
$encryptionKeyURL = ((az keyvault key show --hsm-name $hsm --name $KeyName) | ConvertFrom-Json).key.kid
DES をデプロイします。
$desName = <name of DES> az disk-encryption-set create -n $desName ` -g $resourceGroup ` --key-url $encryptionKeyURL
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
カスタマー マネージド キーを使用してコンフィデンシャル VM をデプロイします。
DES のリソース ID を取得します。
$desID = (az disk-encryption-set show -n $desName -g $resourceGroup --query [id] -o tsv)
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
コンフィデンシャル VM に接続して、作成が成功したことを確認します。