Azure Key Vault 仮想マシン (VM) 拡張機能は、Azure キー コンテナーに格納されている証明書を自動更新できるようにします。 この拡張機能では、キー コンテナーに格納されている確認済みの証明書のリストが監視されます。 変更が検出されると、拡張によって取得され、対応する証明書がインストールされます。 この記事では、Windows 用の Key Vault VM 拡張機能でサポートされているプラットフォーム、構成、デプロイ オプションについて詳しく説明します。
注
診断を高速化するために VM アシストを試してください。 Windows 用の VM アシストまたは Linux 用の VM アシストを実行することをお勧めします。 これらのスクリプト ベースの診断ツールは、Azure VM ゲスト エージェントと VM の全体的な正常性に影響する一般的な問題を特定するのに役立ちます。
仮想マシンでパフォーマンスの問題が発生している場合は、サポートに連絡する前に、これらのツールを実行してください。
オペレーティング システム
Key Vault VM 拡張機能では、AMD64 と ARM64 の両方で Windows Server 2022 と Windows Server 2025 がサポートされます。 Windows Server 2025 では、秘密キーは KeyGuard に保存されます。
注
Key Vault VM 拡張機能のバージョン 4.0 は、Windows Server 2019 以前にはインストールされません。
サポートされている証明書
Key Vault VM 拡張機能では、次の証明書コンテンツ タイプがサポートされています。
- PKCS #12
- PEM
注
Key Vault VM 拡張機能は、すべての証明書を Windows 証明書ストア、または VM 拡張機能設定の certificateStoreLocation プロパティで指定された場所にダウンロードします。
特徴
Windows バージョン 4.0 のKey Vault VM 拡張機能:
- Windows Server 2025 で実行されている場合は、KeyGuard に秘密キーをインストールします。
- 各証明書の 2 つの最新バージョンをインストールします。
- TLS サーバー認証拡張キー使用法 (EKU) を含む証明書をインストールする前に、証明書チェーンの検証を実行します。これには、他の EKU を含む証明書 (クライアント認証など) が含まれます。 チェーン検証エラーにより、拡張機能のプロビジョニングエラーが発生します。 サーバー認証 EKU のない証明書は、このチェックの対象になりません。
3.0 からのアップグレード
3.0 から更新する場合、次の機能が変更または削除されます。
-
pollingIntervalInSは現在、5 分から 60 分の間に制限されています。 既定では、ポーリングは 1 時間に 1 回実行されます。 -
linkOnRenewalは削除されました。 リンクは常に行われます。 -
keyExportableは削除されました。 秘密キーはエクスポートできなくなりました。 -
requireInitialSyncは削除されました。 拡張機能は、構成されているすべての証明書がインストールされている場合にのみ成功を報告します。 - 証明書の特定のバージョンを構成することはできなくなります。
- 秘密キーは、CAPI ではなく Cryptography API: Next Generation (CNG) を介して常に格納されるようになりました。
前提条件
Windows 用の Key Vault VM 拡張機能を使用する際の次の前提条件を確認します。
証明書を含む Azure Key Vault インスタンス。 詳細については、Azure portal を使用したキー コンテナーの作成に関する記事を参照してください。
マネージド ID が割り当てられた VM。
Key Vault Secrets User ロールは、VM と Azure Virtual Machine Scale Sets マネージド ID のKey Vault スコープ レベルで割り当てる必要があります。 このロールでは、証明書のシークレットの部分を取得できます。 詳細については、次の記事を参照してください。
Virtual Machine Scale Sets には、次の
identity構成が含まれている必要があります。"identity": { "type": "UserAssigned", "userAssignedIdentities": { "[parameters('userAssignedIdentityResourceId')]": {} } }Key Vault VM 拡張機能には、次の
authenticationSettings構成が含まれている必要があります。"authenticationSettings": { "msiEndpoint": "[parameters('userAssignedIdentityEndpoint')]", "msiClientId": "[reference(parameters('userAssignedIdentityResourceId'), variables('msiApiVersion')).clientId]" }
注
古いアクセス ポリシーのアクセス許可モデルを使用して、VM とVirtual Machine Scale Sets へのアクセス権を付与することもできます。 このメソッドには、シークレットに対する get および list アクセス許可を持つポリシーが必要です。 詳細については、キー コンテナーへのアクセス ポリシーの割り当てに関するページを参照してください。
拡張機能のスキーマ
次の JSON は、Key Vault VM 拡張機能のスキーマを示しています。 スキーマ実装オプションを検討する前に、次の重要な注意事項を確認してください。
拡張機能では、設定を保護する必要がありません。 すべての設定が公開情報と見なされます。
確認済みの証明書の URL は、
https://myVaultName.vault.azure.net/secrets/myCertNameの形式である必要があります。/secretsのパスでは秘密キーを含む完全な証明書が返されますが、/certificatesのパスでは返されないため、この形式が推奨されます。 証明書の詳細については、「Azure Key Vault のキー、シークレット、証明書の概要」を参照してください。authenticationSettingsプロパティは、任意のユーザー割り当て ID を使用する VM の場合にのみ必須です。このプロパティが、Key Vault への認証に使用する ID を指定します。 VM 拡張機能が複数の ID を使用することに関する問題を回避するために、システム割り当て ID でこのプロパティを定義します。
{
"type": "Microsoft.Compute/virtualMachines/extensions",
"name": "KVVMExtensionForWindows",
"apiVersion": "2025-04-01",
"location": "<location>",
"dependsOn": [
"[concat('Microsoft.Compute/virtualMachines/', <vmName>)]"
],
"properties": {
"publisher": "Microsoft.Azure.KeyVault",
"type": "KeyVaultForWindows",
"typeHandlerVersion": "4.0",
"autoUpgradeMinorVersion": true,
"enableAutomaticUpgrade": true,
"settings": {
"secretsManagementSettings": {
"observedCertificates": <An array of KeyVault URIs that represent monitored certificates, including certificate store location and ACL permission to certificate private key. Example:
[
{
"url": <A Key Vault URI to the secret portion of the certificate. Example: "https://myvault.vault.azure.net/secrets/mycertificate1">,
"certificateStoreName": <The certificate store name. Example: "MY">,
"certificateStoreLocation": <The certificate store location, which currently works locally only. Example: "LocalMachine">,
"accounts": <Optional. An array of preferred accounts with read access to certificate private keys. Administrators and SYSTEM get Full Control by default. Example: ["Network Service", "Local Service"]>
},
{
"url": <Example: "https://myvault.vault.azure.net/secrets/mycertificate2">,
"certificateStoreName": <Example: "MY">,
"certificateStoreLocation": <Example: "CurrentUser">,
"accounts": <Example: ["Local Service"]>
},
{
"url": <Example: "https://myvault.vault.azure.net/secrets/mycertificate3">,
"certificateStoreName": <Example: "TrustedPeople">,
"certificateStoreLocation": <Example: "LocalMachine">
}
]>
},
"authenticationSettings": {
"msiEndpoint": <Required when the msiClientId property is used. Specifies the MSI endpoint. Example for most Azure VMs: "http://169.254.169.254/metadata/identity/oauth2/token">,
"msiClientId": <Required when the VM has any user assigned identities. Specifies the MSI identity. Example: "00001111-aaaa-2222-bbbb-3333cccc4444">
}
}
}
}
プロパティ値
JSON スキーマには、次のプロパティが含まれています。
| 名前 | 値/例 | データ型 |
|---|---|---|
apiVersion |
2025-04-01 | date |
publisher |
Microsoft.Azure.KeyVault | 文字列 |
type |
KeyVaultForWindows | 文字列 |
typeHandlerVersion |
"4.0" | 文字列 |
observedCertificates |
[{...}, {...}] | 文字列配列 |
observedCertificates/url |
"https://myvault.vault.azure.net/secrets/mycertificate" | 文字列 |
observedCertificates/certificateStoreName |
MY | 文字列 |
observedCertificates/certificateStoreLocation |
LocalMachine または CurrentUser (大文字と小文字を区別する) | 文字列 |
observedCertificates/accounts (省略可) |
["ネットワーク サービス"、"ローカル サービス"] | 文字列配列 |
msiEndpoint |
"http://169.254.169.254/metadata/identity/oauth2/token" | 文字列 |
msiClientId |
00001111-aaaa-2222-bbbb-3333cccc4444 | 文字列 |
Template deployment
Azure VM 拡張機能は、Azure Resource Manager (ARM) テンプレートでデプロイできます。 テンプレートは、デプロイ後の証明書の更新が必要な仮想マシンを 1 つ以上デプロイするときに最適です。 拡張機能は、個々の VM または Virtual Machine Scale Sets インスタンスにデプロイできます。 スキーマと構成は、両方のテンプレートの種類に共通です。
キー コンテナー拡張機能の JSON 構成は、VM または Virtual Machine Scale Sets のテンプレート内で入れ子にされています。 VM リソース拡張機能の場合、構成は "resources": [] 仮想マシン オブジェクトの下で入れ子になります。 Virtual Machine Scale Sets インスタンス拡張機能の場合、構成は "virtualMachineProfile":"extensionProfile":{"extensions" :[] オブジェクトの下で入れ子になります。
次の JSON スニペットでは、Key Vault VM 拡張機能の ARM テンプレート デプロイの設定例を示します。
{
"type": "Microsoft.Compute/virtualMachines/extensions",
"name": "KeyVaultForWindows",
"apiVersion": "2025-04-01",
"location": "<location>",
"dependsOn": [
"[concat('Microsoft.Compute/virtualMachines/', <vmName>)]"
],
"properties": {
"publisher": "Microsoft.Azure.KeyVault",
"type": "KeyVaultForWindows",
"typeHandlerVersion": "4.0",
"autoUpgradeMinorVersion": true,
"enableAutomaticUpgrade": true,
"settings": {
"secretsManagementSettings": {
"observedCertificates": <An array of KeyVault URIs that represent monitored certificates, including certificate store location and ACL permission to certificate private key. Example:
[
{
"url": <A Key Vault URI to the secret portion of the certificate. Example: "https://myvault.vault.azure.net/secrets/mycertificate1">,
"certificateStoreName": <The certificate store name. Example: "MY">,
"certificateStoreLocation": <The certificate store location, which currently works locally only. Example: "LocalMachine">,
"accounts": <Optional. An array of preferred accounts with read access to certificate private keys. Administrators and SYSTEM get Full Control by default. Example: ["Network Service", "Local Service"]>
},
{
"url": <Example: "https://myvault.vault.azure.net/secrets/mycertificate2">,
"certificateStoreName": <Example: "MY">,
"certificateStoreLocation": <Example: "CurrentUser">,
"accounts": <Example: ["Local Service"]>
},
{
"url": <Example: "https://myvault.vault.azure.net/secrets/mycertificate3">,
"certificateStoreName": <Example: "TrustedPeople">,
"certificateStoreLocation": <Example: "LocalMachine">
}
]>
},
"authenticationSettings": {
"msiEndpoint": <Required when the msiClientId property is used. Specifies the MSI endpoint. Example for most Azure VMs: "http://169.254.169.254/metadata/identity/oauth2/token">,
"msiClientId": <Required when the VM has any user assigned identities. Specifies the MSI identity. Example: "00001111-aaaa-2222-bbbb-3333cccc4444">
}
}
}
}
拡張機能の自動アップグレード
Key Vault VM 拡張機能では、Azureの仮想マシンとスケール セットの拡張機能の自動アップグレードがサポートされます。 前の例の autoUpgradeMinorVersion プロパティと enableAutomaticUpgrade プロパティが trueに設定されている場合、拡張機能は自動的に最新の状態に保たれます。
拡張機能の依存関係の順序付け
Key Vault VM 拡張機能では、拡張機能の依存関係の順序付けがサポートされています。 拡張機能は、すべての証明書をダウンロードしてインストールした後、正常な開始を報告します。
証明書を開始する前に証明書のインストールが必要な他の拡張機能を使用する場合は、拡張機能の依存関係の順序を使用して、Key Vault VM 拡張機能への依存関係を宣言できます。
起動時に、Key Vault VM 拡張機能は、バックオフ期間が長くなり、証明書のダウンロードとインストールが最大 25 回再試行され、その間は Transitioning 状態になります。 再試行が使い果たされた場合、拡張機能は エラー 状態を報告します。 すべての証明書が正常にインストールされると、Key Vault VM 拡張機能によって正常な開始が報告されます。
拡張機能間の依存関係を設定する方法については、「仮想マシン スケール セット内の拡張機能のプロビジョニングをシーケンス処理する」を参照してください。
重要
拡張機能の依存関係の順序付け機能は、システム割り当て ID を作成し、その ID を使用して Key Vault アクセス ポリシーを更新する ARM テンプレートには対応していません。 このシナリオでこの機能を使用しようとすると、すべての拡張機能が開始されるまで Key Vault アクセス ポリシーを更新できないため、デッドロックが発生します。 その代わりに、"単一ユーザー割り当て MSI ID" を使用し、その ID でキー コンテナーに事前 ACL を設定してからデプロイします。
Azure PowerShell でのデプロイ
Azure Key Vault VM 拡張機能は、Azure PowerShell を使用してデプロイできます。 Key Vault VM 拡張機能の設定を JSON ファイル (settings.json) に保存します。
次の JSON スニペットでは、PowerShell を使用して Key Vault VM 拡張機能をデプロイするための設定例を示します。
{
"secretsManagementSettings": {
"observedCertificates":
[
{
"url": "https://<examplekv>.vault.azure.net/secrets/certificate1",
"certificateStoreName": "MY",
"certificateStoreLocation": "LocalMachine",
"accounts": [
"Network Service"
]
},
{
"url": "https://<examplekv>.vault.azure.net/secrets/certificate2",
"certificateStoreName": "MY",
"certificateStoreLocation": "LocalMachine",
"accounts": [
"Network Service",
"Local Service"
]
}
]},
"authenticationSettings": {
"msiEndpoint": "http://169.254.169.254/metadata/identity/oauth2/token",
"msiClientId": "00001111-aaaa-2222-bbbb-3333cccc4444"
}
}
VM でデプロイする
# Build settings
$settings = (get-content -raw ".\settings.json")
$extName = "KeyVaultForWindows"
$extPublisher = "Microsoft.Azure.KeyVault"
$extType = "KeyVaultForWindows"
# Start the deployment
Set-AzVmExtension -TypeHandlerVersion "4.0" -ResourceGroupName <ResourceGroupName> -Location <Location> -VMName <VMName> -Name $extName -Publisher $extPublisher -Type $extType -SettingString $settings
Virtual Machine Scale Sets インスタンスでデプロイする
# Build settings
$settings = ".\settings.json"
$extName = "KeyVaultForWindows"
$extPublisher = "Microsoft.Azure.KeyVault"
$extType = "KeyVaultForWindows"
# Add extension to Virtual Machine Scale Sets
$vmss = Get-AzVmss -ResourceGroupName <ResourceGroupName> -VMScaleSetName <VmssName>
Add-AzVmssExtension -VirtualMachineScaleSet $vmss -Name $extName -Publisher $extPublisher -Type $extType -TypeHandlerVersion "4.0" -Setting $settings
# Start the deployment
Update-AzVmss -ResourceGroupName <ResourceGroupName> -VMScaleSetName <VmssName> -VirtualMachineScaleSet $vmss
Azure CLI でのデプロイ
Azure Key Vault VM 拡張機能は、Azure CLI を使用してデプロイできます。 Key Vault VM 拡張機能の設定を JSON ファイル (settings.json) に保存します。
次の JSON スニペットでは、Azure CLI を使用して Key Vault VM 拡張機能をデプロイするための設定例を示します。
{
"secretsManagementSettings": {
"observedCertificates": [
{
"url": "https://<examplekv>.vault.azure.net/secrets/certificate1",
"certificateStoreName": "MY",
"certificateStoreLocation": "LocalMachine",
"accounts": [
"Network Service"
]
},
{
"url": "https://<examplekv>.vault.azure.net/secrets/certificate2",
"certificateStoreName": "MY",
"certificateStoreLocation": "LocalMachine",
"accounts": [
"Network Service",
"Local Service"
]
}
]
},
"authenticationSettings": {
"msiEndpoint": "http://169.254.169.254/metadata/identity/oauth2/token",
"msiClientId": "00001111-aaaa-2222-bbbb-3333cccc4444"
}
}
VM でデプロイする
# Start the deployment
az vm extension set --name "KeyVaultForWindows" `
--publisher Microsoft.Azure.KeyVault `
--resource-group "<resourcegroup>" `
--vm-name "<vmName>" `
--settings "@settings.json" `
--version "4.0"
Virtual Machine Scale Sets インスタンスでデプロイする
# Start the deployment
az vmss extension set --name "KeyVaultForWindows" `
--publisher Microsoft.Azure.KeyVault `
--resource-group "<resourcegroup>" `
--vmss-name "<vmssName>" `
--settings "@settings.json" `
--version "4.0"
ヒント
拡張機能の展開が失敗した場合は、正しいバージョンで再インストールする前に、既存の拡張機能を削除する必要がある場合があります。 Azure では拡張機能のダウングレードが許可されていないため、最初に障害のある拡張機能を削除する必要がある場合があります。
az vm extension delete --name "KeyVaultForWindows" --resource-group "<resourcegroup>" --vm-name "<vmName>"
問題のトラブルシューティング
デプロイの問題のトラブルシューティング方法に関する推奨事項を次にいくつか示します。
よく寄せられる質問を確認する
確認済み証明書の数に制限はありますか?
いいえ。 Key Vault VM 拡張機能には、確認済み証明書の数に制限はありません (observedCertificates)。
アカウントが指定されていない場合の既定のアクセス許可は何ですか?
既定では、管理者と SYSTEM にはフル コントロールが付与されています。
証明書キーが CAPI1 であるか CNG であるかをどのように判断すればよいですか?
KEY VAULT VM 拡張機能 4.0 以降では、すべての証明書の秘密キーが CNG 経由で保存されます。
拡張機能は証明書の自動再バインドをサポートしていますか?
はい。Azure Key Vault VM 拡張機能は、証明書の自動再バインドをサポートしています。 Key Vault VM 拡張機能では、証明書の更新時に S チャネル バインドがサポートされます。
IIS の場合、IIS で証明書更新の自動再バインドを有効にすることで自動再バインドを構成できます。 Azure Key Vault VM 拡張機能は、SAN が一致する証明書がインストールされると、証明書ライフサイクル通知を生成します。 IIS は、このイベントを使用して証明書を自動再バインドします。 詳細については、「 IIS での証明書の再バインド」を参照してください。
拡張機能の状態表示
Azure portal で、あるいは PowerShell または Azure CLI を使用して、拡張機能のデプロイ状態を確認します。
特定の VM の拡張機能のデプロイ状態を確認するには、次のコマンドを実行します。
Azure PowerShell:
Get-AzVMExtension -ResourceGroupName <myResourceGroup> -VMName <myVM> -Name <myExtensionName>Azure CLI:
az vm get-instance-view --resource-group <myResourceGroup> --name <myVM> --query "instanceView.extensions"
ログと構成を確認する
Key Vault VM 拡張機能ログは、VM 上にのみローカルで存在します。 トラブルシューティングに役立つログの詳細を確認します。
| ログ ファイル | 説明 |
|---|---|
| C:\WindowsAzure\Logs\WaAppAgent.log' | 拡張機能の更新が発生したタイミングを示します。 |
| C:\WindowsAzure\Logs\Plugins\Microsoft.Azure.KeyVault.KeyVaultForWindows<最新バージョン>\ | 証明書のダウンロードの状態を示します。 ダウンロード場所は常に、Windows コンピューターの My ストア (certlm.msc) になります。 |
| C:\Packages\Plugins\Microsoft.Azure.KeyVault.KeyVaultForWindows<最新バージョン>\RuntimeSettings\ | Key Vault VM 拡張機能サービスのログには、akvvm_service サービスの状態が示されます。 |
| C:\Packages\Plugins\Microsoft.Azure.KeyVault.KeyVaultForWindows<最新バージョン>\Status\ | Key Vault VM 拡張機能サービスの構成とバイナリ。 |
Windows での証明書のインストール
Windows 用 Key Vault VM 拡張機能は、Windows 証明書ストアに証明書をインストールします。 Key Vault から証明書をダウンロードすると、拡張機能は次のようになります。
- 中間証明書の数に関係なく、すべての中間証明書とリーフ証明書をインストールします。 ルート証明書はインストールされません。拡張機能にはルート インストールの実行が許可されていないためです。 ルート証明書がシステムで信頼されていることを確認するのは、サービス所有者の責任です。
- リーフ証明書は、指定された証明書ストア (
certificateStoreName) と場所 (certificateStoreLocation) にインストールされます - 中間 CA 証明書が中間証明機関ストアにインストールされている
- リーフ証明書は、指定された証明書ストア (
- 指定した証明書ストア (
certificateStoreName) と場所 (certificateStoreLocation) に証明書を配置します - 構成で指定された
accountsに基づいて、秘密キーに適切なアクセス許可を適用します - 証明書の更新時に IIS などのアプリケーションの証明書バインドが自動的に更新されるように、
CERT_RENEWALプロパティを設定します。
既定の証明書ストア
指定しない場合、証明書は既定で次の場所にインストールされます。
- ストア名: MY (個人用)
- 店舗所在地: LocalMachine
証明書のアクセス制御
既定では、管理者と SYSTEM は、インストールされている証明書に対するフル コントロールのアクセス許可を受け取ります。 証明書構成の accounts 配列を使用してアクセスをカスタマイズできます。
"accounts": ["Network Service", "Local Service"]
これにより、指定したアカウントへの読み取りアクセスが許可され、それらの ID で実行されているアプリケーションで証明書を使用できるようになります。
証明書の更新
Key Vault で証明書が更新されると、拡張機能は自動的に次のようになります。
- 新しい証明書バージョンをダウンロードします。
- 構成された証明書ストアにインストールします。
-
CERT_RENEWALプロパティを使用して既存のバインディングを維持します。
証明書のライフサイクルの管理
証明書サービスライフサイクル通知をサポートする IIS などのアプリケーションの場合、Key Vault VM 拡張機能は、サブジェクトの別名 (SAN) が一致する証明書がインストールされると、Windows イベント ログに Event 1001 を生成します。 IIS は、このイベントをサブスクライブして、サービスを中断することなく、更新された証明書を自動再バインドします。 他のアプリケーションやチームは、イベント 1001 をリッスンして、必要に応じて証明書の更新に対処することもできます。 詳細については、「 証明書サービスのライフサイクル通知」を参照してください。
サポートを受ける
デプロイの問題の解決に役立つその他のオプションを次に示します。
サポートについては、AzureのエキスパートにMicrosoft Q&Aでお問い合わせください。
サイトに回答が見つからない場合は、質問を投稿して、Microsoft またはコミュニティの他のメンバーからの反応を求めることができます。
Microsoft サポートに問い合わせていただくこともできます。 Azure サポートの使用方法については、「Azure サポート要求を作成する方法」を参照>。