Active Directory10周年に寄せて
Windows 2000によりActive Directoryが公開されてから、今年で10年目ということだそうです。
Active DirectoryがWindowsドメインを管理運用するためのソリューションであることは、みなさんすでにご存じでしょうが、その機能や使い方、トラブルの対応方法について、みなさんは自信を持って社内の同僚やお客様に説明できるでしょうか? 今回は、総復習の意味も兼ねて、Active Directoryの技術的なトピックやトラブルシュートの方法、について、いくつかお話ししたいと思います。
過去のWindowsの問題点
Active Directoryが最初に実装されたWindows 2000の開発時の名称は「Windows NT5」といい、Windows NT4.0の後継にあたります。
Windows NT4.0のドメインコントローラ(ドメイン認証を行うサーバ)は割と使いやすいものでしたが、いくつか問題点がありました。そのうちのひとつに、アカウントに何かの情報を結び付けて使いたい場合(たとえばメールアドレス) 、アプリケーション独自のデータベースやサードパーティのディレクトリサーバに頼らなければならない、というものがありました。
「ディレクトリサーバ」とは、電話帳のように、ユーザ名を住所・電話番号・メールアドレスなどと結びつけたデータベースの一種であり、たとえば、「 山川 しずか」という名前から「○×株式会社 営業部 第一課」「 03-123-4567」「 sizukay@marubatucorp.co.jp」などの情報を、検索により抽出する機能であり、LDAP(Lightweight Directory Access Plotocol)というプロトコルにより、LADPクライアント(たとえばメールアドレスを検索するメールソフト)と通信を行ないます。
LDAPはこのような目的に特化したデータベースであり、また多数のユーザ情報を「ディレクトリ」と呼ばれる階層ごとで管理運用することができるため、アカウント管理の問題や、Windows認証とアカウントの情報をアプリケーションで一元的管理したいMicrosoftの意図にぴったりな実装であったといえます。
Active DirectoryとLDAP
Active Directoryでは、( 詳細は後述しますが)LDAPデータベースを中心に実装されており、たとえばドメインコントローラ情報を検索して必要な情報を呼び出す、といったところでWindowsのログオン認証に深く関連しています。また、関連するアプリケーションと有機的に統合されている例として、「 Exchange Server」というコラボレーションサーバ(主たる機能はメールサーバ)があります。Exchange Serverでは、Active Directoryで登録されたユーザのメールデータを管理したり、ユーザ名からメールアドレスを検索して、メールの送信を行なうことができます。
システム管理者が行う作業としては、たとえばいったん削除してしまったオブジェクトを復活させる目的でLDAPクライアントツールとなるldp.exeを使ったり、他のActive Directoryのアカウント情報をエクスポートし、これをインポートするコマンド(LDIFDE等)などでも、利用されます。
このように、Active DirectoryとLDAPは切り離せない関係にありますので、LDAPの基本やActive Directoryでの実装を知っておくことで、システムの管理運用やトラブルシュートのうえで有効になることでしょう。
Active DirectoryのLDAP情報を使った応用例として、Active Directoryフェデレーションサービス(AD FS)という機能があります。AD FSは、あるActive Directory上で認証トークン(認証を証明するデータ)を受けたユーザが、そのユーザの属性情報(たとえば「役職」が「部長」であったら等)に応じて、別の組織が持つWebサーバにアクセスして、特別なページ(部長クラス専用のページ)を表示する、といった使い方が可能です。
LDAPとは
LDAPはLightweight(軽量)な、という名前が示すとおり、DAP(Directory Access Protocol)と呼ばれる、X500という規格で定義された、大がかりなディレクトリサービスで利用される通信プロトコルのサブセット版であり、このような目的に特化したプロトコルになります。先に述べたように、LDAPはクライアントからの検索クエリに対し適切な結果を返答したり、システム管理者が内容を自由に追加変更することができるデータベースとして機能します。データベースというと、たとえばRDBM(リレーショナルデータベース:通常のデータベースシステム)がありますが、LDAPはどのように違っているのでしょうか?
テーブル構造ではなく木構造である
リレーショナルデータベースでは「テーブル」と呼ばれる形式のデータ格納場所が用意され「レコード」ごとに要素は管理されますが、LDAPでは「ディレクトリ」と呼ばれる、階層構造により構成されます。たとえば、「 山川 しずか」というユーザ情報は「第一課」という「ディレクトリ」に所属し、さらに「営業部」という上位のディレクトリに所属します。最終的には「○×株式会社」という、組織上最上位のディレクトリに所属する、ということになります。
データベースが木構造である、というメリットですが、ディレクトリ(階層)によるグルーピングを基礎とした構成となるため、管理の委任がしやすいこと、目的のユーザ情報がグルーピングされたディレクトリだけを指定して検索をするといった方法で、検索自体のパフォーマンスが有利になる、といった点があります。
主にテキストベースの情報を扱う
リレーショナルデータベースでは、テキストベースのデータのほかバイナリベースのデータも同様に取り扱いますが、LDAPでは主にテキストベースのデータを取り扱います(バイナリデータを全く扱えないわけではありません) 。処理の負荷が少ないため、パフォーマンスが向上する傾向にあります。
最初から設定の項目が用意されている
LDAPはディレクトリ検索のためのプロトコルとして、「 氏名」や「電話番号」「 メールアドレス」といった、基本的な設定項目(属性といいます)が最初から定義されているため、リレーショナルデータベースのようにデータベース設計者が自分で定義する必要がありません。実際にはLDAPアプリケーション固有の属性が追加的に定義済みの状態でシステム管理者は利用しますが、「 LDAPスキーマ」という定義情報に自分で定義した属性情報を加えることもできます。現在のLDAPバージョンとなる、LDAPv3の詳細については、RFC 4511 等で勧告されています。
Active Directory LDAPの基本構造(その1)
オブジェクトとエントリ、属性とは
LDAPにおいては、管理上の単位として「オブジェクト」や「エントリ」といった概念が利用されます。
「オブジェクト」とは管理者が実際に操作する対象物を指し、たとえばユーザアカウントのような「リーフオブジェクト」(単一のオブジェクトとして機能するもの)と、Organizational Unit(組織単位:OU)のような「コンテナオブジェクト」( 複数のオブジェクトを格納する機能をもつもの)があります。
また「エントリ」とは、( 操作の対象ではなく)管理上の概念としての「何らかの要素の集まり」という状況を指したもので、たとえば、たくさんの属性が集まってできているひとつのオブジェクトや、たくさんのオブジェクトが集まってできているひとつのディレクトリ階層(事実上コンテナオブジェクトを指します) 、あるいは特定のディレクトリ階層全体など、データの集合体としての概念を示します。
図1 エントリとは
Active Directoryでは、ユーザアカウントやコンピュータアカウントのほか、DNSレコードの情報、グループポリシーの情報、サイトの情報やドメインコントローラ間の複製構成(接続オブジェクト)の情報など、多岐にわたってオブジェクトが存在します。またこれらのオブジェクトを格納するOUを適切に構成することで、ディレクトリ階層を構築することができます。
各オブジェクトには、定義済みの属性(アトリビュート)について、内容を設定することができます。たとえばユーザアカウントであれば、「 表示名:displayName」や「オブジェクトクラス:objectClass」「 メールアドレス:mail」といった汎用的な属性のほか、LDAPアプリケーション独自の属性を利用することができます。
Active Directoryの場合、オブジェクトに含まれている属性は多数におよぶため、全部を紹介することはできませんが、たとえば次のようなものになります。設定可能な属性の一覧については、Windows Server 2008 R2の[Active Directoryユーザーとコンピュータ]コンソールの[属性エディター]画面から、簡単に確認できます。
表1 Active Directoryオブジェクトの属性(ユーザアカウント)
objectCategory オブジェクトカテゴリ(参照先スキーマオブジェクトが示される)
objectClass オブジェクトクラス
localpany 会社名
department 部署
distinguishedName 識別名
displayName 表示名
givenName 名
mail メールアドレス
msDS-PhoneticDisplayName 表示名のふりがな
name 名前(相対識別名として機能する)
saMAccountName SAMアカウント名
sn 姓
telephoneNumber 電話番号
title 役職
userPricipal ユーザプリンシパル名
表2 Active Directoryオブジェクトの属性(OU)
objectCategory オブジェクトカテゴリ
objectClass オブジェクトクラス
distinguishedName 識別名
ou 組織単位名
図2 Windows Server 2008 R2 [Active Directoryユーザーとコンピュータ]コンソールの属性エディター 画面
属性名についてですが、その製品独自で必要とされる属性については、( ハイフンをはさんで)接頭語としてベンダ名や製品名を示唆する文字をいれることで、汎用的な属性名とは区別して利用することがあります。上記の例ではmsDS-PhoneticDisplayName属性(表示名のふりがな)がこれにあたります。
LDAPオブジェクトの属性には、単一の値を設定できるものと、複数の値を設定できるものがあります。たとえばgivenName属性(名)にはひとつの値(たとえば「しずか」 )しか指定できませんが、otherTelephone属性(その他の電話番号)には、複数の値を指定することができます。
次回は、「 Active Directory LDAPの基本構造(その2) 」として、LDAPのさまざまな要素と、Active Directoryでそれらがどのように扱われているかについて紹介します。
Active Directoryに関する技術情報:
Microsoft TechNet Active Directory TechCenter
URL :http://technet.microsoft.com/ja-jp/activedirectory/default.aspx
Microsoft Active Directory 機能概要ページ
URL :http://www.microsoft.com/japan/ad/