Azure REST APIのKey Vault作成例更新:enableSoftDelete明示化の影響と対応

Azure REST APIでKey Vaultを作成している環境では、今回の更新を「サンプル修正だから影響なし」と見ない方が安全です。結論から言うと、Key Vault作成時のリクエスト本文に enableSoftDelete: true を明示することが重要です。サービス側ではソフトデリートが既定で有効でも、Azure Policyがリクエスト本文を評価する環境では、プロパティが省略されているだけで RequestDisallowedByPolicy によって作成に失敗する可能性があります。(GitHub)

今回のAzure REST APIドキュメント更新は、既存のKey Vaultを自動変更するものではありません。主な影響は、Azure REST API、Azure管理SDK、ARM/Bicep/Terraform、CI/CDパイプラインなどで「新しいKey Vaultを作成する処理」を持っているチームです。なお、PRタイトルには enablePurgeProtection も含まれていますが、2026年5月5日時点の差分では enableSoftDelete の明示追加が中心で、enablePurgeProtection は後続検討として扱われています。(GitHub)

目次

Azure REST APIのKey Vault作成例で何が変わったのか

Azure/azure-rest-api-specsのPR #42880では、Key Vaultの作成サンプルに enableSoftDelete: true を追加する変更が行われています。対象は createVault.json と createVaultWithNetworkAcls.json で、APIバージョン 2025-05-01、2026-02-01、2026-03-01-preview の例に同じ趣旨の変更が入っています。(GitHub)

変更の要点はシンプルです。

"enableSoftDelete": true

この1行が、Key Vault作成時の properties に明示されるようになります。

確認項目変更前変更後実務上の意味
enableSoftDelete作成例に含まれない場合があるtrue を明示Azure Policyで必須チェックされても通りやすくなる
enablePurgeProtectionPRタイトルには含まれる最新差分では追加されていない消去保護は別途、要件に応じて明示設定する
SDK生成サンプル例JSONを元に生成される再生成後に enableSoftDelete が反映される想定サンプルをコピーした利用者のポリシー違反を減らせる
既存Key Vault変更なし変更なし既存リソースの設定が勝手に変わるわけではない

ここで大切なのは、今回の更新が「Key Vaultサービスの既定値を変える更新」ではなく、「作成例のリクエスト本文に値を明示する更新」である点です。

なぜ enableSoftDelete を省略すると問題になるのか

Azure Key VaultのREST APIリファレンスでは、enableSoftDelete は新規作成時に未指定なら既定で true になり、一度 true になると false に戻せないプロパティとして説明されています。つまり、サービスだけを見れば「省略しても最終的には有効になる」と考えがちです。(Microsoft Learn)

しかし、PR #42880で問題として挙げられているのは、Azure Policyがサービス側の既定値適用前にリクエスト本文を評価するケースです。enableSoftDelete がJSONペイロードに存在しない場合、サービス側では後から true になる予定でも、ポリシー評価の段階では「必須プロパティがない」と判断される可能性があります。(GitHub)

流れとしては次のようになります。

段階起きること
1SDKサンプルやRESTリクエストで enableSoftDelete を省略する
2クライアントから送信されるJSONにも enableSoftDelete が含まれない
3Azure Policyがリクエスト本文を評価する
4enableSoftDelete が存在しないため、ポリシー違反と判定される
5Key Vault作成前に RequestDisallowedByPolicy で失敗する

つまり、実務上の判断基準は「最終的に有効になるか」ではなく、「作成リクエストの本文に明示されているか」です。

影響を受けやすい環境

今回のAzure REST APIドキュメント更新で特に確認すべきなのは、Key Vaultを手動作成している人よりも、コードやテンプレートで繰り返し作成しているチームです。

対象影響を受ける理由対応の方向性
Azure REST APIを直接呼び出す処理リクエスト本文を自前で組み立てているproperties.enableSoftDelete を明示する
Python / Java / JavaScript / TypeScript / Go / .NETのAzure管理SDK作成サンプルがspec例から生成されるSDKのサンプル更新を待たず、作成処理で明示設定する
ARMテンプレート / Bicep / Terraform「既定値で有効」と判断して省略しやすいテンプレート側に enableSoftDelete: true を追加する
CI/CDパイプラインポリシー適用済みサブスクリプションで突然失敗するデプロイ前にポリシーとリクエスト本文を確認する
Azure Policy管理者フィールドの存在を厳格に見るポリシーで失敗が出るDeny条件と作成リクエストの整合性を確認する

