KDC_ERR_S_PRINCIPAL_UNKNOWNエラーとKDC_ERR_PRINCIPAL_NOT_UNIQUE エラーは、クライアントが Kerberos で識別できないサービスへのアクセスを要求していることを示します。 この種のエラーは、次の 1 つ以上の問題を示します。
- サービス アカウントが正しく構成されていません。
- サービスが、そのサービス用に構成されているサービス アカウントを使用していません。
- サービスに対して複数のアカウントが構成されています。
- クライアントがサービスを正しく要求しませんでした。
各サービスには、クライアントやその他のサービスに識別するサービス プリンシパル名 (SPN) があります。 SPN は、サービスが使用する Active Directory Domain Services (AD DS) アカウントの属性です。 サービスは、カスタム サービス アカウントのコンテキスト、または組み込みアカウントのコンテキスト (ローカル コンピューターのコンピューター アカウントなど) で実行できます。 また、ローカル システムやネットワーク サービスなど、コンピューター アカウントに関連するセキュリティ コンテキストでサービスを実行することもできます。
SPN の構成方法は、サービスが使用するアカウントの種類によって異なります。
- カスタム サービス アカウントには、アカウントを使用するサービスごとに明示的な SPN が必要です。
- コンピューター アカウントには、それを使用するサービス用に構成された明示的な SPN が含まれている場合があります。 ただし、一般的なサービス クラスは自動的に HOST SPN にマップされます。 HOST SPN は、コンピューター アカウントごとに自動的に生成されます。 このような場合、一部のサービスには、コンピューター アカウントで構成された独自の SPN がない場合があります。
Von Bedeutung
- サービスがコンピューター アカウントと HOST SPN を使用しない限り、SPN は AD DS フォレスト内で一意である必要があります。 マルチフォレスト環境では、SPN は関連付けられているすべてのフォレストで一意である必要があります。
- 1 つの SPN を関連付けることができるアカウントは 1 つだけです。 SPN の問題の一般的な原因は、SPN がカスタム アカウントとコンピューター アカウントの両方に関連付けられている場合でも、カスタム アカウントを使用するようにサービスを構成することです。
トレース データを収集し、問題の SPN を特定する
問題のトレース データをまだ収集していない場合は、今すぐ収集します。 詳細については、「 Kerberos 認証のトラブルシューティング ガイダンス: 3.トレースとチケット データを収集する」を参照してください。 トレース データを調べて、クライアントが要求した SPN を見つけます。
サービス アカウントが使用する SPN を確認する
これらの手順は、サービスがカスタム アカウントとコンピューター アカウントのどちらを使用するかによって若干異なります。 次の表は、その違いをまとめたものです。
サービスでカスタム アカウントを使用する | サービスがコンピュータ アカウントを使用する |
---|---|
要求された SPN は、アカウント SPN と一致する必要があります。 SPN はフォレスト内で一意である必要があります。 |
要求された SPN は、いずれかのアカウント SPN と一致する可能性があります。 ただし、一般的なサービス (Web サービスなど) では、通常、一意の SPN ではなく、自動 HOST SPN が使用されます。 アカウントにサービスに固有の SPN がある場合、その SPN はフォレスト内で一意である必要があります。 |
サービス アカウントに割り当てられている SPN の一覧を取得します。 これを行うには、ドメイン コントローラーで管理コマンド プロンプト ウィンドウを開き、次のコマンドを実行します。
setspn -L <Name>
注
- このコマンドでは、 <Name> は、サービスを実行するコンピューターまたはサービスが使用するカスタム アカウントの名前を表します。
- マルチドメイン環境では、 <Domain\Name> 形式を使用して、アカウントのドメインを指定します。
要求された SPN を使用するすべてのアカウントを検索します。 この検索では、正しくないアカウントに割り当てられている重複する SPN または SPN が識別されます。
注
この手順を実行するには、少なくともエンタープライズ管理者のアクセス許可が必要です。
SPN に関連付けられているアカウントを特定するには、管理コマンド プロンプト ウィンドウを開き、次のいずれかのコマンドを実行します。
単一フォレスト 複数の信頼されたフォレスト setspn -Q <SPN>
setspn -X <SPN>
注
- このコマンドでは、 <SPN> は、検索する SPN を表します。
- 重複 (特にフォレスト全体) の検索には、長い時間と大量のメモリが必要な場合があります。
setspn
コマンドと使用可能なオプションの詳細については、「setspn」を参照してください。
必要に応じて SPN を再構成する
次の手順は、トレース データの結果、 setspn
クエリ、サービスで使用されるアカウントの種類によって異なります。
次のいずれかの問題が表示される場合があります。
カスタム アカウント | コンピューター アカウント |
---|---|
サービス アカウント以外の 1 つ以上のアカウントに SPN があります。 | コンピューター アカウント以外の 1 つ以上のアカウントに SPN があります。 |
カスタム アカウントに SPN がありません。 | コンピューター アカウントには SPN が必要ですが、含まれません。1 |
カスタム アカウントの SPN が正しくないか、クライアントが要求した SPN と一致しない SPN があります。2 | コンピューター アカウントに、正しくない SPN またはクライアントが要求した SPN と一致しない SPN があります。2 |
1 コンピューター アカウントの HOST SPN を使用できるサービスの一覧については、 setspn を参照してください。 サービスがこれらの一般的なサービスの 1 つでない場合は、コンピューター アカウントでサービスの SPN を構成する必要があります。
2 クライアント要求情報については、ネットワーク トレース データを参照してください。
SPN 構成を修正するには、次の方法を使用します。
サービス アカウントが正しく構成されていても、クライアントが正しくない SPN を要求した場合は、「 不整合な SPN の修正」を参照してください。
正しいサービス アカウントに SPN があり、SPN が正しくない場合は、正しくない SPN を削除してから、正しい SPN を追加します。 詳細については、「 アカウントから SPN を削除する」 および 「サービス アカウントに SPN を追加する」を参照してください。
SPN が正しいサービス アカウント (カスタム アカウントまたはコンピューター アカウント) 以外のアカウントに割り当てられている場合は、それらのアカウントから SPN を削除します。 「アカウントから SPN を削除する」を参照してください。
サービスでカスタム アカウントを使用しているが、カスタム アカウントに割り当てられている SPN がない場合は、SPN を追加します。 詳細については、「 サービス アカウントへの SPN の追加」を参照してください。
サービスでコンピューター アカウントを使用しているが、この記事で説明されている一般的なサービスの 1 つではない場合は、コンピューター アカウントに SPN を追加 します。
アカウントから SPN を削除する
アカウントから SPN を削除するには、管理コマンド プロンプトで次のコマンドを実行します。
setspn -D <SPN> <AccountName>
注
このコマンドでは、 <SPN> は削除する SPN を表します。 <AccountName> は、SPN を削除するアカウント (またはいずれかのアカウント) を表します。
サービス アカウントに SPN を追加する
アカウントに SPN を追加するには、管理コマンド プロンプトで次のコマンドを実行します。
setspn -S \<SPN> \<AccountName>
注
このコマンドでは、 <SPN> は、追加する SPN を表します。 <AccountName> は、SPN を追加するアカウント (またはいずれかのアカウント) を表します。
不整合な SPN を修正する
どのバージョンの SPN が正しいかを確認します。クライアントが要求したバージョンか、サービス アカウントで構成されているバージョンのいずれかです。
クライアントが正しくない SPN を要求している場合は、クライアントが要求の SPN を構築するために使用する情報を確認し、ソース情報が正しいことを確認します。 DNS は、この情報の一般的なソースです。 他のクライアント (特にブラウザー以外またはカスタム クライアント) は、DNS に加えて他のソースを使用する場合があります。
サービス アカウントで正しくない SPN が使用されている場合は、 サービス アカウントから SPN を削除し、 正しい SPN を追加します。
詳細情報
SPN は、 <ServiceClass>/<Host>:<Port>/,<ServiceName> 形式を使用し、次のコンポーネントを含みます。
- <ServiceClass> (必須) は、サービスのサービス クラスを表します。
- <Host> (必須) は、サービスを実行するコンピューターの名前を表します。
- <Port> (省略可能) は、サービスが使用するポート番号を表します。
- <ServiceName> (省略可能) は、サービスの名前を表します。
SPN の書式を設定する方法と、省略可能なパラメーターを使用するタイミングの詳細については、「 一意の SPN の名前の形式」を参照してください。