-
Notifications
You must be signed in to change notification settings - Fork 0
MS_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 にフォールバックする。
- ドメイン アカウント(例:CRMAppPoolService)を作成する。
- ADSI Edit スナップインで SPN を構成する。
- 作成したドメイン アカウントのプロパティを開く
- 属性ボックスで
servicePrincipalNameの編集をクリック - 追加する値:
HTTP/CRMNLBName.FQDN(CRMNLBCluster.contoso.com)→ 追加をクリック - 追加する値:
HTTP/CRMNLBName(CRMNLBCluster)→ 追加をクリック
※ CRMNLBName は NLB(MS_NLB.md)クラスター名。
補足: SPN が登録されたアカウントは、 認証済みユーザなら誰でもそのサービス チケットを要求できるため、 Kerberoasting(取得したチケットをオフラインで総当たりし、 サービス アカウントのパスワードを割る攻撃)の対象になる。 対策として、SPN を持つアカウントには長くランダムなパスワード、 あるいは gMSA(パスワードを AD が自動管理)を使う。
Tags: セキュリティ, アカウント, Windows, Active Directory, 認証基盤
このWikiは「Open棟梁Project」,「OSSコンソーシアム 開発基盤部会」によって運営されています。