AD FS 2.0 サービスの開始に失敗する
この記事では、ADFS サービスの構成とスタートアップの問題のトラブルシューティング手順について説明します。
元の KB 番号: 3044973
概要
ADFS 2.0 の問題のほとんどは、次のいずれかの主要なカテゴリに属しています。 この記事では、ADFS サービスの問題をトラブルシューティングする手順について説明します。
現象
AD FS サービスが起動しません。
AD FS サービスは開始されますが、再起動後に次のエラーが AD FS 管理者ログに記録されます。
- イベント ID: 220
フェデレーション サービス構成を AD FS 構成データベースから正しく読み込めませんでした。 - イベント ID: 352
接続文字列 %1 の AD FS 構成データベースでの SQL Server 操作が失敗しました。 - イベント ID: 102
フェデレーション サービスのエンドポイントを有効にする際にエラーが発生しました。
- イベント ID: 220
解決方法
この問題を解決するには、指定された順序で次の手順に従います。 これらの手順は、問題の原因を特定するのに役立ちます。 すべてのステップの後で問題が解決されるかどうかを確認してください。
手順 1: 起動時に AD FS サービスがタイムアウトするかどうかを確認する
AD FS サービスの起動時にタイムアウトすると、次のエラー メッセージが表示されます。
サービスは、開始要求または制御要求にタイムリーに応答しませんでした。
AD FS サービス時間を修正する
コントロール キーの ServicesPipeTimeout DWORD 値の値データを 60000 に変更します。 これを行うには、次の手順を実行します。
AD FS サーバーで、レジストリ エディターを開きます。
次のレジストリ キーを見つけてクリックします。
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet
[コントロール] サブキーをクリックします。
[ServicesPipeTimeout DWORD] の値を右クリックし、[変更] をクリックします。 ServicesPipeTimeout 値がない場合は、作成します。
[ Decimal] をクリックします。
「60000」と入力し、[OK] をクリックします。 このタイムアウト エラーの詳細については、「 AD FS 2.0: サービスが開始に失敗しました: "サービスが開始要求または制御要求にタイムリーに応答しませんでした」を参照してください。
手順 2: AD FS 構成データベースが実行されているかどうかを確認する
AD FS 構成データベースとして Windows Internal Database (WID) を使用している場合は、services.msc を開き、Windows 内部データベース サービスが実行されているかどうかを確認します。
AD FS 構成データベースとして SQL Server サービスを使用している場合は、services.msc を開きます。 SQL Server サービスが実行されているかどうかを確認します。 Test.udl ファイルを作成し、接続文字列を設定して Microsoft SQL Server への接続をテストすることもできます。
修正方法
Services.msc を開き、Windows 内部データベース サービスまたは SQL Server サービスを開始します。
構成データベースとして SQL Server を使用する AD FS サーバーの場合は、次のように 2 つのセキュリティ設定も確認する必要があります。
SQL Management Studio を使用して、SQL Server を実行しているサーバーに接続します。
[ セキュリティ>ログイン ] ノードの SQL Server コンソールに AD FS 2.0 Windows サービス ID が存在するかどうかを確認します。 そうでない場合は、追加します。
AD FS 2.0 Windows サービス ID が データベース>AdfsConfiguration>セキュリティ>ユーザーの下に存在するかどうか、および IdentityServerPolicy スキーマを所有しているかどうかを確認します。 そうでない場合は、追加します。
手順 3: AD FS サービス アカウントを確認する
AD FS サービスと IIS AppPool が有効なサービス アカウントで実行されているかどうかを確認します。 サービス アカウントのパスワードを変更した場合は、AD FS サービスと IIS AppPool で新しいパスワードが更新されていることを確認します。
Services.msc を開き、[ AD FS 2.0 Service] を右クリックし、[ プロパティ] をクリックします。 [ログオン] タブ で 、[ このアカウント ] ボックスに新しい AD FS サービス アカウントが一覧表示されていることを確認します。
IIS マネージャーを開き、[ アプリケーション プール] に移動し、[ ADFSAppPool] を右クリックし、[ 詳細設定] をクリックします。 [ プロセス モデル ] セクションで、新しい AD FS サービス アカウントが ID として一覧表示されていることを確認します。
サービス アカウントに AD FS データベースに十分なアクセス許可があるかどうかを確認します。 ADFS が実行されているサービス アカウントを変更した場合は、アクセス許可について心配する必要があります。
構成サーバーとして SQL Server を使用している場合は、次の手順に従ってサービス アカウントのアクセス許可をリセットします。
コマンド プロンプトで、次のコマンドを実行します。
fsconfig.exe /CreateSQLScripts /ServiceAccount <ADFS service account> /ScriptDestinationFolder <path to create scripts>
作成したスクリプトを、SQL Server を実行しているサーバーにコピーします。
サーバーでスクリプトを実行します。
サービス アカウントに (CN=GUID>、CN=ADFS、CN=Microsoft、CN=<Program Data、DC=<Domain>、DC=<COM>) 証明書共有コンテナーに対する読み取りと変更のアクセス許可があるかどうかを確認します。
ドメイン コントローラーで、ADSIEDIT.msc を開きます。
既定の名前付けコンテキストに接続します。
CN=<GUID>、CN=ADFS、CN=Microsoft、CN=Program Data、DC=<Domain>、DC=<COM> に移動します。 GUID の例としては、62b8a5cb-5d16-4b13-b616-06caea706ada があります。
GUID を右クリックし、[ プロパティ] をクリックします。 複数の GUID がある場合は、次の手順に従って、AD FS サービスを実行しているサーバーの GUID を見つけます。
AD FS サービスを実行しているサーバーで、Windows PowerShell を起動します。
以下のコマンドを実行します。
Add-PSSnapin microsoft.adfs.powershell Get-ADFSProperties
GUID は CertificateShareingContainer の下に一覧表示されます。
新しいサービス アカウントに AD FS サービス通信証明書の秘密キーに対する読み取りアクセス許可があるかどうかを確認します。
- ローカル コンピューター証明書ストアを対象とする証明書スナップインを使用して、Microsoft 管理コンソール (MMC) を作成します。
- MMC を展開し、[ 秘密キーの管理] を選択します。
- [ セキュリティ ] タブで、AD FS サービス アカウントを追加し、このアカウントに読み取りアクセス許可を付与します。
AD FS サービス プリンシパル名 (SPN) HOST/ADFSServiceName がサービス アカウントの下に追加され、(サービス アカウントが変更された場合に備えて) 以前のアカウントから削除されたかどうかを確認します。
- [コマンド プロンプト] を右クリックし、[管理者として実行] をクリックします。
- [
SetSPN -f -q host/ <Federation service name>
]と入力して、Enter キーを押します。
このコマンドでは、フェデレーション サービス名>は、<AD FS サービス エンドポイントの完全修飾ドメイン名 (FQDN) サービス名を表します。 サービス名は、[ フェデレーション サービスのプロパティ ] ダイアログ ボックスにあります。
アカウントから SPN を追加または削除するには、次の手順に従います。
ドメイン コントローラーで、ADSIEDIT.msc を開きます。
既定の名前付けコンテキストに接続します。
CN=Users、CN=Microsoft、CN=Program Data、DC=<Domain>、DC=<COM> に展開します。
サービス アカウントを見つけます。 サービス アカウントを右クリックし、[ プロパティ] をクリックします。
servicePrincipalName 属性を見つけて、[編集] をクリックします。
AD FS サービス SPN を追加または削除します。 AD FS サービス SPN の例を次に示します。
HOST/newadfs.contoso.com
サービス アカウントのパスワードを変更する場合は、AD FS サービスと IIS AD FS AppPool で新しいパスワードが更新されていることを確認します。
AD FS サービス アカウントがローカル管理者グループに含まれているかどうかを確認します。 潜在的な問題を回避するには、AD FS サービス アカウントにローカル管理者権限を付与します。
手順 4: AD FS サービスを最新バージョンに更新する
次の更新プログラムがインストールされているかどうかを確認します。 インストールされていない場合は、インストールします。
- ADFS 2.0 のロールアップ更新プログラム 2
- ADFS 2.0 のロールアップ更新プログラム 3
- AD FS サーバーにセキュリティ更新プログラムの2843638をインストールした後、更新プログラムを使用していくつかの問題を解決できます
手順 5: 断続的な AD FS サービスエラーを修正する
断続的な AD FS サービスエラーが発生した場合は、セキュリティ更新プログラムの2894844が適用された後に問題が開始されたかどうかを確認します。 このような状況では、AD FS は失敗し、外部ネットワークから、またはフォーム ベースの通信を介してアクセスされるときに参照番号を生成します。
セキュリティ更新プログラムの2894844が適用された後に問題が発生した場合は、「ビューステート メッセージ認証コード (MAC) エラーの解決」の「原因 1: Web アプリケーションがファーム (マルチサーバー環境) で実行されている」セクションで説明されている問題が発生している可能性があります。
この問題を解決するには、すべての AD FS サーバーと AD FS プロキシで同じ静的マシン キーを設定します。
- IIS マネージャーで、adfs/ls フォルダーを見つけて開きます。
- [ASP.NET] セクションで、[ マシン キー] をクリックします。
- [実行時に自動的に生成する] チェック ボックスをオフにし、[検証キー] と [復号化キー] の両方の [アプリケーションごとに一意のキーを生成する] チェック ボックスをオフにします。
- [ キーの生成] をクリックします。
- [適用] をクリックします。
- 最初の AD FS サーバーから検証キーと復号化キーをコピーし、これらのキーを他のすべてのサーバーに貼り付けます。
手順 6: ADFS サービス通信、トークン署名、トークン暗号化解除の証明書が正しく構成されていることを確認する
詳細については、「 ADFS 2.0 証明書エラー: 証明書チェーンの構築中にエラーが発生しました」を参照してください。