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 アカウント オブジェクトに追加する必要があります。 これを行うには、次の手順を実行します。

  1. ターゲット ユーザーのドメイン内のドメイン コントローラーでコマンド プロンプトを開きます。

  2. 次のコマンドを実行して、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 のアカウント名です。
  3. 次のコマンドを実行して、ターゲット アカウントの "認証を許可する" アクセス許可を確認します。

    dsacls "CN=AdminSDHolder,CN=System,DC=ForestB,DC=com"
    
  4. ユーザーのターゲット ドメインで dsa.msc を実行し、Krbtgt アカウントを見つけます。

  5. ターゲット アカウントのプロパティを選択し、[ セキュリティ ] タブをクリックします。

  6. LsaLogonUser 呼び出しが行われているアカウントに "認証を許可する" アクセス許可を追加します。