2012年9月23日日曜日

[FIM] Active Directory への同期に必要な権限

昨日は .NET ラボさんの勉強会で FIM / AD FS2.0 のハンズオンを実施しました。
回線の混雑具合や時間配分的な問題で用意していたシナリオを終えることは無理があったのですが、いずれリベンジをしたいと思っています。

さて、ハンズオン環境を作る上で一つ入れ忘れていた設定があり参加者の方にご迷惑をかけた点があり、結構忘れがちな設定でもあるのでこの機に書いておこうと思います。


FIM をはじめアイデンティティ管理ツールを使って Active Directory 上のユーザを作成・変更・削除する、というシナリオは企業内ではごく一般的なものだと思います。

その際に、Active Directory 上のオブジェクトをメンテナンスするためのユーザとその権限をどうするのか?というポイントは慎重に検討する必要があります。

実際には Active Directory の管理者とアイデンティティ管理システムの管理者が同じ人や組織なので何も考えずに Domain Admins の権限を持ったユーザや Administrator ユーザそのものをアイデンティティ管理システム上に設定してしまったりしている例も多いと思いますが、出来れば必要最低限の権限を持ったユーザを使いたいところです。

結論から書くと、FIM の場合は以下の2つの権限が必要になります。
・デフォルトネーミングコンテキストに対するディレクトリ・レプリケーションの権限
・管理対象オブジェクトを格納する OU および子オブジェクトに対するフル・コントロール
※デフォルトネーミングコンテキストとは、LDAP 文字列でいうところの DC=xxx,DC=xxx にあたる部分です。

もちろん手動で Active Directory ユーザとコンピュータ から権限を設定することも可能ですが、特にディレクトリ・レプリケーション権限は特殊権限なので設定をするのが面倒です。
そこで通常は DSACLS.EXE を使った以下のようなスクリプト(PowerShell の例)を実行して一気に設定を入れてしまいます。
# Active Directory からネーミングコンテキストを取得
$RootDse = [ADSI] "LDAP://RootDSE"
$DefaultNamingContext = $RootDse.defaultNamingContext

# 対象ユーザの SID を取得
$UserPrincipal = New-Object Security.Principal.NTAccount("<NetBOISドメイン名>", "<利用するユーザ名>")
$SID = $UserPrincipal.Translate([System.Security.Principal.SecurityIdentifier]).Value

# ディレクトリ・レプリケーション権限を付与
DSACLS "$DefaultNamingContext" /G "$($SID):CA;Replicating Directory Changes";

# 対象 OU および子オブジェクトへのフル・コントロール権限を付与
DSACLS "<対象 OU 名>,$DefaultNamingContext" /G "$($SID):GA" /I:T 
勉強会でも話をしましたが、 FIM の設定は周辺を含め非常に面倒です。
このようなスクリプトをネタとして持っておいて使いまわす、というのがベストプラクティスなのだと思います。

0 件のコメント: