Skip to content
nishi_74322014 edited this page Aug 4, 2026 · 1 revision

SPN

概要

委任で必要になるのではなく、ケルベロス認証自体で必要。

SPNとは

クライアントがサービスのインスタンスを一意に識別するための名前。

  • サービス プリンシパル名
  • SPN : Service Principal Name
  • 以下の3つのマッピング情報がSPNとしてActive Directoryに登録される。
    • サービスの名前(ポート番号)
    • サービスを実行するコンピューター
    • サービスを実行するアカウント(サービス・アカウント)

※ 書式は サービスクラス/ホスト名[:ポート][/サービス名](例:HTTP/www.contoso.com)。
SPN の値そのものはサービス アカウント オブジェクトの servicePrincipalName 属性に格納される。

効用

これにより、サービスを乗っ取って不正にサービスを利用しようとする攻撃を防ぐことができる。

※ クライアントは KDC に「この SPN のサービス チケットが欲しい」と要求し、
KDC は SPN に紐づくアカウントの鍵でチケットを暗号化する。
そのため、正しいアカウントで動いていないサービスはチケットを復号できない。

用途

  • サーバファームの相互認証(ケルベロスなど)のサポート。

    gMSAなどを使用して簡易にサポート可能になった。

  • ケルベロスの制約付き委任

    → ケルベロス認証されたアカウントを一方のサーバーから他方のサーバーに引き渡すことができる。

設定

方法

  • 設定するには、ドメイン管理者である必要がある。
  • Setspn.exe コマンド ライン ユーティリティを使用し、
    Active Directory プロパティの SPN を編集する。
setspn -L <アカウント>            SPN の一覧表示
setspn -S <SPN> <アカウント>      重複チェックしたうえで登録
setspn -D <SPN> <アカウント>      削除
setspn -X                         フォレスト内の重複 SPN を検出

-A は重複チェックをしないため、現在は -S の使用が推奨。
SPN が重複していると Kerberos 認証が失敗し、NTLM にフォールバックする。

Dynamics CRMでNLBを構成する際

  • ドメイン アカウント(例:CRMAppPoolService)を作成する。
  • ADSI Edit スナップインで SPN を構成する。
    • 作成したドメイン アカウントのプロパティを開く
    • 属性ボックスで servicePrincipalName の編集をクリック
    • 追加する値:HTTP/CRMNLBName.FQDNCRMNLBCluster.contoso.com)→ 追加をクリック
    • 追加する値:HTTP/CRMNLBNameCRMNLBCluster)→ 追加をクリック

※ CRMNLBName は NLB(MS_NLB.md)クラスター名。

補足: SPN が登録されたアカウントは、 認証済みユーザなら誰でもそのサービス チケットを要求できるため、 Kerberoasting(取得したチケットをオフラインで総当たりし、 サービス アカウントのパスワードを割る攻撃)の対象になる。 対策として、SPN を持つアカウントには長くランダムなパスワード、 あるいは gMSA(パスワードを AD が自動管理)を使う。

参考

ベース クライアント セキュリティ モデル

ベース クライアント セキュリティ モデル


Tags: セキュリティ, アカウント, Windows, Active Directory, 認証基盤

NetDevInfraWiki

マイクロソフト系技術情報 Wiki
Open 棟梁 Wiki

(未着手)

開発基盤部会 Wiki

移行管理: DONETODO

Clone this wiki locally