はじめに
プリザンターはADのユーザで認証するだけでなく、ADのユーザ情報を取り込むことができます。ADのユーザでログインするとプリザンターのユーザが自動的に作成されますが、ユーザ数が多い環境では全員にログインしてもらうのが困難です。その場合、ADの同期機能を使ってプリザンターにユーザを取り込みます。プリザンターにユーザを取り込むと事前にアクセス権を付与したり、ユーザ項目を使用して担当者を割り当てたりすることができます。
ユーザの同期
ユーザを同期する際、ADのユーザ数が膨大な場合、対象とするユーザを絞り込みたいケースがあります。プリザンターでは、2つの方法で同期するユーザを絞り込むことができます。いずれも下記のAuthentication.jsonで設定します。
OUで限定する
絞り込みたいユーザがOUで分かれている場合、LdapSearchRootに検索の起点となるOUを指定します。OUが分かれていない場合この方式は使えません。
"LdapSearchRoot": "LDAP://implem.local/ou=abc,dc=implem,dc=local"
ユーザの属性値でフィルタする
絞り込みたいユーザの属性に法則がある場合は、LdapSyncPatternsにDirectorySearcherのフィルタ文字列を指定します。フィルタ文字列はLdapSyncPatterns内にJSON配列として複数記述することができます。下記の例はデフォルトの設定ですが、ObjectCategory属性がUserでObjectClass属性がPersonのオブジェクトを検索します。
"LdapSyncPatterns": [
"(&(ObjectCategory=User)(ObjectClass=Person))"
]
フィルタ文字列のテスト
DirectorySearcherのフィルタ文字列は下記のPowerShellでテストできます。下記の例ではCNが山田で始まるオブジェクトを検索しています。CN属性はワイルドカードを使用することで、前方一致検索が行えますが、distinguishedNameなど前方一致が行えない項目もあります。
# 資格情報取得(資格情報を入力するダイアログが開きます)
$Credential = Get-Credential
# 検索用オブジェクトDirectorySearcher作成
$Searcher = New-Object -TypeName System.DirectoryServices.DirectorySearcher
# フィルタ文字列のセット(この部分を変更してトライ&エラーを行う)
$Searcher.Filter = "(&(ObjectCategory=User)(ObjectClass=Person)(CN=山田*))"
# 検索対象のドメインを指定
$DomainDN = "LDAP://implem.local/DC=implem,DC=local"
# 「DirectoryEntry」オブジェクトを作成し、ドメイン、資格情報を追加
$Domain = New-Object `
-TypeName System.DirectoryServices.DirectoryEntry `
-ArgumentList $DomainDN,
$($Credential.UserName),
$($Credential.GetNetworkCredential().password)
# 検索情報を追加
$Searcher.SearchRoot = $Domain
# フィルタ文字列にヒットしたオブジェクトを列挙
foreach($list in $Searcher.FindAll()){
$list.properties["distinguishedName"]
}
属性の名前の確認
ドメインコントローラーに管理ツールとしてインストールされるADSIエディターを使用すると、ADの属性の名前や格納されている値を確認することができます。PowerShellのスクリプトと合わせてフィルタ文字列のテストに役立てることができます。