[FIM/ILM] Password Change Notification Service (PCNS) 前提条件や注意点ってどんなことがあるの?

みなさんごきげんよう。ういこうです。もう明日から二月ですが本年もよろしくお願いします。
今年の一本目はみんな大好き PCNS についてです。といっても、PowerChute Network Shutdown ではないですよ。Password Change Notification Service ですよ。
PCNS についての詳しい話は英語でも構わなければ結構あるもんですが、たとえばこれから提案をしに行こうと思っていらっしゃる方などが知りたいようなまとまった情報はあまりないという噂を聞きましたので、ざっくりとまとめてみました。
後日、図などを加筆するかもしれません。

【今日のお題】
PCNS (Password Change Notification Service) の動作条件や注意事項などについて

-a. PCNS の動作条件
PCNS が正しく動作するための前提条件は以下の四つがあります。これらすべての条件を満たしている必要があります。

1. パスワード更新に際し一定のプロトコルが使用可能であり、認証動作が成功することが保証されていること
2. Kerberos 相互領域認証が使用可能であること
3. RPC / DCOM の構成が適切になされていること
4. 適切にポートが構成されていること

1. パスワード更新に際し一定のプロトコルが使用可能であり、認証動作が成功することが保証されていること
こちらは、ILM / FIM に限った話ではありません。
PCNS は、パスワード更新をドメイン コントローラで検知して、それを FIM サービスに通知します。パスワード更新がされたということを FIM が受け取ると、FIM はパスワードが変わった場合にそのパスワードを AD と同様に変更させたいデータストア(たとえば Oracle 、Lotus Notes など)に対し右から左に受け流してやります。
Oracle とか Lotus Notes など、パスワード変更通知を FIM から受け取ると、自身の該当ユーザのパスワードに変更されたものを反映します。
ということは、つまり、PCNS とは、AD 起点の、Active Directory ありきのシナリオということに注意していただく必要があります。AD は抜きでパスワード同期をしたいというシナリオは、残念ながら仕組み上実現できません。

よって、この話は Windows ドメインに対するパスワード更新について必要な条件を満たしている環境であることが前提になります。プロトコル、認証動作のリストにつきましては技術情報 264480 にて詳細な説明がなされております。この技術情報は、Windows 2000 をターゲットに記載されていますが、Windows Server 2003 以降にも当てはまる概念となります。

Description of password-change protocols in Windows 2000
https://support.microsoft.com/kb/264480/en-us
※ FIM サーバ - 同期先ドメインの DC 間で上記の動作が保障されている必要があります

2. Kerberos 相互領域認証が使用可能であること
ID 管理製品 (FIM、ILM など) に対してパスワードの変更を通知する際PCNS の SPN が認識される必要があります。このためには、ID 管理製品が存在するドメインで、PCNS のサービスアカウントが認証される必要があります。この際に使われる認証は Kerberos 相互領域認証 で行われます。フォレスト間の同期などシステムの拡張を行う際は、注意が必要です。相互認証を可能にするには、PCNS のあるフォレストと、ID 管理製品の構成されているフォレスト間でフォレスト間信頼がなされていることが必要となります。信頼関係がない場合、ターゲット名が識別できずエラーが発生します。Kerberos 認証を実現するには、互いのフォレスト機能レベルが Windows 2003 である必要があります。また、この場合 DNS 名に基づく信頼関係が結ばれますため各 DNS が、フォレスト境界を越えて、名前解決が出来るよう正しく設定されている必要があります。(後述 “参考 : [PCNS] ILM 連携の際に使われるポートについて” も参照ください)

3. RPC / DCOM の構成が適切になされていること
PCNS の起動アカウントに、DCOM 経由で FIM サーバに接続し、FIM Sync サービスを呼び出す権利が設定されている必要があります。RPC と DCOM Server / Client の通信が DC - FIM 間で疎通出来ているか確認してください。
 
4. 適切にポートが構成されていること
各 Management Agent および、パスワード同期に必要なプロトコルおよびポートについてTechnet 上のドキュメントは、以下の URL をご参考下さい。

Management Agent Communication Ports, Rights, and Permissions
https://technet.microsoft.com/en-us/library/cc720599(WS.10).aspx

