クイックスタート: Azure CLI を使用して機密 VM を作成する
適用対象: ✔️ Linux VM ✔️ Windows VM
このクイックスタートでは、Azure コマンド ライン インターフェイス (Azure CLI) を使用して、Azure に機密仮想マシン (機密 VM) をデプロイする方法について説明します。 Azure CLI は、コマンド ラインまたはスクリプトで Azure リソースを作成および管理するために使用します。
前提条件
Azure サブスクリプションをお持ちでない場合は、開始する前に無料の Azure アカウントを作成してください。
Azure Cloud Shell を起動する
Azure Cloud Shell は無料のインタラクティブ シェルです。この記事の手順は、Azure Cloud Shell を使って実行することができます。 一般的な Azure ツールが事前にインストールされており、アカウントで使用できるように構成されています。
Cloud Shell を開くには、コード ブロックの右上隅にある [使ってみる] を選択します。 https://shell.azure.com/bash に移動して、別のブラウザー タブで Cloud Shell を開くこともできます。 [コピー] を選択してコードのブロックをコピーし、Cloud Shell に貼り付けてから、 [入力] を選択して実行します。
CLI をローカルにインストールして使用する場合、このクイックスタートでは、Azure CLI バージョン 2.38.0 以降が必要です。 バージョンを確認するには、az--version
を実行します。 インストールまたはアップグレードする必要がある場合は、Azure CLI のインストールに関するページを参照してください。
リソース グループを作成する
az group create コマンドを使用して、リソース グループを作成します。 Azure リソース グループとは、Azure リソースのデプロイと管理に使用する論理コンテナーです。 次の例では、myResourceGroup という名前のリソース グループを northeurope の場所に作成します。
Note
機密 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 ファミリに関する記事を参照してください。
OS ディスクのコンフィデンシャル暗号化を使用しない場合は、VMGuestStateOnly
を選択します。 または、プラットフォーム マネージド キーを使用する OS ディスクのコンフィデンシャル暗号化の場合は、DiskWithVMGuestState
を選択します。 セキュア ブートは既定で有効になっているが、VMGuestStateOnly
の場合は任意です。 詳細については、セキュア ブートと vTPM に関するページを参照してください。 ディスク暗号化とホストでの暗号化について、詳しくは「機密 OS ディスク暗号化」と「ホストでの暗号化」をご覧ください。
az vm create \
--resource-group myResourceGroup \
--name myVM \
--size Standard_DC4es_v5 \
--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 とサポートするリソースを作成するには数分かかります。 次の出力例では、成功した 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) を使用するという 2 つのオプションがあります。 セキュリティやコンプライアンスのニーズに基づいて、どちらかのオプションを選択できます。 ただし、Standard SKU はサポートされていないことに注意することが重要です。 次の例では、Azure Key Vault Premium を使用します。
- コンフィデンシャル 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"
- 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
- キー コンテナーの
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 keyVaultName --object-id $cvmAgent.Id --key-permissions get release
- az keyvault key create を使用して、キー コンテナー内にキーを作成します。 キーの種類として、RSA-HSM を使用します。
az keyvault key create --name mykey --vault-name keyVaultName --default-cvm-policy --exportable --kty RSA-HSM
- 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
- 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
- ディスク暗号化セット ID を使用して VM を作成します。
$diskEncryptionSetID=(az disk-encryption-set show -n diskEncryptionSetName -g myResourceGroup --query [id] -o tsv)
- az vm create コマンドで VM を作成します。 カスタマー マネージド キーを使用した OS ディスクの機密暗号化の場合は、
DiskWithVMGuestState
を選択します。 セキュア ブートの有効化は省略可能ですが、有効にすることをお勧めします。 詳細については、セキュア ブートと 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 とサポートするリソースを作成するには数分かかります。 次の出力例では、成功した 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 Attestation サンプル アプリを使用して AMD ベースの CVM を接続および証明する
ゲスト構成証明 API で使用する C++ のサンプル アプリケーションを使用するには、次の手順を使用します。 この例では、Linux 機密仮想マシンを使用します。 Windows の場合は、Windows のビルド手順を参照してください。
パブリック IP アドレスを使用して機密 VM にサインインします。
サンプル アプリケーションの複製。
build-essential
パッケージをインストールします。 このパッケージは、サンプル アプリケーションのコンパイルに必要なすべてのものをインストールします。
sudo apt-get install build-essential
- 次のパッケージをインストールします。
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
構成証明パッケージをダウンロード します。
構成証明パッケージをインストールします。
<version>
を、ダウンロードしたバージョンに置き換えてください。
sudo dpkg -i azguestattestation1_<latest-version>_amd64.deb
- 上のパッケージがインストールされたら、次の手順を使用してアプリをビルドおよび実行します。
cd confidential-computing-cvm-guest-attestation/cvm-attestation-sample-app
sudo cmake . && make
sudo ./AttestationClient -o token
- 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 .