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.x のKey Vault VM 拡張機能:
- Windows Server 2025 で実行されていて KeyGuard が動作している場合は、KeyGuard に秘密キーをインストールします。
- 各証明書の 2 つの最新バージョンをインストールします。
- TLS サーバー認証拡張キー使用法 (EKU) を含む証明書をインストールする前に、証明書チェーンの検証を実行します。これには、他の EKU を含む証明書 (クライアント認証など) が含まれます。 チェーン検証エラーにより、拡張機能のプロビジョニングエラーが発生します。 サーバー認証 EKU のない証明書と自己署名証明書 (サブジェクトと発行者が同じ場合) は、このチェックの対象になりません。
- 同じKey Vault証明書オブジェクトから作成されたすべての証明書を、その証明書の最新バージョンにチェーンします。
- 証明書ごとの認証のオーバーライド (オプション) をサポートします。これにより、個々の監視対象の証明書が、拡張機能の既定値とは異なるマネージド ID でKey Vaultに対して認証されます。 詳細については、「 拡張スキーマ」を参照してください。
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 スコープ レベルの Key Vault シークレット ユーザー ロールを VM またはAzure Virtual Machine Scale Setsのマネージド ID に割り当てます。 このロールは、証明書のシークレット部分を取得します。 詳細については、次の記事を参照してください。
次の
identity構成でVirtual Machine Scale Setsを構成します。"identity": { "type": "UserAssigned", "userAssignedIdentities": { "[parameters('userAssignedIdentityResourceId')]": {} } }次の
authenticationSettings構成を使用して、Key Vault VM 拡張機能を構成します。"authenticationSettings": { "msiEndpoint": "[parameters('userAssignedIdentityEndpoint')]", "msiClientId": "[reference(parameters('userAssignedIdentityResourceId'), variables('msiApiVersion')).clientId]" }
注
古いアクセス ポリシーのアクセス許可モデルを使用して、VM とVirtual Machine Scale Setsへのアクセスを提供することもできます。 このメソッドには、シークレットに対する 取得 と 一覧表示 のアクセス許可を持つポリシーが必要です。 詳細については、キー コンテナーへのアクセス ポリシーの割り当てに関するページを参照してください。
拡張機能のスキーマ
次の JSON は、Key Vault VM 拡張機能のスキーマを示しています。 スキーマ実装オプションを検討する前に、次の重要な注意事項を確認してください。
拡張機能では、設定を保護する必要がありません。 すべての設定は公開情報です。
観察された証明書 URL は、フォーム
https://myVaultName.vault.azure.net/secrets/myCertNameを使用する必要があります。/secretsパスは秘密キーを含む完全な証明書を返しますが、/certificatesパスは返さないため、このフォームが必要です。 証明書の詳細については、「Azure Key Vault のキー、シークレット、証明書の概要」を参照してください。 特定のバージョンの証明書を指定することはできません。URL ホストは、認識されたAzure Key Vaultホストである必要があります。
authenticationSettingsプロパティは、任意のユーザー割り当て ID を使用する VM の場合にのみ必須です。このプロパティが、Key Vault への認証に使用する ID を指定します。 複数の ID を持つ VM 拡張機能の問題を回避するために、システム割り当て 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 Key Vault 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"]>,
"authenticationOverride": <Optional. Overrides authenticationSettings for this certificate only, so it can authenticate with a different managed identity. Example: {"msiClientId": "11112222-bbbb-3333-cccc-4444dddd5555"}>
},
{
"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 (省略可) |
["ネットワーク サービス"、"ローカル サービス"] | 文字列配列 |
observedCertificates/authenticationOverride (省略可) |
{"msiClientId": "00001111-aaaa-2222-bbbb-3333cccc4444"} | オブジェクト |
msiEndpoint |
"http://169.254.169.254/metadata/identity/oauth2/token" | 文字列 |
msiClientId |
00001111-aaaa-2222-bbbb-3333cccc4444 | 文字列 |
Template deployment
Azure Resource Manager (ARM) テンプレートを使用した Azure VM 拡張機能のデプロイ テンプレートは、証明書のデプロイ後の更新を必要とする 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 Key Vault 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の仮想マシンとスケール セットの拡張機能の自動アップグレードがサポートされます。 Azure前の例のautoUpgradeMinorVersionプロパティとenableAutomaticUpgradeプロパティを true に設定すると、拡張機能は自動的に最新の状態に保たされます。
拡張機能の依存関係の順序付け
Key Vault VM 拡張機能では、拡張機能の依存関係の順序付けがサポートされています。 拡張機能は、すべての証明書をダウンロードしてインストールした後、正常な開始を報告します。
証明書を開始する前に証明書のインストールが必要な他の拡張機能を使用する場合は、拡張機能の依存関係の順序を使用して、Key Vault VM 拡張機能への依存関係を宣言できます。
起動時に、Key Vault VM 拡張機能は、バックオフ期間が長くなり、証明書のダウンロードとインストールが最大 25 回再試行され、その間は Transitioning 状態になります。 再試行が使い果たされた場合、拡張機能は エラー 状態を報告します。 すべての証明書が正常にインストールされると、Key Vault VM 拡張機能によって正常な開始が報告されます。
拡張機能間の依存関係の設定の詳細については、「Virtual Machine Scale Setsでの拡張機能のプロビジョニングのシーケンス」を参照してください。
重要
拡張機能の依存関係の順序付け機能は、システム割り当て ID を作成し、その ID を使用して Key Vault アクセス ポリシーを更新する ARM テンプレートには対応していません。 このシナリオでこの機能を使用しようとすると、すべての拡張機能が開始されるまで Key Vault アクセス ポリシーを更新できないため、デッドロックが発生します。 代わりに、 単一のユーザー割り当てマネージド ID を 使用し、デプロイする前にその ID にキー コンテナーへのアクセス権を付与します。
Azure PowerShell でのデプロイ
Azure PowerShellを使用して、Azure Key Vault VM 拡張機能をデプロイします。 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 CLIを使用して、Azure Key Vault VM 拡張機能をデプロイします。 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 であるかをどのように判断すればよいですか?
VM 拡張機能 4.0 Key Vault以降、拡張機能は CNG を使用してすべての証明書の秘密キーを保存します。
拡張機能は証明書の自動再バインドをサポートしていますか?
はい。Azure Key Vault VM 拡張機能は、証明書の自動再バインドをサポートしています。 Key Vault VM 拡張機能では、証明書の更新時に S チャネル バインドがサポートされます。
IIS の場合、IIS で証明書更新の自動再バインドを有効にすることで自動再バインドを構成できます。 Azure Key Vault VM 拡張機能は、既存の証明書と同じKey Vault証明書オブジェクトに対して更新された証明書をインストールすると、証明書ライフサイクル通知を生成します。 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\<_most recent version_>\ |
証明書のダウンロードの状態を示します。 ダウンロード場所は、常にWindowsコンピューターの MY ストア (certlm.msc) です。 |
C:\Packages\Plugins\Microsoft.Azure.KeyVault.KeyVaultForWindows\<_most recent version_>\RuntimeSettings\ |
Key Vault VM 拡張機能サービス ログには、akvvm_service サービスの状態が表示されます。 |
C:\Packages\Plugins\Microsoft.Azure.KeyVault.KeyVaultForWindows\<_most recent version_>\Status\ |
Key Vault VM 拡張機能サービスの構成とバイナリ。 |
Windowsでの証明書のインストール
Windows 用 Key Vault VM 拡張機能は、Windows 証明書ストアに証明書をインストールします。 拡張機能がKey Vaultから証明書をダウンロードすると、次のようになります。
- 中間証明書の数に関係なく、すべての中間証明書とリーフ証明書をインストールします。 ルート証明書をインストールする権限がないため、この拡張機能ではルート証明書はインストールされません。 ルート証明書がシステムで信頼されていることを確認します。
- 指定した証明書ストア (
certificateStoreName) と場所 (certificateStoreLocation) にリーフ証明書をインストールします。 - 中間証明機関ストアに中間 CA 証明書をインストールします。
- 指定した証明書ストア (
- 指定した証明書ストア (
certificateStoreName) と場所 (certificateStoreLocation) に証明書を配置します。 - 構成で指定された
accountsに基づいて、秘密キーに適切なアクセス許可を適用します。 - 証明書の更新時に IIS などのアプリケーションの証明書バインドが自動的に更新されるように、
CERT_RENEWALプロパティを設定します。 証明書は、同じKey Vault証明書オブジェクトから作成された最新バージョンにチェーンされ、証明書のKey Vaultシークレット ベース URL によって識別されます。 異なるKey Vault証明書オブジェクトに対応する証明書は、相互にリンクされることはありません。
既定の証明書ストア
既定では、拡張機能は次の場所に証明書をインストールします。
- ストア名: MY (個人用)。
- 店舗の場所: LocalMachine。
証明書のアクセス制御
既定では、管理者と SYSTEM は、インストールされている証明書に対するフル コントロールのアクセス許可を受け取ります。 証明書構成で accounts 配列を使用して、アクセスをカスタマイズできます。
"accounts": ["Network Service", "Local Service"]
この構成により、指定されたアカウントへの読み取りアクセスが許可されます。これにより、これらの ID で実行されているアプリケーションで証明書を使用できるようになります。
証明書の書き換え
Key Vault で証明書が更新されると、拡張機能は自動的に次のようになります。
- 新しい証明書バージョンをダウンロードします。
- 構成された証明書ストアに証明書をインストールします。
-
CERT_RENEWALプロパティを使用して、既存のバインディングを維持します。
証明書のライフサイクルの管理
証明書サービスライフサイクル通知をサポートする IIS などのアプリケーションの場合、Key Vault VM 拡張機能は、既存の証明書と同じKey Vault証明書オブジェクトの更新された証明書をインストールするときに、Windows イベント ログでイベント 1001 を発生させます (新しい証明書をその前の証明書にリンクします)。 IIS は、このイベントをサブスクライブして、サービスを中断することなく、更新された証明書を自動再バインドします。 他のアプリケーションやチームは、イベント 1001 をリッスンして、必要に応じて証明書の更新に対処することもできます。 詳細については、「 証明書サービスのライフサイクル通知」を参照してください。
サポートを受ける
Microsoftでは、Key Vault VM 拡張機能のメジャー バージョン 3.0 以降のみがサポートされます。 バージョン 1.0 を使用している場合は、サポートを要求する前に最新バージョンにアップグレードしてください。
デプロイの問題を解決するには、次の他のオプションを使用します。
サポートについては、AzureのエキスパートにMicrosoft Q&Aでお問い合わせください。
サイトに回答が見つからない場合は、質問を投稿して、Microsoft またはコミュニティの他のメンバーからの反応を求めることができます。
Microsoft サポートに問い合わせていただくこともできます。 Azure サポートの使用方法については、「Azure サポート要求を作成する方法」を参照>。