ホワイトペーパーにつきましては、以下のサイトより、MIIS_Ports_Rights_and_Permissions.doc をダウンロードいただきご確認いただけます。FIM につきましても同様となりますので、ご確認ください。
https://www.microsoft.com/downloads/details.aspx?FamilyID=d7894cc9-eeeb-40d9-8f5f-573050624f67&DisplayLang=en

上記より抜粋した Active Directory Management Agent のポートは以下の通りとなります。

* Active Directory Management Agent について

Service Protocol Port
LDAP TCP/UDP 389
Kerberos TCP/UDP 88
DNS TCP/UDP 53
Kerberos Change Password UDP(*) 464

(*) Kerberos Change Password は、UDP での接続が不可能な場合に、TCP にて要求が行われます。そのため、UDP が使用可能であれば TCP は不要となりますため、ドキュメント上は上記記載となっています。

* Password Synchronization Port Settings
RPC Endpoint mapper TCP 135
Dynamic RPC ports (PCNS) TCP 5000 - 5100
Dynamic RPC ports TCP 57500 - 57520
(management agent for Active Directory)

参考 : [PCNS] ILM 連携の際に使われるポートについて
https://blogs.technet.com/b/jpilmblg/archive/2009/02/17/pcns-ilm.aspx

-b. PCNS で良くある問題について
PCNS 関連でよくあるお問い合わせと各注意点についてまとめました。

1. FIM サーバの OS 再起動直後はパスワード同期が失敗することがある
2. "Kerberos-no-logon-server" が発生することがある
3. パスワード管理のエクステンションではロギングを行うと例外が発生するので Visual Studio でデバッグする必要がある

1. について
パスワード通知動作の初回は、通知先の FIM に対して PCNS の認証が発生します。しかしながら、パスワード変更はドメイン コントローラのパスワード フィルタによるものであり、PCNS の動作とは別の動作となるため PCNS の FIM サーバの起動状態に関わらず要求は発生してしまいます。
PCNS の初回認証が完遂するまでの間隔は、その時点のシステムのコンディションに影響されますが、一般的に PCNS サービスは遅延起動となるため、パスワード変更が出来る状態になるまで 30 秒 ~ 数分程度要することが少なくありません。
そのため、たとえば PCNS の設定で リトライ回数が 1、リトライ間隔が 10 というように PCNS 起動中に来た要求が失敗してもリトライまで十分余裕がない構成などの場合は、再度パスワード変更通知を試行しても起動が完了していないためこの時点においても失敗してしまいます。結果として PCNS の通知は失敗とみなされることになります。

ただし、ネットワークのトラフィック、システム上のサービス、メモリの使用状況などその時々の FIM サーバのコンディションによって認証動作有効になるまでの期間はある程度幅がでるものであると見られます。それぞれ実際の運用状況、環境に合わせてリトライ回数はご検討ください。

2. について
"Kerberos-no-logon-server" 発生要因としては、FIM はパスワード設定を行うために、Kerberos Change Password を使って要求を行いますが、この要求が失敗した場合や、不通となった場合に "Kerberos-no-logon-server" のエラーが発生します。過去いくつかこのエラーが報告されていますが、過去の事例からは、本エラーの発生要因はほぼネットワークに起因するという結果となっております。該当エラー時の直接要因となったネットワークトラブルは以下のようなものがありました。

a) FIM サーバーが、Active Directory ドメインについて名前解決が行えていない (SRV レコードを含め、DNS の環境見直しを実施いただき改善)
b) Firewall により、UDP/TCP 464 (Kerberos Change Password) がフィルタされており、パスワード変更要求が Active Directory へ届いていない (Firewallの見直しを実施いただき改善)
c) Active Directory から、UDP 464 (Kerberos Change Password) からの応答が、FIM サーバーに届く前に、伝送が不安定となったためにパケットロスが発生した。(この場合は、パスワード設定は完了していたがエラーが表示される場合となります)

特に、同期対象が国外拠点などの場合はネットワークの伝送状況が不安定になり、その結果問題が発生する事例が複数ございますので、サーバの拠点についても事前に確認を行って頂くのをお勧めいたします。

3. について
Password Management 関連のエクステンションでは、ロギングを実装するとセキュリティ上、例外が発生しますので Visual Studio のデバッグ実行で状況の確認をすることをお勧めいたします。
****************

それではみなさんごきげんよう。

ういこう@少々事情がございまして、ブログ継続が難しくなってまいりました…。