シングル サインオン (SSO) の方法は、アプリケーションによって異なります。 Microsoft Entra アプリケーション プロキシは、既定で Kerberos の制約付き委任 (KCD) を提供します。 アプリケーション プロキシでは、ユーザーは Kerberos を使用してプライベート アプリケーションに対して認証を行います。
この記事では、KCD 構成で最も一般的な問題をトラブルシューティングする方法について説明します。 これには、より複雑な実装に対して実行できる診断手順が含まれています。
この記事は以下を前提としています。
Microsoft Entra アプリケーション プロキシがデプロイされ、KCD 以外のアプリケーションに一般的にアクセスできます。
詳細については、「 アプリケーション プロキシの概要」を参照してください。
発行されたアプリケーションは、インターネット インフォメーション サービス (IIS) と Kerberos の Microsoft 実装に基づいています。
サーバーホストとアプリケーション ホストは、単一の Microsoft Entra ドメイン内にあります。
ドメイン間およびフォレスト間のシナリオの詳細については、ホワイト ペーパー「 アプリケーション プロキシを使用した Kerberos の制約付き委任について」を参照してください。
アプリケーションは、事前認証が有効になっている Microsoft Entra テナントで発行されます。 ユーザーは、フォーム ベースの認証を使用して認証する必要があります。
リッチ クライアント認証のシナリオについては、この記事では説明しません。
考慮事項
次の一覧では、KCD の構成と Microsoft Entra アプリケーション プロキシでの使用に関する基本的な考慮事項について説明します。
基本的な構成ミスや一般的な間違いは、ほとんどの問題を引き起こします。 トラブルシューティングを開始する前に、「 アプリケーション プロキシで KCD SSO を使用する」のすべての前提条件を確認してください。
コネクタ ホストは、特定のローカル サイト ドメイン コントローラー (DC) とのみ通信するように制限されません。 変更される可能性があるため、使用する DC を確認します。
クロスドメイン シナリオは、コネクタ ホストをローカル ネットワーク境界の外部にある可能性のある DC に誘導する紹介に依存します。 このような場合は、他の各ドメインを表す DC にトラフィックを送信することが同様に重要です。 そうしないと、委任は失敗します。
コア リモート プロシージャ コール (RPC) トラフィックとの干渉による、コネクタ ホストとドメイン コントローラー (DC) 間のアクティブな侵入防止システム (IPS) または侵入検出システム (IDS) デバイスの回避。
単純なシナリオで委任をテストします。 シナリオで導入する変数が多いほど、より複雑な構成とトラブルシューティングが行われます。 時間を節約するには、テストを 1 つのコネクタに制限します。 問題が解決したら、コネクタを追加します。
環境要因は、問題の原因に寄与する可能性があります。 これらの要因を回避するには、テスト中に可能な限りアーキテクチャを最小限に抑えます。 たとえば、内部ファイアウォールアクセス制御リスト (ACL) が正しく構成されていないのが一般的です。 可能であれば、コネクタからすべてのトラフィックを DC およびバックエンド アプリケーションに直接送信します。
コネクタを配置する最適な場所は、ターゲットにできるだけ近い場所です。 コネクタをテストするときにインラインに配置されるファイアウォールは、不要な複雑さを増し、調査を長引く可能性があります。
KCD の問題を示す内容 いくつかの一般的なエラーは、KCD SSO が失敗していることを示しています。 問題の最初の兆候がブラウザーに表示されます。
次の両方のスクリーンショットは、SSO エラーの同じ現象を示しています。アプリケーションへのユーザー アクセスが拒否されています。
トラブルシューティング
KCD の問題のトラブルシューティングは、3 つの段階で行うことができます。 KCD プロセスのこれらの部分を次の順序で確認します。
- クライアントの事前認証
- 委任サービス
- ターゲット アプリケーション
クライアントの事前認証
クライアント事前認証 とは、ブラウザーを介してアプリケーションで認証を行う外部ユーザーのことです。 KCD SSO を機能させるには、Microsoft Entra ID に対する事前認証を行う機能が必要です。
最初にクライアントの事前認証をテストし、問題を解決します。 事前認証ステージは、KCD または公開されたアプリケーションには関係ありません。 Microsoft Entra ID にサブジェクト アカウントが存在することを確認することで、不一致を簡単に修正できます。 アプリケーションが使用できないかブロックされていないことを確認します。 通常、ブラウザーでのエラー応答は、原因を説明するのに十分な説明です。
委任サービス
Kerberos 委任サービスは、Kerberos キー配布センター (KDC) から Kerberos サービス チケットを取得するプライベート ネットワーク コネクタです。 アプリ ユーザーは、チケットを使用してアプリケーションで認証を行います。
クライアントと Azure フロントエンド間の外部通信は、制約付き委任には影響しません。 これらの通信により、KCD が動作することだけが保証されます。 アプリケーション プロキシ サービスには、Kerberos チケットを取得する有効なユーザー ID が与えられます。 この ID がないと、KCD は発生できず、SSO は失敗します。
ブラウザーのエラー メッセージは、サインインが失敗する理由に関する有用な情報を提供します。 アプリケーションのサインインへの応答で、 TransactionID
と Timestamp
の値を記録します。 この情報は、動作をアプリケーション プロキシ イベント ログに表示されるイベントに関連付けるのに役立ちます。
イベント ログ内の対応するエントリは、イベント ID 13019 または 12027 です。 コネクタ イベント ログを表示するには、 Applications and Services Logs>Microsoft>Microsoft Entra private network>Connector>Admin に移動します。
制約付き委任の問題をトラブルシューティングするには:
- アプリケーション アドレスの内部ドメイン ネーム システム (DNS) で、CNAME レコードではなく A レコードを使用します。
- コネクタ ホストが、ターゲット アカウントのサービス プリンシパル名 (SPN) に委任するアクセス許可で構成されていることを確認します。 [ 任意の認証プロトコルを使用する ] が選択されていることを確認します。 詳細については、 SSO の構成に関するページを参照してください。
- Microsoft Entra ID に SPN のインスタンスが 1 つだけ存在することを確認します。 1 つの SPN を確認するには、任意のドメイン メンバー ホストのコマンド プロンプトで、
setspn -x
を実行します。 - 発行された Kerberos トークンの最大サイズを制限するドメイン ポリシーが適用されていることを確認します。 トークン サイズが設定された最大値を超えると、ポリシーによってコネクタがトークンを取得できなくなります。
- コネクタ ホストとドメイン KCD の間の交換をキャプチャするネットワーク トレースを実行することは、問題の詳細を取得するための次の最適な手順です。 詳細については、 Microsoft Entra アプリケーション プロキシのトラブルシューティングに関するホワイト ペーパーを参照してください。
チケットが正常に動作している場合、アプリケーションが 401 エラーを返したために認証に失敗したことを示すイベントがログに表示される可能性があります。 このイベントは、ターゲット アプリケーションがチケットを拒否したことを示します。 トラブルシューティングの次の段階に進みます。
アプリケーション
ターゲット アプリケーションは、コネクタによって提供される Kerberos チケットを処理します。 この段階では、コネクタは、バックエンドへの最初のアプリケーション要求のヘッダーとして Kerberos サービス チケットを含めます。
アプリケーションの問題をトラブルシューティングするには:
アプリケーションにアクセスできることを確認します。 Azure portal で定義されている内部 URL を使用して、コネクタ ホスト上のブラウザーから直接サインインします。 サインインが成功すると、アプリケーションにアクセスできます。
ブラウザーとアプリケーションが認証に Kerberos を使用しているかどうかを確認します。 コネクタ ホストから、Internet Explorer の DevTools ( F12 キーを押す) または Fiddler を使用して、内部 URL を介してアプリケーションにアクセスします。 アプリケーションの応答で、Web 承認ヘッダーで "Negotiate" または "Kerberos" を探します。
アプリケーションに対するブラウザーの応答には、
YII
で始まる Kerberos BLOB が含まれています。Kerberos が実行されていることを確認します。 これに対し、Microsoft NT LAN Manager (NTLM) からの応答は常にTlRMTVNTUAAB
で始まります。 Base64 からデコードされると、この応答は NTLM セキュリティ サポート プロバイダー (NTLMSSP) を読み取ります。 BLOB がTlRMTVNTUAAB
で始まる場合、Kerberos は使用できません。 そうでない場合は、Kerberos を使用できる可能性があります。注
Fiddler を使用する場合は、IIS のアプリケーション構成で拡張保護を一時的に無効にする必要があります。
このスクリーンショットの BLOB は、
TIRMTVNTUAAB
で始まらない。 そのため、この例では Kerberos を使用でき、Kerberos BLOB はYII
で始まらないのです。IIS サイトで、プロバイダーの一覧から NTLM を一時的に削除します。 コネクタ ホスト上の Internet Explorer から直接アプリにアクセスします。 NTLM はプロバイダーの一覧に表示されなくなったため、Kerberos を使用してのみアプリケーションにアクセスできます。 アクセスに失敗した場合は、アプリケーションの構成に関する問題が示されます。 アプリケーションが Kerberos 認証を処理していません。
Kerberos を使用できない場合は、IIS でアプリケーションの認証設定を確認します。 ネゴシエートが一番上に表示され、NTLM がそのすぐ下にあることを確認します。 Not Negotiate、Kerberos、Negotiate、または PKU2U が表示される場合は、Kerberos が機能している場合にのみ続行します。
Kerberos と NTLM が設定された状態で、ポータルでアプリケーションの事前認証を一時的に無効にします。 外部 URL を使用して、ブラウザーでアプリケーションにアクセスしてみてください。 認証を求められます。 前の手順で使用したのと同じアカウントを使用します。 認証とサインインができない場合は、KCD ではなくバックエンド アプリケーションに問題があります。
ポータルで事前認証を再度有効にします。 外部 URL を介してアプリケーションに接続を試みることで、Azure 経由で認証します。 SSO が失敗すると、ブラウザーに "禁止" というエラー メッセージが表示され、ログにイベント ID 13022 が表示されます。
Microsoft Entra private network connector can't authenticate the user because the backend server responds to Kerberos authentication attempts with an HTTP 401 error.
IIS アプリケーションを確認します。 構成されているアプリケーション プールと SPN が、Microsoft Entra ID で同じアカウントを使用するように構成されていることを確認します。 IIS で、次のスクリーンショットに示すようにフォルダーに移動します。
ID を確認し、このアカウントが SPN で構成されていることを確認します。 たとえば、コマンド プロンプトで
setspn –q http/spn.contoso.com
を実行します。ポータルで、定義されている SPN をアプリケーション設定と照合します。 アプリケーションのアプリ プールで、ターゲットの Microsoft Entra アカウントに設定されているのと同じ SPN が使用されていることを確認します。
IIS で、アプリケーションの [構成エディター] オプションを選択します。 system.webServer/security/authentication/windowsAuthentication に移動します。 UseAppPoolCredentials の値が True であることを確認します。
必要に応じて、値を True に変更します。 次のコマンドを実行して、キャッシュされたすべての Kerberos チケットをバックエンド サーバーから削除します。
Get-WmiObject Win32_LogonSession | Where-Object {$_.AuthenticationPackage -ne 'NTLM'} | ForEach-Object {klist.exe purge -li ([Convert]::ToString($_.LogonId, 16))}
カーネル モードが有効になっている場合、Kerberos 操作が向上します。 ただし、要求されたサービスのチケットも、マシン アカウントを使用して復号化する必要があります。 このアカウントは 、ローカル システムとも呼ばれます。 アプリケーションがファーム内の複数のサーバーでホストされている場合に KCD を中断するには、この値を True に設定します。
もう 1 つのチェックとして、拡張保護を無効にします。 一部のテスト シナリオでは、特定の構成で KCD が有効になっていると、拡張保護が KCD を壊しました。 このような場合、アプリケーションは既定の Web サイトのサブフォルダーとして発行されました。 このアプリケーションは、匿名認証専用に構成されています。 すべてのダイアログは非アクティブであり、使用可能な選択は行われません。これは、子オブジェクトがアクティブな設定を継承しないことを示唆しています。 テストすることをお勧めしますが、可能であれば、この値を 必ず有効 に復元してください。
この追加のチェックにより、発行されたアプリケーションを使用する体制が整います。 委任するように構成されたコネクタをさらに生成できます。 詳細については、 Microsoft Entra アプリケーション プロキシのトラブルシューティングに関する詳細な技術チュートリアルを参照してください。
それでもアプリケーション認証の問題を解決できない場合は、ポータルで直接サポート チケットを作成します。
その他のシナリオ
Microsoft Entra アプリケーション プロキシは、アプリケーションに要求を送信する前に Kerberos チケットを要求します。 一部のアプリケーションでは、この認証方法がサポートされていません。 これらのアプリケーションは、より従来の認証手順に対応するように設定されています。 最初の要求は匿名です。これにより、アプリケーションは 401 エラーによってサポートされる認証の種類で応答できます。 SSO の Kerberos 制約付き委任に関するページで説明されている手順を完了することで、この種類の Kerberos ネゴシエーションを設定できます。
マルチホップ認証は、アプリケーションが階層化されている場合に一般的に使用されます。 レベルには、バックエンドとフロントエンドが含まれます。 どちらの層でも認証が必要です。 たとえば、SQL Server Reporting Services を使用して階層化されたアプリケーションを作成できます。 詳細については、「 Web 登録プロキシ ページの Kerberos の制約付き委任を構成する方法」を参照してください。