今回はActiveDirectoryのグループ設計について考えてみます。マイクロソフトの推奨設計としてAG(U)DLPという設計があります。しかし、私はこれに賛成できません。

AGUDLPはそれぞれ以下の意味になります。

- A - アカウント
- G - グローバルグループ
- U - ユニバーサルグループ
- DL - ドメインローカルグループ
- L - ローカルグループ(※AD上のグループではない)
- P - パーミッション

私がこの考え方を知ったのは2008年に受けた講習でした。

-  http://ebi.dyndns.biz/diary/20080318.html#p01

検索をするとWikipediaをはじめ多数ヒットします。日本語では、以下の記事が非常に分かりやすくまとまっています。

- [ASCII.jp:Active Directoryのアカウントとグループとは?|Windows Serverで学ぶサーバOS入門 ](http://ascii.jp/elem/000/000/504/504463/)
- [ASCII.jp:「機能レベル」でActive Directoryの互換性を確保しよう|Windows Serverで学ぶサーバOS入門](http://ascii.jp/elem/000/000/505/505060/)

詳細は上記の記事を読んでいただくとして、コンセプトとしては以下のような感じです。

-  AUP(小規模向け)

 ユーザーではなくグループにアクセス権を付与する。
-  別の人が権限を引き継ぐ際や別の人にも同じ権限を付与する場合に直接アクセス権をいじらずともメンバの変更だけで済む。

- AGLP(AD管理者とサーバー管理者が分離している場合に向け)

 アカウントをまとめるグループと権限を付与するグループ(役割)を分離する。
-  サーバーのローカルグループはサーバー管理者権限が、ADの権限がなくても勝手に作成、メンバ変更ができるのでいい!
-  欠点:ローカルグループはサーバー単位にしか存在しないので複数サーバーで同じ事をやろうとするとサーバー毎に設定が必要。
-  欠点:ドメインをまたがる権限設定ができない。

-  AGDLP(AD管理者とサーバー管理者が同じ場合に向け)

 コンセプトはAGLPと一緒
-  ドメインローカルグループであればAD上にあるので、全てのメンバサーバーで同じグループを使える。AGLPの欠点であるサーバー毎の作業が無くなる。
- 欠点:ドメインローカルグループはAD上のオブジェクトであり、ActiveDirectoryの管理者権限が必要となる。OUへの権限委任等で回避するケースあり。
-  欠点:ドメインをまたがる権限設定ができない。

-  AGUDLP(マルチドメインの大規模環境に向け)

 コンセプトはAGLP, AGDLPと一緒
-  ユニバーサルグループでグローバルグループをまとめる事によってドメインをまたがる権限設定を行えるようになる。

……。という事なのですが、はっきりいって私はこれには賛成できません。ユニバーサルグループですきなようにやれば良いじゃないというのが私の考えです。あえて上記と同じように書くならば「AU(U)P」という感じでしょうか。以下でその理由を説明します。

そもそもメンバ、参照範囲に制限があるって混乱の元ですよね?

まず、そもそも論なのですが、ローカルグループだのグローバルグループだのドメインローカルグループだのは参照可能範囲も違えば、メンバにできるオブジェクトの種類も違うという代物です。一方ユニバーサルグループはそういった制限はいっさいありません。一応表にすると以下のような感じです。

種類 参照される範囲 (どこから見えるか) メンバにできるオブジェクト

ローカルグループ サーバー単体 フォレスト内のユニバーサルグループ フォレスト内のグローバルグループ フォレスト内のユーザー

ドメインローカルグループ ドメイン内 フォレスト内のユニバーサルグループ フォレスト内のグローバルグループ フォレスト内のユーザー

グローバルグループ フォレスト全体 ドメイン内のグローバルグループ ドメイン内のユーザー

ユニバーサルグループ フォレスト全体 フォレスト内のユニバーサルグループ フォレスト内のグローバルグループ フォレスト内のユーザー

ローカルグループはそのサーバーでしか見えない、使えないし、ドメインローカルグループは他のグループのメンバになれないし、グローバルグループは「グローバル」なんて言っておきながらドメイン内のオブジェクトしかメンバにできないし、はっきり言ってわけがわかりません。こういう訳の分からない物はつかわずに、シンプルに設計するのが一番だと私は思います。

もちろんWindows NT時代やActive Directory混在モードではユニバーサルグループが使えなかったので制限の中で色々工夫する必要があったのだと思いますが、はっきり言ってこれらは今から見れば「実装上の都合の機能上の制限」にしか私には見えません。いまでもまだActive Directoryのネイティブモードですら無いところはさすがにもうほとんど無いと思います。そして、ドメインローカルグループ、グローバルグループはユニバーサルグループに変換できます。

全部ユニバーサルグループに統一すればどこにあるユーザーも、どこにあるグループもメンバにできるし、ネストもできるし、フォレスト内のどこからでも参照できます。Simple is bestだと思いませんか?

ユニバーサルグループを使うと他のドメインにも見えてしまって運用上やりずらいという意見について

確かにドメイン毎に管理者が分かれていてそれぞれグループの管理を行っているような場合には別のドメインのグループが権限設定時に見えてしまって運用上やりずらいかもしれません。ですが、ドメインをまたがったメンバシップの構成、権限の設定をしたいときには逆にそれがやりやすい訳です。結局ある程度の規模になればユーザーもグループも何百、何千、何万という数になってしまうわけで設定時にも検索を行う事になります。であれば、ネーミングルールやオブジェクトを配置するOU構成等を工夫すれば十分だと思います。

同じようなメンバシップのドメインローカルグループがあちこちのドメインに存在するような状況の方がよっぽど無駄だと思います。

Universal GroupはActive Directoryに対して負荷が高いという話

この「ユニバーサルグループは負荷が高い」ということは昔はあちこちで言われていた事なのですが、今日、2013年においても本当に当てはまる事でしょうか?

まず、ユニバーサルグループは情報がメンバシップ情報含めてGCに格納されます。なので、GCの領域が増えて、複製の負荷も増えて…ということがまずあります。これは「マルチドメイン環境においてのみ」言える事であることに気をつけてください。シングルフォレストシングルドメイン構成であれば全ての情報はドメインパーティションの中に入っている訳で、グローバルカタログサーバーになってもなにか保持する情報が増える訳ではありません。ユニバーサルグループの情報も同じです。

つまり、シングルフォレストシングルドメイン環境であればドメインローカルグループやグローバルグループを使って制限ある中で運用するのは単純に無駄な努力だと言えると思います。

では、マルチドメインではどうでしょうか?これは、昔は確かに大きな負荷になっていたそうです。以下のあたりにその痕跡を確認できます。

※Windows .NET ServerというのはWindows Server 2003の事です。

@IT:Insider’s Eye – Active Directoryが次期Windowsで飛躍的進化 http://www.atmarkit.co.jp/fwin2k/insiderseye/20020827dotnet_ad/dotnet_ad_03.html 大規模環境では、GCサーバは大量の複製を行う必要があるため、リモート・サイトが使用するWAN回線に負荷がかかることになる。

Windows 2000では、グループのメンバーシップを変更する際は、グループオブジェクト全体をそのドメイン内のほかのDCと、GCサーバに複製する必要がある。この複製は必要以上に時間がかかり、ネットワーク・トラフィックを増大させる。さらに、そのタイムラグに起因する問題もある。複数のDCでグループのメンバーシップが同時に更新されると、一部の更新内容が複製中に失われかねないという問題だ。このためMicrosoftは、1つのグループに5000以上のメンバーを含めないようにすることを推奨してきた。 Windows .NET ServerのADでは、グループ複製メカニズムの改善により、メンバーシップの変更に伴う不都合が解消され、ネットワークの使用帯域が減少する。さらに、複製速度が大幅に向上するため、グループが同時に変更された場合でも衝突がはるかに起こりにくい。 このように、Windows 2000 ServerのActive DirectoryではGCの複製に関してかなり負荷やトラフィックの問題があり、AGUDLPはこれを考慮した設計がであることが分かります。そして、Windows Server 2003ではかなりこの部分に改善が加えられている事が分かります。

ところで、これは2003年頃の話です。10年前。今と比べれば回線速度も細ければ、サーバースペックも貧弱でした。LANは10Mbps, WANは64kbps…というあたりの時代です。CPU等は言うに及ばず…。私は今現在はこのあたりの負荷はまったく問題にならない物と思います。

Exchange ServerではUniversal Groupしか使用できない話

そもそも、マイクロソフトの方針も実際のところ変化しています。Exchange Serverを例に挙げましょう。Exchange Serverでは2007以降では製品として、ユニバーサルグループしか扱いません(扱えません)

- [配布グループの管理: Exchange 2007 ヘルプ]( http://technet.microsoft.com/ja-jp/library/bb125256(v=exchg.80).aspx)
- [Exchange Server 2007 and Universal Groups - Michael's meanderings... ](http://theessentialexchange.com/blogs/michael/archive/2008/02/28/exchange-server-2007-and-universal-groups.aspx)

実際のところ、ADGLPを採用していた多くの企業がExchange Server 2007の導入時にはグループをユニバーサルグループに変換しました。もちろんこれはExchange Serverがフォレストレベルのアプリケーションであるからなのですが、結局フォレストレベルでなにかをしようとするならばユニバーサルグループが効率的なのであり、それが現実的に実現可能であるとMicrosoftも判断したからこそのこのデザインなのだと思います。

Exchange Serverではユニバーサルグループが勝手に用意される

ところでそもそもAGDLPはユーザーの分類と役割を分けて管理するものでした。まさにその考えに従って役割ごとのグループがExchange Serverには規定で用意されています。

- [サーバー管理: Exchange 2013 Help](http://technet.microsoft.com/ja-jp/library/dd876866.aspx)
- [役割ベースのアクセス制御について: Exchange 2013 Help](http://technet.microsoft.com/ja-jp/library/dd298183.aspx)

そして、規定で用意されるこれらのグループはユニバーサルグループなのです。ここまでの事実があってもまだAGDLPと言えるでしょうか?私は言えないと思います。AGDLPは時代遅れであり、RBAC、役割ベースのアクセス制御を行う場合にもAUUPで問題ないと言えると思います。

いかがでしょうか?AUUPで検索しても全然ヒットしないので、このようなことを言っているのは私くらいなのかもしれません。あるいは当たり前すぎてみんな言わないのでしょうか?

意見がありましたら是非コメントをお願いします!