Active Directoryとは


#Windowsのユーザ管理

Windowsのユーザ管理の仕組みには、以下の2つがある

* ワークグループ認証
* ドメイン認証

##ワークグループ認証
![image.png](https://qiita-image-store.s3.amazonaws.com/0/185546/48ee284f-547b-d2f1-8b85-47071bd71897.png)

コンピュータに接続する際は、ユーザーID/パスワードを送信する
↓
アクセスされる側のコンピュータは、**SAM**(Security Account Manager)というデータベースに、そのアカウントがあるかチェックする。

このSAMは、それぞれのコンピュータで同期されておらず、
ユーザがアクセスする可能性のあるコンピュータのSAMに事前に登録しておく必要がある。

＜メリット＞

* Windowsサーバが必要でない

＜デメリット＞

* ユーザ数×コンピュータ台数分のアカウント登録が必要がある
* アカウント変更時もすべてのコンピュータを手動で変更する必要がある


以上のことから、小規模な環境に使われることが多い。


##ドメイン認証

![image.png](https://qiita-image-store.s3.amazonaws.com/0/185546/9298780c-5f16-6890-7520-1b48fa13a3eb.png)


ユーザがドメインに参加しているコンピュータにログインする際、アカウントのサインイン情報をドメインコントローラに送信する
↓
ドメインコントローラ側でサインイン情報をチェックし、正しい場合チケットが発行される
↓
チケットを受け取ったユーザは次のアクセス先コンピュータに対してそのチケットを送信する
↓
アクセス先のコンピュータは、チケットをチェックし、正しいチケットであればアクセスを許可する

＜メリット＞

* ユーザの認証が1度でよくなる
* リソースの一元管理が可能

＜デメリット＞

* ワークグループ認証と比べ、コスト増


#Active Directoryとは
上述した、ドメイン認証の仕組みを使ったのがActive Directory。
ドメイン内の機器やユーザを一括管理することができる。

##ディレクトリデータベース


Active Directoryで管理している機器やユーザの情報は、**ディレクトリデータベース**に保管される。
これはLDAPを中心に実装されている。

※ LDAP
データベース内の検索や、管理者が内容を追加修正することに特化したプロトコルのこと。
テーブル構造はテーブル構造ではなく木構造となっており、「ディレクトリ」と呼ばれる階層構造により構成される。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/185546/b1cc75ef-d193-dc53-af22-420559d51465.png)

※ 図中の表記

* DC（ドメインコンポーネント）・・ドメイン名。階層構造になっている。
* OU（組織単位）・・営業部・技術部など管理者の自由にOUを設定できる。OUの中にOUを作成することも可能（ex.OU1：営業部 の中に、OU2：1部、OU3：2部）
* CN（一般名）・・コンピュータの情報を格納するもの・ユーザの情報を格納するものという風に、それぞれグループ分けをしている。※コンテナとも表現される。これはシステム管理者が独自に設定することはできない。


ディレクトリデータベースでは、ドメインコンポーネントの下に、既存で必要な各コンテナ(複数のデータを格納する機能を持つもの)をフラットに配置する構成となる。
ただし管理者は独自のOUをドメインコンポーネントの下位に作成し、これを使ってシステム管理を行うことができる

##ドメインツリー
会社や部署で方針が異なる場合など、複数のドメインに分けて管理することも可能。
親ドメインの下に子ドメインを作成し、階層構造になる。
ただし、子ドメインは親ドメインからドメイン名を継承する必要がある。

ex．ドメインツリーA
親ドメイン：example.com
子ドメイン：abc.example.com
上記子ドメインの子ドメイン：def.abc.example.com

ドメインツリー内では、お互い自動的に**信頼関係**が結ばれ、
ドメインが違っても同じドメインツリー内であれば、お互いのリソースにアクセス可能となる。


##フォレスト
1つ以上のドメインツリーで構成された、Active Directoryの最大の管理単位。
ドメインツリー同士に**信頼関係**をもたせることで、ユーザはドメインツリーが違っても、同じフォレストに参加する全てのリソースにアクセス可能となる。

ex．以下二つのドメインツリーA,ドメインツリーBがあるとする

* ドメインツリーA

　親ドメイン：example.com
　子ドメイン：abc.example.com
　上記子ドメインの子ドメイン：def.abc.example.com


* ドメインツリーB

　親ドメイン：apple.com
　子ドメイン：abc.apple.com
　上記子ドメインの子ドメイン：def.abc.apple.com

そのままであれば、どのコンピュータもドメインツリーが違うリソースにアクセスはできない。
ex.ドメインツリーBのdef.abc.apple.comがドメインツリーAのdef.abc.example.comへのアクセス不可。

ただし、example.comとapple.comが信頼関係を持たせることで、1つのフォレストとなる。
すると、ドメインツリーBのdef.abc.apple.comがドメインツリーAのdef.abc.example.comにアクセスすることも可能となる。


##信頼関係
信頼関係とは異なるドメインにメンバシップ情報を反映できるもの。
信頼関係を結んだものは、結んだ先のドメインからのアクセスが許可される。

ex. ドメインA　←（信頼関係）→　ドメインB
　ドメインAとドメインB、お互いに信頼関係を結べば、どちらも相手のリソースにアクセス可能。

ex. ドメインA　→（信頼関係）→　ドメインB
　ドメインAが、ドメインBを信頼した場合（一方だけ）。
　ドメインBのユーザがドメインAにアクセスしようとした場合は、アクセスが許可される。
　ただしドメインAのユーザがドメインBにアクセスしようとした場合、
　ドメインBはドメインAを信頼していないため、アクセスは拒否される。

##サイト
リソースの情報を持っているドメインコントローラは、
もしも何かあった時のため、複数台での運用が一般的となっている。
そこでドメインコントローラはお互いの情報を同期し合っている(15秒ごと）。

ただし東京・大阪という風に物理的に離れた地理にあるドメインコントローラは、
通信が低速となり、15秒ごとに同期し合うと通信を圧迫してしまう。
そこで**サイト**という単位に区切り、高速通信の可能なサイト内では15秒ごとに同期し、
高速通信の不可能なサイト外への同期は3時間ごとに同期し合う。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/185546/ad02bf74-4492-bc15-8558-f4ce9c6907e2.png)

こうすることで、同期時のトラフィックの最適化を図ることができる。

##グローバルカタログサーバ
ドメイン内のオブジェクトのコピー、フォレストに存在する全オブジェクトのサマリ情報(ex.頻繁に利用されるコンピュータ名やユーザ名など）を保持しているドメインコントローラのこと。
ユーザアカウントやグループアカウントなどの情報は、ドメインを超えて同期されないため、フォレスト全体で検索が必要な場合は、グローバルカタログサーバが情報を提供する。
またユーザがログオンするときにも利用され、ログイン時にはまずこのグローバルカタログサーバにアクセスすることになる。

何台でも追加可能なため、サイトに1台ずつ配置することで、データの検索時のトラフィックを最適化できる。


#感想
Kerberos認証については後日まとめたい。。

#参考
[Windows Active Directory ドメインとワークグループの違い](https://www.edifist.co.jp/lecture/network/activedirectory/index.aspx)

[Active Directoryの認証の仕組み【連載：ADについて学ぼう~基礎編(2)~】](https://blogs.manageengine.jp/authentication_for_activedirectory/)

[誰も教えてくれないActive DirectoryとLDAPの「本当の関係」](http://gihyo.jp/admin/serial/01/ad2010/0002)

[Active Directoryに「サイト」が必要な理由](http://www.atmarkit.co.jp/ait/articles/1407/04/news012.html)