IISのapplicationHost.configが消えた・保存できない時の完全復旧ガイド(Windows Server 2012/2016対応)

Windows Server 2012/2016 のクラウド環境で、IIS の構成保存が突然できず、applicationHost.config 自体が消えている――現場でよく遭遇する深刻なインシデントです。本記事は実運用での復旧を前提に、原因の切り分けから安全な再生成・権限修復・恒久対策までを一気通貫でまとめました。最短復旧ルートと再発防止の両立を狙います。

目次

IIS の applicationHost.config 消失・保存不可の症状整理

対象は Windows Server 2012 / 2016(クラウドインスタンス含む)。IIS マネージャーでバインド追加やアプリケーションプール変更などを保存する際に 「Error: Cannot write configuration file」 が表示され、C:\Windows\System32\inetsrv\config\applicationHost.config が存在しない、または書き込みできない状態です。さらに C:\inetpub\history にも世代バックアップが残っていないケースがあります。

影響する操作の例

  • サイト/バインドの追加・編集・削除
  • アプリケーションプールの追加・設定変更(.NET CLR / パイプライン / ID 変更 など)
  • 認証方式・モジュール・ハンドラー・圧縮などサーバーレベル設定の変更

よくある発生契機

  • Windows Update 適用直後に消失(複数事例)。例として 2025年3月前後の累積更新(KB5032974 など) で報告あり(公式な事象公開は無し)。
  • 誤った ACL 変更・権限剥奪による書き込み失敗
  • セキュリティ製品による隔離・削除
  • 運用スクリプトの誤動作/人的ミス
  • 共有構成(Shared Configuration)やリダイレクション設定の不整合

主な原因候補(一覧)

区分内容確認ポイント
Windows Update特定の累積更新で IIS 関連ファイルが誤って削除・移動された事例。適用履歴・再起動直後に事象発生/更新アンインストールで改善するか。
アクセス権C:\Windows\System32\inetsrv\config の ACL 変更により IIS が書き込めない。所有者・権限の逸脱(TrustedInstallerAdministratorsSYSTEM)。
セキュリティ製品リアルタイム保護/EDR による隔離・削除。当該時刻の隔離ログ・検疫ポリシー・除外設定。
手動・スクリプトクリーンアップや構成反映バッチの副作用。直近の運用変更・ジョブ履歴・変更管理台帳。
共有構成(重要)Shared Configuration が UNC 共有を指しており、共有不通でローカルに書けない。IIS マネージャー「共有構成」/redirection.config の内容。
スナップショットクラウドのロールバックで一部のみ巻き戻り、履歴不整合。スナップショット/バックアップ・復元のタイムライン。

最短復旧を狙う初動(5〜10分)

  1. 管理者権限のコマンドプロンプト/PowerShell を起動。
  2. 構成フォルダーの存在・属性・権限を確認。 dir /a "C:\Windows\System32\inetsrv\config" icacls "C:\Windows\System32\inetsrv\config" attrib "C:\Windows\System32\inetsrv\config\applicationHost.config"
  3. 共有構成の有無を確認(有効ならまず共有パスの可用性を回復)。
    • IIS マネージャー(サーバー直下)→「共有構成」
    • または C:\Windows\System32\inetsrv\config\redirection.config を確認
  4. C:\inetpub\history にバックアップがあるか照会。 dir /ad "C:\inetpub\history" dir /b /od "C:\inetpub\history\CFGHISTORY_*"
  5. イベントログで削除・アクセス拒否・共有エラーの痕跡を確認(Application/System、IIS-Configuration)。

復旧パスの選択ガイド

以下の優先順で判断すると、ダウンタイムを最小化しやすくなります。

  1. 共有構成が有効 → 共有パス(UNC)の復旧または一時的にローカル構成へ戻す。
  2. C:\inetpub\history にバックアップがある → 最新世代を復元。
  3. 同一 OS / IIS バージョンの別サーバーがある → ひな形としてコピーし、固有値を修正。
  4. バックアップも代替も無い → 既定ファイルを再生成(DISM / IIS 再インストール)。

詳細手順:権限(ACL)を正す

権限不整合は復元に先立って是正します。まず継承を有効化し、基本主体に付与します。

icacls "C:\Windows\System32\inetsrv\config" /inheritance:e ^
  /grant "NT SERVICE\TrustedInstaller:(F)" ^
  /grant "Administrators:(F)" ^
  /grant "SYSTEM:(F)"
  • IIS_IUSRSNETWORK SERVICE に読み取り(RX)があるかも確認。
  • 所有者が TrustedInstaller でない場合の例(必要時のみ): takeown /F "C:\Windows\System32\inetsrv\config" /A /R icacls "C:\Windows\System32\inetsrv\config" /setowner "NT SERVICE\TrustedInstaller" /T

