krbtgt アカウントの TGS 要求がKDC_ERR_POLICYで失敗し、STATUS_AUTHENTICATION_FIREWALL_FAILEDの拡張状態 (0xC0000413)
この記事では、信頼されたフォレスト内のユーザーに対して S4U Kerberos 認証が失敗する問題を解決するためのヘルプを提供します。
適用対象: Windows Server 2012 R2、Windows Server 2008 R2 Service Pack 1
元の KB 番号: 2959395
現象
フォレストの信頼で選択的認証が有効になっている場合、信頼されたフォレスト内のユーザーに対して S4U Kerberos 認証が失敗します。
具体的には、Kerberos S4U クライアント要求を使用して LsalogonUser API を呼び出して信頼されたフォレスト内のユーザーを認証するアプリケーションは、次の条件が満たされると失敗する可能性があります。
- LsalogonUser に提供される ClientUPN 値は、選択的認証が有効になっている信頼されたフォレスト内のユーザーを表します。
- LsalogonUser に提供される ClientRealm 値は、完全修飾ドメイン名 (FQDN) ではなく、NetBIOS 名 (フラット名) の形式です。
この状況では、ネットワーク トレースは、krbtgt アカウントの TGS 要求が "STATUS_AUTHENTICATION_FIREWALL_FAILED (0xC0000413)" エラーで失敗したことを示します。
原因
この問題は、LsalogonUser 要求の処理の一環として、Kerberos クライアントがユーザーの信頼されたフォレスト内のドメイン コントローラーからユーザーの認証チケットを取得する必要がある場合に発生します。
ClientRealm 値がフラット名形式で渡された場合、Kerberos クライアントは、紹介プロセスの一部として受信した紹介チケットを使用しません。 そのため、クライアントはユーザー ドメインの Krbtgt アカウントのサービス チケットを要求する必要があります。
選択的認証が有効になっている場合、ユーザーのドメイン内のドメイン コントローラーは、Krbtgt アカウントの "認証を許可する" アクセス許可をチェックして、チケット要求を行っている呼び出し元の ID にアクセスできるかどうかを確認します。
注:
サービス チケット要求を行う呼び出し元には、LsalogonUser を呼び出すスレッドが、その時点で偽装していた ID があります。
"認証を許可する" アクセス許可が存在しない場合、ユーザーのドメイン内のドメイン コントローラーは、KDC_ERR_POLICY エラーとSTATUS_AUTHENTICATION_FIREWALL_FAILEDの拡張エラー (0xC0000413) を生成します。
解決方法
この問題を解決するには、以下のいずれかの手順を実行します。
方法 1: 信頼から選択的認証を削除する
ターゲット リソース ドメイン内のドメイン コントローラーは、アカウントに対する "認証を許可する" アクセス許可を無視します。 この動作は、セキュリティで保護された環境では望ましくない場合があります。
方法 2: 呼び出し元の ID を、ターゲット ユーザーのドメインの Krbtgt アカウントの "認証を許可する" アクセス許可に追加します
Krbtgt アカウントは保護されたアカウントであるため、呼び出し元の ID の "認証許可" アクセス許可を AdminSdHolder アカウント オブジェクトに追加する必要があります。 これを行うには、次の手順を実行します。
ターゲット ユーザーのドメイン内のドメイン コントローラーでコマンド プロンプトを開きます。
次のコマンドを実行して、AdminSdholder オブジェクトに "認証を許可する" アクセス許可を追加します。
dsacls "CN=AdminSDHolder,CN=System,DC=ForestB,DC=com" /G DomainA\callers-identity:CA;"Allowed to Authenticate"
注:
- DC=ForestB、DC=com は、ユーザーのターゲット フォレストの識別名です。
- DomainA は、LsaLogonUser を呼び出しているアカウントの ID が配置されているドメインの名前です。
- Callers-identity は、LsaLogonUser 呼び出しが行われている ID のアカウント名です。
次のコマンドを実行して、ターゲット アカウントの "認証を許可する" アクセス許可を確認します。
dsacls "CN=AdminSDHolder,CN=System,DC=ForestB,DC=com"
ユーザーのターゲット ドメインで dsa.msc を実行し、Krbtgt アカウントを見つけます。
ターゲット アカウントのプロパティを選択し、[ セキュリティ ] タブをクリックします。
LsaLogonUser 呼び出しが行われているアカウントに "認証を許可する" アクセス許可を追加します。
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示