PRでは、5つのAzure管理SDKで作成サンプルがspecのexample JSONから生成されることが背景として説明されています。サンプルが更新されれば将来的な誤用は減りますが、現在運用中のコードが自動的に修正されるわけではありません。(GitHub)

まず確認すべき設定項目

Key Vault作成処理を見直すときは、enableSoftDelete だけでなく、関連する保護設定とAPIバージョンもまとめて確認すると手戻りを減らせます。

項目確認すること注意点
enableSoftDelete作成リクエストに true が明示されているかサービス既定値に頼らない
softDeleteRetentionInDays保持期間を要件どおりにしているか7〜90日の範囲で、作成後に変更できない前提で設計する
enablePurgeProtection本番・暗号化キー用途で有効化が必要か有効化は不可逆で、既定では有効ではない
enableRbacAuthorizationAzure RBACを使うか、アクセスポリシーを使うかAPIバージョン 2026-02-01 以降では新規Vaultの既定アクセス制御に注意
APIバージョン2026-02-01 以降へ移行済みか古いKey VaultコントロールプレーンAPIは2027年2月27日に廃止予定

Key Vaultのソフトデリートは、新しいキーコンテナー作成時に既定でオンになり、有効化後は無効化できません。保持期間は既定で90日、設定可能範囲は7〜90日です。消去保護は既定では有効ではなく、ソフトデリートが有効な場合にのみ有効化できます。(Microsoft Learn)

REST APIやIaCでの修正例

Azure REST APIやテンプレートでKey Vaultを作成している場合は、作成時の properties に enableSoftDelete を明示します。

以下は、注目すべきプロパティを抜き出した例です。実際のリクエストでは、利用するAPIバージョン、アクセス制御方式、ネットワーク設定、タグ、リージョンなどに合わせて必要項目を調整してください。

{
  "location": "japaneast",
  "properties": {
    "tenantId": "<tenant-id>",
    "sku": {
      "family": "A",
      "name": "standard"
    },
    "enableSoftDelete": true,
    "softDeleteRetentionInDays": 90,
    "enablePurgeProtection": true,
    "enableRbacAuthorization": true
  }
}

enablePurgeProtection は、すべての環境で機械的に追加すればよい設定ではありません。消去保護を有効にすると、保持期間中は完全削除できなくなるため、検証環境や短命な環境では運用ルールと衝突することがあります。一方で、本番環境、カスタマーマネージドキー、ストレージ暗号化、監査要件がある環境では、消去保護を有効にする判断が強く求められます。Microsoft Learnでも、暗号化にキーを使う場合の消去保護が推奨され、Key Vaultと統合する多くのAzureサービスで必要になることが説明されています。(Microsoft Learn)

既存のKey Vaultで確認するコマンド例

既存のKey Vaultについては、まず現在の設定を確認します。Azure CLIを使う場合は、次のように az resource show でKey Vaultのプロパティを確認できます。

az resource show \
  --resource-group <resource-group-name> \
  --resource-type Microsoft.KeyVault/vaults \
  --name <vault-name> \
  --query "properties.{softDelete:enableSoftDelete,purgeProtection:enablePurgeProtection,retention:softDeleteRetentionInDays,rbac:enableRbacAuthorization}"

PowerShellでは、環境やモジュールのバージョンによって表示プロパティが異なる場合がありますが、基本的には Get-AzKeyVault で確認します。

Get-AzKeyVault -VaultName <vault-name> |
  Select-Object VaultName, EnableSoftDelete, EnablePurgeProtection, SoftDeleteRetentionInDays, EnableRbacAuthorization

新規作成処理でエラーが出ている場合は、作成後の確認ではなく、実際に送信されるリクエスト本文を確認してください。今回の問題は「作成されたKey Vaultの最終状態」ではなく、「作成リクエストの時点でプロパティが存在するか」にあります。

enablePurgeProtection は今回の更新だけで有効になるのか

今回のトピック名には enablePurgeProtection が含まれていますが、2026年5月5日時点で確認できるPR差分では、最終的に enablePurgeProtection の追加は外され、enableSoftDelete の追加に絞られています。実際に「remove enablePurgeProtection, only add enableSoftDelete」というコミットがあり、ファイル差分でも追加されている行は enableSoftDelete: true です。(GitHub)

そのため、実務では次のように分けて判断するのが安全です。

設定今回の更新で見るべきこと自社で判断すべきこと
enableSoftDelete作成例に明示追加されるすべてのKey Vault作成処理で明示する
enablePurgeProtection最新差分では追加対象外本番・CMK・監査要件に応じて明示する
softDeleteRetentionInDays直接の主題ではない保持期間を作成時に決める

特に本番環境では、enableSoftDelete だけで満足せず、消去保護と保持期間をセットでレビューしてください。ソフトデリートは削除後の回復を可能にしますが、消去保護を有効にしない場合、権限を持つユーザーや処理による完全削除リスクは残ります。

APIバージョン 2026-02-01 以降への移行とあわせて見るべき点

今回の作成例更新は、Key Vault APIバージョン 2026-02-01 以降への移行とも関連して見ておくべきです。Microsoft Learnでは、2026-02-01 以降で新しいKey Vaultを作成する場合、既定のアクセス制御モデルがAzure RBACになること、既存Vaultは明示的に変更しない限り現在のアクセス制御モデルを維持することが説明されています。(Microsoft Learn)

また、2026-02-01 より前のKey VaultコントロールプレーンAPIバージョンは、2027年2月27日に廃止予定です。データプレーンAPIは対象外ですが、管理SDK、REST API呼び出し、ARM/Bicep/Terraformテンプレートを使ってKey Vaultを作成・更新している場合は移行計画が必要です。(Microsoft Learn)

このタイミングで見直すべきポイントは、次の3つです。

1つ目は、enableSoftDelete を明示しているかです。これは今回のPRの中心です。

2つ目は、enableRbacAuthorization の扱いです。アクセスポリシーを使い続ける環境では、APIバージョン変更によって意図せずAzure RBAC前提の作成になることを避ける必要があります。

3つ目は、SDKのバージョンです。Microsoft Learnでは、APIバージョン 2026-02-01 をサポートする5つのKey Vaultコントロールプレーン管理SDKがリリースされていることが案内されています。(Microsoft Learn)

Azure CLIとAzure PowerShell利用者の確認ポイント

今回のPRには、Azure CLIとAzure PowerShellの関連修正も言及されています。Azure CLIでは az keyvault create、Azure PowerShellでは New-AzKeyVault が、Azure Policyのチェックを満たすために enableSoftDelete / EnableSoftDelete をリクエスト本文へ明示する修正として扱われています。(GitHub)

ただし、CLIやPowerShellの修正PRがあるからといって、すべての環境がすぐに安全になるわけではありません。組織内で使っているAzure CLI、Az PowerShellモジュール、コンテナイメージ、DevOpsエージェントのバージョンが古いままだと、修正済みの挙動が反映されない可能性があります。

確認すべき場所は次のとおりです。

場所確認内容
開発者PCAzure CLI / Az PowerShellのバージョン
CI/CDエージェントビルドイメージ内のCLI・PowerShellモジュール
IaC実行基盤Terraform provider、Bicep CLI、Azure CLIの組み合わせ
社内サンプルコード古い作成例をコピーしていないか
テスト環境Azure Policyが本番と同じ条件で適用されているか

特に、CI/CDだけが失敗する場合は、ローカル環境とパイプライン環境でツールバージョンやポリシー適用スコープが違うことがあります。

よくある失敗パターン

今回の変更で避けたい失敗は、単に enableSoftDelete を書き忘れることだけではありません。Key Vaultはセキュリティ、アクセス制御、削除保護が絡むため、周辺設定の見落としが障害につながります。

失敗パターン起きる問題回避策
「既定でtrueだから省略」で済ませるAzure Policyで作成前に拒否される作成リクエストに enableSoftDelete: true を明示する
PRタイトルだけを見て enablePurgeProtection も反映済みと思い込む消去保護が有効にならない実際の差分と作成後設定を確認する
検証環境で消去保護を無計画に有効化するリソース名再利用や削除運用で困る保持期間と削除運用を先に決める
APIバージョンだけ更新するアクセス制御モデルが想定とずれるenableRbacAuthorization を明示的に設計する
SDKサンプルの更新を待つ既存の自動デプロイが失敗し続ける現行コードに明示設定を入れる
作成後の状態だけ確認するポリシー拒否の原因を見逃す実際の送信JSONをログやデバッグで確認する