詳細手順:バックアップから復元

  1. C:\inetpub\history\CFGHISTORY_XXXXXXXX を参照し、最も新しい世代を選択。
  2. 同フォルダー内の ApplicationHost.configapplicationHost.config にリネームしてコピー。 copy "C:\inetpub\history\CFGHISTORY_0000000XXX\ApplicationHost.config" ^ "C:\Windows\System32\inetsrv\config\applicationHost.config"
  3. IIS を再起動。 iisreset

補足:バックアップが空の場合は、履歴の保持が既定(10世代)で上書き済みか、保護ソフト/清掃ジョブで削除された可能性があります。

詳細手順:別サーバーからのコピー(テンプレート化)

同一 OS・IIS バージョン、可能なら同一ロール構成のサーバーから applicationHost.config をコピーし、環境差分を手で調整します。

コピー後に必ず見直す固有項目

項目確認・修正の要点
サイト ID / 名前<sites> 内の id(重複禁止)、name
バインドポート/ホスト名/IP、証明書の拇印(thumbprint)。
物理パスローカル/UNC の有無、権限。
アプリケーションプール存在と設定(.NET CLR、パイプライン、ID)。
モジュール・ハンドラー不要なカスタム拡張の有無。

構文と参照整合性のクイックチェック:

"%windir%\System32\inetsrv\appcmd.exe" list site
"%windir%\System32\inetsrv\appcmd.exe" list apppool

詳細手順:既定ファイルの再生成

OS 構成が破損している場合は、コンポーネント修復 → IIS の再インストールで既定の applicationHost.config を生成します。

  1. コンポーネント修復: dism /online /cleanup-image /restorehealth sfc /scannow
  2. 必要に応じて IIS の機能を一旦外し、再追加(設定を維持したい場合は事前にエクスポートを検討)。 dism /online /disable-feature /featurename:IIS-WebServerRole /Remove dism /online /enable-feature /featurename:IIS-WebServerRole /All
  3. 再生成後は iisreset を実行し、正常起動と既定サイトの応答を確認。

時短の裏技:最小構成で自動生成させる

ひとまず動く最小テンプレートが必要な場面では、空のファイルを置いてから appcmd で構成操作を促すと自動生成されます。

