特定の高度なシナリオでは、セキュア ブート キーをカスタマイズする必要があります。 セキュア ブート UEFI キーのカスタマイズを使用すると、イメージ内の統合拡張可能ファームウェア インターフェイス (UEFI) キー (PK、KEK、DB、DBX) を、セキュア ブート対応の Azure 仮想マシン (VM) (信頼された起動と機密 VM) 用に変更できます。 この機能を使用すると、UEFI キーを完全に置き換えたり、既定のキー データベースに追加したりできます。
セキュア ブート Azure VM がデプロイされると、ブート プロセス中に、UEFI、shim/bootloader、カーネル、カーネル モジュール/ドライバーなど、すべてのブート コンポーネントの署名が検証されます。 ブート コンポーネントの署名が信頼されたキー データベースのキーと一致せず、VM の起動に失敗した場合、検証は失敗します。 このエラーは、コンポーネントが信頼されたキー データベースに見つからないキーによって署名されている場合、署名キーが取り消されたキー データベースに一覧表示されている場合、またはコンポーネントが署名されていない場合に発生する可能性があります。 カスタム セキュア ブート UEFI キーを使用して、VM の正常な起動に必要な署名を指定できます。
UEFI キーのカスタマイズは、 Azure コンピューティング ギャラリー リソースを通じて提供されます。 現在、Marketplace イメージを使用してトラステッド起動 VM を作成している場合は、最初に Marketplace イメージを使用して Azure コンピューティング ギャラリー リソースを作成して UEFI キーを変更する必要があります。
注
UEFI キーのカスタマイズは、セキュア ブート テクノロジの内部動作に精通している上級のお客様向けです。
[前提条件]
UEFI キーをカスタマイズするには、次の Azure Compute Gallery リソースが必要です。
現在、UEFI キーのカスタマイズは REST API でのみ使用できます。
セキュリティの種類が TrustedLaunchSupported または TrustedLaunchAndConfidentialVmSupported に設定されている VM イメージ定義リソースに VM イメージ バージョン リソースをアタッチする必要があります。 イメージ定義リソースを作成する方法の詳細な手順については、「 イメージ定義とイメージ バージョンの作成」を参照してください。 VM イメージ定義リソースを作成するには、ギャラリー リソースも作成する必要があります。 Azure portal、PowerShell、CLI、または REST API を選択して、ギャラリーとイメージ定義のリソースを作成できます。
ARM テンプレート
汎用 ARM テンプレートは、イメージ バージョン リソースを作成するためのサンプルとして提供されます。 UEFI キーをカスタマイズするには、イメージ バージョン リソースに セキュリティ プロファイル ブロックを含める必要もあります。 「 シナリオ」セクション の各シナリオでは、 securityProfile ブロック内の内容について詳しく説明します。
{
"apiVersion": "2022-03-03",
"type": "Microsoft.Compute/galleries/images/versions",
"dependsOn": [
"[concat('Microsoft.Compute/galleries/', parameters('galleryName'), '/images/', parameters('imageDefinitionName'))]"
],
"name": "[concat(parameters('galleryName'), '/', parameters('imageDefinitionName'), '/', parameters('versionName'))]",
"location": "[parameters('location')]",
"properties": {
"publishingProfile": {
"replicaCount": "[parameters('defaultReplicaCount')]",
"targetRegions": "[parameters('regionReplications')]",
"excludeFromLatest": "[parameters('excludedFromLatest')]",
"replicationMode": "[parameters('replicationMode')]"
},
"storageProfile": {
"source": {
"id": "[parameters('sourceVmId')]"
}
},
"safetyProfile": {
"allowDeletionOfReplicatedLocations": "[parameters('allowDeletionOfReplicatedLocations')]"
},
"securityProfile": {}
},
"tags": {}
}
シナリオ
このセクションでは、一般的なシナリオに合わせて UEFI キーをカスタマイズする方法について説明します。
シナリオ 1: すべての UEFI キーを置き換える
このシナリオでは、信頼された起動 VM で使用可能なすべての既定のキー (PK、KEK、DB、DBX) を完全に置き換えます。
- PK、KEK、DB、DBX ごとに証明書やキーを作成します。 さまざまなオペレーティング システムの詳細な手順については、「 便利なリンク 」セクションを参照してください。
- 新しいイメージ バージョンを作成します。 次の securityProfile ARM テンプレート ブロックを、画像バージョンを作成するための 汎用 ARM テンプレート と一緒に使用します。
Base64 formatted certificate
とBase64 formatted sha256 hash
の JSON 値を実際の値に置き換えます。
"securityProfile": {
"uefiSettings": {
"signatureTemplateNames": [
"NoSignatureTemplate"
],
"additionalSignatures": {
"pk": {
"type": "x509",
"value": [
"Base64 formatted certificate"
]
},
"kek": [
{
"type": "x509",
"value": [
"Base64 formatted certificate"
]
}
],
"db": [
{
"type": "x509",
"value": [
"Base64 formatted certificate",
"Base64 formatted certificate"
]
}
],
"dbx": [
{
"type": "x509",
"value": [
"Base64 formatted certificate",
"Base64 formatted certificate"
]
},
{
"type": "sha256",
"value": [
"Base64 formatted sha256 hash",
"Base64 formatted sha256 hash"
]
}
]
}
}
}
- Azure Portal、PowerShell、CLI、または REST API を使用して、Azure コンピューティング ギャラリー リソースを使用して作成したのと同じソース イメージを使用して、信頼できる起動 VM を作成します。
- トラステッド起動 VM が 実行中 の状態になったら、 カスタム UEFI キーが UEFI キー データベースにあることを確認します。
シナリオ 2: 署名テンプレートに DB と DBX にキーを追加する
このシナリオでは、トラステッド起動 VM で使用できる既定値に DB キーと DBX キーを追加します。
- DB および DBX ごとに証明書やキーを作成します。 さまざまなオペレーティング システムの詳細な手順については、「 便利なリンク 」セクションを参照してください。
- 新しいイメージ バージョンを作成します。 イメージ バージョンを作成する際には、以下のsecurityProfile ARM テンプレート ブロックを汎用 ARM テンプレートで使用します。
Base64 formatted certificate
とBase64 formatted sha256 hash
の JSON 値を実際の値に置き換えます。
"securityProfile": {
"uefiSettings": {
"signatureTemplateNames": [
"MicrosoftUefiCertificateAuthorityTemplate"
],
"additionalSignatures": {
"db": [
{
"type": "x509",
"value": [
"Base64 formatted certificate",
"Base64 formatted certificate"
]
}
],
"dbx": [
{
"type": "sha256",
"value": [
"Base64 formatted sha256 hash",
"Base64 formatted sha256 hash"
]
}
]
}
}
}
- Azure Portal、PowerShell、CLI、または REST API を使用して、Azure コンピューティング ギャラリー リソースを使用して作成したのと同じソース イメージを使用して、信頼できる起動 VM を作成します。
- トラステッド起動 VM が 実行中 の状態になったら、 カスタム UEFI キーが UEFI キー データベースにあることを確認します。
シナリオ 3: 複数の署名テンプレートを適用する
このシナリオでは、既定の署名テンプレートを置き換え、複数の署名テンプレート (UEFI、Windows) を信頼された起動 VM に挿入します。
- 新しいイメージ バージョンを作成します。 次の securityProfile ARM テンプレート ブロックを使用して、イメージ バージョンの作成に関する汎用 ARM テンプレートを作成します。
"securityProfile": {
"uefiSettings": {
"signatureTemplateNames": [
"MicrosoftUefiCertificateAuthorityTemplate",
"MicrosoftWindowsTemplate"
]
}
}
- Azure Portal、PowerShell、CLI、または REST API を使用して、Azure コンピューティング ギャラリー リソースを使用して作成したのと同じソース イメージを使用して、信頼できる起動 VM を作成します。
- トラステッド起動 VM が 実行中 の状態になったら、 カスタム UEFI キーが UEFI キー データベースにあることを確認します。
UEFI データベースのキーを確認する
UEFI データベースに格納されているキーを確認するには、目的の VM のコマンド ライン (SSH) で次のコマンドを使用します。
// For key(s) added to db
$ mokutil --db
// For keys(s) added to dbx
$ mokutil --dbx
表示されるキーがイメージ バージョンに付属していることを確認します。
考慮事項
- クラウドとリージョンがサポートされています
- パブリック クラウドの場合、すべてのリージョンがサポートされます。オーストリア東部、ベルギー中部、チリ中部、インドネシア中部、イスラエル北西部、Jio India Central、Jio India West、マレーシア南部、マレーシア西部、メキシコ中部、カタール中部、米国中南部 2、米国南東部、米国南東部 3、スイス西部、台湾北部、台湾北部、台湾北西部、英国西部、インド西部
- USGov クラウドと China クラウドは現在サポートされていません
便利なリンク
- Base64 証明書を変換する方法: Base64 証明書のエンコード
- X.509 証明書を Base64 に変換する方法: Base64 の X.509 証明書公開キー
- セキュア ブートに署名する方法: Ubuntu、 Redhat、 Debian、 Oracle