ユーザーリポジトリとしてのActive Directory (1)

 
前回の投稿にも書きましたが、Active Directory10周年イベントに参加させていただき、
本当に濃密な時間を過ごさせていただきました。
パネルディスカッションのときに出ていた、10年前の資料、すごかったですね。
私なんか、古い資料をすぐに捨ててしまうクセがあるので、
10年前の資料・書籍など全くありません。
「そうやって私のことも捨ててしまうのね」と、どこかから聞こえてきたぞ(汗)
 
 
パネルディスカッションでは私の考えとして、認証基盤としてのActive Directoryではなく、
”従業員情報の格納庫として利用する” = ”ユーザーリポジトリとしてのActive Directory”
こんな使い方があってよいのではないかということをお話ししました。
 
Active Directoryオブジェクトのプロパティを開けば、
「属性」と呼ばれる情報をいろいろと入れることができますね。
ユーザーなら、役職、部署、事業所、、
コンピュータ名なら、
といった具合に色々情報を入れられます。
 
ところが、Active Directoryの使い道は?とヒアリングすると、
ユーザー名とパスワードを登録して、あとはログオンのときに…
なんて答えが返ってくることが少なくありません。(少なくとも私の周りでは)
そこで、ユーザーのプロパティにユーザーログオン名とパスワードだけではなく、
もっと色々な情報を入れて使いましょう!というのが私がお伝えしたかったところです。
 
ただ、そうは言っても、属性に情報を入れたところで、
そのメリットがなければ、使おうという気にはならないですね。
そこで、こんな活用方法を考えてみました。
 
 
■方法1
「ユーザーの役割に基づいてグループのメンバーシップを変更する」
という活用方法です。
 
Active Directoryのグループを作成するとき、役職に基づくグループを作ることってありませんか?
役職に基づくグループを運用管理するときは、人事異動のたびにグループメンバーシップの
メンテナンスを必要とされます。
そこで、ユーザーの役職属性に合わせて、
自動的にグループのメンバーシップを変更するスクリプトを用意しておきます。
このスクリプトさえ用意しておけば、管理者は人事異動のときでも、
異動したユーザーの役職属性だけ書き換えば、後は勝手にスクリプトがグループを再構築してくれます。
このほうがシンプルな運用だと思います。
 
肝心のスクリプトは、次のような処理を行うアルゴリズムにしてみてはどうでしょう。
 
 
 
これをPowerShellのスクリプトにすると次のとおり。
(ちなみに、この方法はWindows Server 2008 R2の場合です。
赤字のManagers部分はグループの名前、部長部分は役職の名前が入ります)
 

PS C:> Import-Module ActiveDirectory

PS C:> Get-ADGroupMember "Managers" | Remove-ADPrincipalGroupMembership -MemberOf "Managers"
PS C:> Get-ADUser -Filter {title -like "*部長"} | ForEach-Object -Process {Add-ADGroupMember -Identity "Managers" -Member $_.distinguishedName}

(※ 3行目はtitle -like "*部長"ですが、title -match "部長"でもよいですね。)
 
このスクリプトを次のスライドで解説しておきました。 
 
 
スクリプトができたら、後はスクリプトを動かすだけ。 
人事異動のタイミングでスクリプトを実行してもよいですし、
タスクスケジューラーと組み合わせて定期的に実行するように構成してもよいですね。
 
 
たった3行のスクリプトを書くだけで、ユーザーの役職属性をチェックし、
それに基づいてグループメンバーシップを勝手に構成してくれます。
今回は役職属性をもとにグループメンバーシップを構成する方法を紹介しましたが、
色々な使い道があると思うので、環境に合わせて色々試してみていただければと思います。
 
 
ユーザーリポジトリとしての他の使い方はまた改めて。