type nul > "C:\Windows\System32\inetsrv\config\applicationHost.config"
"%windir%\System32\inetsrv\appcmd.exe" add site /name:dummy /bindings:http/*:8080: /physicalPath:C:\inetpub\wwwroot

その後、正規の設定へ書き換えてください(テンプレートは最小限です)。

IIS のリセットと検証ポイント

  • applicationHost.config 復元後に iisreset を実施(空の状態では効果なし)。
  • バインドの整合性(重複ポート・重複ホスト名)。
  • SSL バインドと証明書の拇印(netsh http show sslcert)。
  • アプリケーションプールの起動(停止→開始、イベントログにエラーがないか)。

共有構成(Shared Configuration)起因の典型例

共有構成を有効にしているサーバーでは、applicationHost.config はローカルではなく共有先を参照します。共有が切断・資格情報失効・SMB ポリシー変更などで読めなくなると、保存不可・消失に類似した挙動になります。

診断の要点

  • IIS マネージャーの「共有構成」で有効か確認。
  • redirection.config に UNC パスが記載されていないか確認。
  • 共有先の可用性(ネットワーク/認証/権限)を回復。
  • 緊急時は一時的に無効化してローカル構成に戻し、復旧後に再有効化。

イベントログとセキュリティログで削除トリガーを特定

  • アプリケーション/システム:WAS/IIS 構成エラー、アクセス拒否。
  • アプリケーションとサービスログ → Microsoft → Windows → IIS-Configuration(Operational)。
  • セキュリティ製品(AV/EDR)の隔離ログ。
  • グループポリシーや構成管理ツールの配布ログ。

恒久対策:消えない・戻せる・気づけるの三本柱

1) 消えない:権限・除外

  • C:\Windows\System32\inetsrv\config を誤検知しないよう、保護製品に適切な除外を設定。
  • 運用スクリプトは削除対象のパスをホワイトリスト方式で厳格化。

2) 戻せる:履歴の増加とオフサーバーバックアップ

IIS の履歴は既定で 10 世代。クリティカルなサーバーでは世代数の引き上げと外部保管を推奨します。

"%windir%\System32\inetsrv\appcmd.exe" add backup "daily-%DATE%"

タスクスケジューラで毎日実行し、生成フォルダーを別ボリューム/別サーバーへコピーします。

3) 気づける:変更監査とアラート

  • 監査ポリシー「オブジェクトアクセス」を有効化し、構成フォルダーへ成功・失敗の監査を設定。
  • SIEM/ログ分析で削除イベントや権限変更を検知し、即時通知。

よくある追加質問(FAQ)

質問回答
他サーバーの applicationHost.config をそのまま流用してよいか?可能。ただしサイト ID、物理パス、証明書バインド等の固有値を編集しないと起動時エラーになります。コピー後は appcmd list site で構文確認を。
iisreset だけで直るか?ファイル自体が無い場合は効果がありません。復元または再生成後にサービス再起動が必要です。
ファイル消失を引き起こす具体的な更新プログラムは?2025年3月頃の KB5032974 で一部報告があります(公式公表は無し)。影響が疑われる場合はアンインストールまたは置き換えを検討してください。
セキュリティ製品が原因か判別する方法は?当該時刻の隔離ログ、リアルタイム保護を一時停止 → ファイル復元 → 再保存で再現有無を確認します。
履歴(C:\inetpub\history)が作られないのは?既定設定の変更・権限不足・共有構成の有効化などが原因です。復旧後に履歴の世代数や保存先を見直してください。
32bit/64bit の appcmd はどちらを使う?基本は 64bit(%windir%\System32\inetsrv\appcmd.exe)。混在環境ではコマンドパスを明示しましょう。
一時的に空ファイルを置くのは安全?緊急避難としては有効ですが、テンプレートは最小限です。正規設定への置換を前提にしてください。

実運用で役立つコマンド集(そのまま貼り付け可)

権限の標準化と読み取り付与

icacls "C:\Windows\System32\inetsrv\config" /inheritance:e ^
  /grant "NT SERVICE\TrustedInstaller:(F)" ^
  /grant "Administrators:(F)" ^
  /grant "SYSTEM:(F)" ^
  /grant "IIS_IUSRS:(RX)" ^
  /grant "NETWORK SERVICE:(RX)"

バックアップの取得・復元

"%windir%\System32\inetsrv\appcmd.exe" add backup "manual-%DATE%-%TIME%"
"%windir%\System32\inetsrv\appcmd.exe" list backup
"%windir%\System32\inetsrv\appcmd.exe" restore backup "manual-XXXX"

サイト・アプリプールの健全性チェック

"%windir%\System32\inetsrv\appcmd.exe" list site
"%windir%\System32\inetsrv\appcmd.exe" list apppool
netsh http show sslcert
netsh http show urlacl

PowerShell:毎日バックアップ+世代管理のサンプル

# 保存先:D:\IIS-Config-Backup\<yyyyMMdd> に世代保管
$stamp = Get-Date -Format 'yyyyMMdd'
$dst   = "D:\IIS-Config-Backup\$stamp"
New-Item -ItemType Directory -Force -Path $dst | Out-Null
& "$env:windir\System32\inetsrv\appcmd.exe" add backup "daily-$stamp"
Copy-Item "C:\inetpub\history\CFGHISTORY_*" $dst -Recurse -Force
# 30世代を超えた分を削除
Get-ChildItem "D:\IIS-Config-Backup" | Sort-Object Name -Descending | Select-Object -Skip 30 | Remove-Item -Recurse -Force

変更管理とロールバック設計の勘所

  • Windows Update 適用前に VM スナップショットまたはボリュームレベルのスナップショットを取得。
  • IIS 構成変更は「エビデンス(差分)」+「即時バックアップ(appcmd add backup)」をセットで。
  • 共有構成や自動デプロイ(CI/CD)を併用する場合、構成の単一系統化(ソースオブトゥルース)を徹底。

トラブルシュートのフロー(テキスト版)

  1. 共有構成の有無を判定(有効なら共有障害を先に解決)。
  2. 構成フォルダーの ACL を標準化。
  3. C:\inetpub\history にバックアップがあれば復元。
  4. なければ同型サーバーからテンプレートコピー → 固有値修正。
  5. それも不可なら DISM/SFC → IIS 再インストールで再生成。
  6. iisresetappcmd チェック → 動作検証。
  7. 原因(更新、AV、スクリプト、監査)をログで特定し、恒久対策。

まとめ

applicationHost.config の消失は、原因が多岐にわたる一方で復旧の型は明確です。共有構成の判定 → 権限の是正 → バックアップ復元 → テンプレート適用 → 再生成 の順で迷わず進め、復旧後は履歴拡充・監査・除外設定の三点で再発を防ぎましょう。Windows Update 起因の可能性が疑われる場合も、更新のロールバックや置き換えで影響を遮断しつつ、構成の「消えない・戻せる・気づける」を実装することが最短の安定運用に直結します。

この記事を書いた人

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

コメント

コメントする

目次