Azure Confidential VM のカスタム イメージを作成する方法
適用対象: ✔️ Linux VM
この 「ハウツー」 では、Azure コマンド ライン インターフェイス (Azure CLI) を使用して、Azure に機密仮想マシン (機密 VM) のカスタム イメージを作成する方法について説明します。 Azure CLI は、コマンド ラインまたはスクリプトで Azure リソースを作成および管理するために使用します。
カスタム イメージを作成すると、要件を満たす特定のソフトウェア、設定、セキュリティ対策を使用して機密 VM を事前設定できます。 機密 VM と互換性 のない Ubuntu イメージを持ち込む場合は、次の手順に従って、イメージの最小要件を確認できます。
前提条件
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.0.30 以降が必要です。 バージョンを確認するには、az --version
を実行します。 インストールまたはアップグレードする必要がある場合は、Azure CLI のインストールに関するページを参照してください。
リソース グループを作成する
az group create コマンドを使用して、リソース グループを作成します。 Azure リソース グループとは、Azure リソースのデプロイと管理に使用する論理コンテナーです。
Note
機密 VM は、すべての場所で使用できるわけではありません。 現在サポートされている場所については、Azure リージョンで利用できる VM 製品を参照してください。
az group create --name $resourceGroupName --location eastus
Azure Confidential VM のカスタム イメージを作成する
Azure でサポートされているイメージ の一覧から選択した Ubuntu イメージを使用して 仮想マシンを作成します。
カーネルのバージョンが 5.15.0-1037-azure 以上であることを確認します。 VM に接続した後、"uname -r" を使用してカーネルのバージョンを確認できます。 ここでは、イメージに自由に変更を加えることができます。
仮想マシンの割り当てを解除します。
az vm deallocate --name $vmname --resource-group $resourceGroupName
OS ディスクの共有アクセス トークン (SAS トークン) を作成し、変数に保存します。 この OS ディスクは、機密 VM と同じリソース グループ内にある必要はありません。
disk_name=$(az vm show --name $vmname --resource-group $resourceGroupName | jq -r .storageProfile.osDisk.name) disk_url=$(az disk grant-access --duration-in-seconds 3600 --name $disk_name --resource-group $resourceGroupName | jq -r .accessSas)
エクスポートされたディスクを保存するストレージ アカウントを作成する
- ストレージ アカウントを作成します。
az storage account create --resource-group ${resourceGroupName} --name ${storageAccountName} --location $region --sku "Standard_LRS"
- ストレージ アカウント内にコンテナーを作成します。
az storage container create --name $storageContainerName --account-name $storageAccountName --resource-group $resourceGroupName
- ストレージ コンテナー への読み取り共有用のアクセス トークン (SAS トークン) を生成し、変数に保存します。
container_sas=$(az storage container generate-sas --name $storageContainerName --account-name $storageAccountName --auth-mode key --expiry 2024-01-01 --https-only --permissions dlrw -o tsv)
- azcopy を使用して、OS ディスクをストレージ コンテナーにコピーします。
blob_url="https://${storageAccountName}.blob.core.windows.net/$storageContainerName/$referenceVHD" azcopy copy "$disk_url" "${blob_url}?${container_sas}"
サポートされている機密イメージを作成する
- Shared Image Gallery を作成します。
az sig create --resource-group $resourceGroupName --gallery-name $galleryName
- 機密 VM でサポートされている 、Shared Image Gallery (SIG) の定義を作成します。 ギャラリー イメージの定義、SIG パブリッシャー、SKU の新しい名前を設定します。
az sig image-definition create --resource-group $resourceGroupName --location $region --gallery-name $galleryName --gallery-image-definition $imageDefinitionName --publisher $sigPublisherName --offer ubuntu --sku $sigSkuName --os-type Linux --os-state specialized --hyper-v-generation V2 --features SecurityType=ConfidentialVMSupported
- ストレージ アカウント ID を取得します。
storageAccountId=$(az storage account show --name $storageAccountName --resource-group $resourceGroupName | jq -r .id)
- SIG イメージ バージョンを作成します。
az sig image-version create --resource-group $resourceGroupName --gallery-name $galleryName --gallery-image-definition $imageDefinitionName --gallery-image-version $galleryImageVersion --os-vhd-storage-account $storageAccountId --os-vhd-uri $blob_url
- 前の手順で作成した SIG イメージ バージョンの ID を保存します。
galleryImageId=$(az sig image-version show --gallery-image-definition $imageDefinitionName --gallery-image-version $galleryImageVersion --gallery-name $galleryName --resource-group $resourceGroupName | jq -r .id)
機密 VM を作成する
- az vm create コマンドで VM を作成します。 詳細については、セキュア ブートと vTPM に関するページを参照してください。 ディスク暗号化の詳細については、機密 OS ディスクの暗号化に関するページを参照してください。 現在、機密 VM では、 DC シリーズ と EC シリーズの VM サイズがサポートされています。
az vm create \ --resource-group $resourceGroupName \ --name $cvmname \ --size Standard_DC4as_v5 \ --enable-vtpm true \ --enable-secure-boot true \ --image $galleryImageId \ --public-ip-sku Standard \ --security-type ConfidentialVM \ --os-disk-security-encryption-type VMGuestStateOnly \ --specialized