サービスでその SPN を登録する方法

クライアントがSPNを使用してサービスのインスタンスを認証する前に、サービスインスタンスがログオンに使用するユーザーアカウントまたはコンピューターアカウントにSPNを登録する必要があります。 通常、SPNの登録は、ドメイン管理者特権で実行されているサービスインストールプログラムによって行われます。

サービスインスタンスをホストコンピューターにインストールするサービスインストーラーは、通常、次の手順を実行します。

サービスインスタンスのSPNを登録するには

  1. DsGetSpn関数を呼び出して、サービスインスタンスの1つ以上の一意のSPNを作成します。 詳細については、一意のSPNの名前形式 を参照してください。
  2. DsWriteAccountSpn関数を呼び出して、サービスのログオンアカウントに名前を登録します。

DsWriteAccountSpnは、ディレクトリ内のユーザーまたはコンピューターアカウントオブジェクトのプロパティとしてSPNを登録します。 usercomputerオブジェクトは servicePrincipalName 属性を持ち、これはユーザーやコンピューター・アカウントに関連する全てのSPNを格納するための多値属性です。 サービスがユーザーアカウントで実行されている場合、SPNはそのアカウントのservicePrincipalName 属性に格納されます。 サービスがLocalSystemアカウントで実行されている場合、SPNはサービスのホストコンピューターのアカウントのservicePrincipalName属性に格納されます。 DsWriteAccountSpn呼び出し元は、SPNが格納されているアカウントオブジェクトの識別名を指定する必要があります。

登録されたSPNが安全であることを保証するために、servicePrincipalName属性は直接書き込むことはできません。DsWriteAccountSpnを呼び出すことによってのみ書き込むことができます。 呼び出し元には、ターゲットアカウントのservicePrincipalName属性への書き込みアクセス権が必要です。 通常、書き込みアクセス権は、既定ではドメイン管理者にのみ付与されます。 ただし、LocalSystemアカウントで実行されているサービスが、サービスのホストのコンピューターアカウントに独自のSpnを登録することをシステムが許可する特殊なケースがあります。 この場合、書き込まれるSPNは"<service class>/<host>"の形式である必要があり、"<host>"はローカルコンピューターのDNS名である必要があります。

DsWriteAccountSpnは、アカウントからSpnを削除することもできます。 操作パラメーターは、Spnをアカウントに追加するか、アカウントから削除するか、またはアカウントの現在のすべてのSpnを完全に置き換えるために使用するかを示します。 サービスインスタンスがアンインストールされたら、そのインスタンスに登録されているすべてのSpnを削除します。

サービスのSpnを登録または登録解除する詳細とコード例については、 サービスのSpnの登録 を参照してください。

単純なSPN形式"<service class>/<host>"を使用するホストベースのサービスには、サービスインスタンスのSpnの作成と登録の両方を行うDsServerRegisterSpn関数を使用するオプションがあります。 DsServerRegisterSpnは、DsGetSpnDsWriteAccountSpnを呼び出すヘルパー関数です。

詳細については、サービスログオンアカウントを参照してください。