対応手順:まず何を直すべきか

実務では、次の順番で確認すると効率的です。

Key Vault作成箇所を洗い出す

まず、コードリポジトリやIaCテンプレートからKey Vault作成処理を探します。検索キーワードは次のようなものが有効です。

Microsoft.KeyVault/vaults
createVault
keyvault create
New-AzKeyVault
enableSoftDelete
enablePurgeProtection
softDeleteRetentionInDays

enableSoftDelete が見つからない作成処理は、今回の確認対象です。

作成リクエストに enableSoftDelete: true を追加する

REST API、ARMテンプレート、Bicep、Terraform、SDKのいずれであっても、最終的な作成リクエストに enableSoftDelete が含まれるようにします。

ポイントは、SDKの内部既定値やサービス側の既定値に頼らないことです。Azure Policyがリクエスト本文を評価する環境では、「結果としてtrueになる」では不十分な場合があります。

消去保護を有効にするか決める

本番環境では、enablePurgeProtection も合わせて検討します。特に、Key Vault内のキーをストレージ、SQL、ディスク暗号化、アプリケーションの重要シークレット保護に使っている場合は、消去保護を有効にする価値が高くなります。

一方、短命な検証環境では、保持期間中に完全削除できないことが運用上の負担になる場合があります。環境ごとにポリシーを分けるか、本番相当環境では必須、サンドボックスでは別管理にするなどの設計が必要です。

Azure PolicyのDeny条件を確認する

RequestDisallowedByPolicy が出ている場合は、エラーメッセージに含まれるポリシー割り当て名やポリシー定義を確認します。Microsoft Learnでも、RequestDisallowedByPolicy ではエラーコード、ポリシー割り当て、ポリシー定義が主要な確認要素になると説明されています。(Microsoft Learn)

ポリシー側で見るべき点は、enableSoftDelete の値だけを見ているのか、プロパティの存在まで要求しているのかです。後者の場合、サービス側の既定値では回避できません。

APIバージョンとアクセス制御を同時に見直す

2026-02-01 以降へ移行する場合は、enableSoftDelete だけでなく enableRbacAuthorization も確認します。新しいKey Vaultをアクセスポリシー方式で作成したい場合は、enableRbacAuthorization を明示的に false にする必要があります。(Microsoft Learn)

変更対応のチェックリスト

公開前、またはCI/CDへ反映する前に、次のチェックを済ませてください。

  • Key Vault作成リクエストに enableSoftDelete: true が含まれている
  • 本番環境で enablePurgeProtection を有効にするか判断済み
  • softDeleteRetentionInDays の保持期間が要件に合っている
  • Azure PolicyのDeny条件と作成リクエストが整合している
  • APIバージョン 2026-02-01 以降への移行方針が決まっている
  • アクセス制御方式としてAzure RBACを使うか、アクセスポリシーを使うか決まっている
  • SDK、Azure CLI、Az PowerShell、CI/CDエージェントのバージョンを確認した
  • 作成後のプロパティだけでなく、送信されるJSON本文も確認した

まとめ:次に取るべき行動

今回のAzure REST APIドキュメント更新で最も重要なのは、Key Vault作成時に enableSoftDelete: true を明示することです。サービス側の既定値では有効になる設定でも、Azure Policyがリクエスト本文を評価する環境では、省略がそのままデプロイ失敗につながる可能性があります。

まずは、REST API、SDK、IaC、CI/CDのKey Vault作成処理を検索し、enableSoftDelete がリクエスト本文に含まれているか確認してください。そのうえで、本番環境では enablePurgeProtection と保持期間、APIバージョン 2026-02-01 以降のアクセス制御モデルも合わせて見直すのが安全です。

PRや生成サンプルの反映状況は変わる可能性があるため、実装前にはazure-rest-api-specsの該当PRと最新のMicrosoft Learnを確認し、自社のポリシー条件に合わせて明示設定することが実務上の最短ルートです。

この記事を書いた人

実務の現場で詰まりがちなポイントを地図にするITブログ「IT trip」を運営。Windows/Office(Teams・Excel)からSQL、サーバ運用、ガジェットまで、再現性のある手順と“なぜそうなるか”を丁寧に解説します。読んだらすぐ試せること、そして迷った人の次の一歩が見えることを大切にしています。

コメント

コメントする

目次