2014/03/28

Office 365: ディレクトリ同期 環境下で Exchange Online の 階層型アドレス帳 を有効にする

先日、Exchange Online でも利用可能になった階層型アドレス帳 ですが、ディレクトリ同期 を行っている環境下においては、PowerShell で直接 オンライン(Azure Active Directory) の属性 を変更できない事から、PowerShel での設定だけではうまくいきません。

ディレクトリ同期環境下 での管理のセオリーは、”属性の変更はオンプレミス側でしろ” なので、オンプレミスの Active Directory の属性を構成する事で、Exchange Online の 階層型アドレス帳 を有効にする方法を試してみました。

グループ(配布グループ や メールが有効なセキュリティグループ) の階層作成の方法についてはディレクトリ同期を使っていない場合と同じで、階層にしたいグループをネストする形で階層を作成し、必要なグループにユーザーを追加すればグループ側の下準備は完了です。

ちなみに、階層型アドレス帳の部署としてサポートされている配布グループは、メールが有効な配布グループとメールが有効なセキュリティグループです。動的配布グループは階層型アドレス帳の部署としてサポートされません。

Exchange Online にて階層型アドレス帳を有効にする為に必要となる属性は以下の3つ。

[IsHierarchicalGroup]
[SeniorityIndex]
[PhoneticDisplayName]

この3つの属性が Exchange Online のユーザー や グループの属性で変更される必要があります。
しかし、この3つの属性は オンプレミス の Active Directory の属性として探しても見当たりません。


調べた結果、上記の属性と紐づきがある Active Directory の属性が存在するようです。
右側の Active Directory の属性を設定する事で、左側の Exchange Online の属性に同期されるとの事。

(左) Exchange Online側 = (右) Active Directory側
[IsHierarchicalGroup] = [msOrg-IsOrganizational]
[SeniorityIndex] = [msDS-HABSeniorityIndex]
[PhoneticDisplayName] = [msDS-PhoneticDisplayName]

ただ、この右側の Active Directory 側に必要な属性は通常の構成では存在しません。
属性の3つとも Exchange Server に必要な属性として拡張される スキーマ 属性となります。

という事で、

 ディレクトリ同期環境下において Exchange Online の階層型アドレス帳を有効に
 する為には、オンプレAD に Exchange の スキーマ拡張 が必須!

という事になります。

既に Exchange Server 2010 以降を導入済みのユーザーにとっては存在するはずの属性なので、以下のスキーマ拡張作業は必要ありません。


■ 階層型アドレス帳の為のスキーマ拡張

スキーマの拡張方法ですが、ちゃんと情報がありました。

Exchange Server 2010 サーバーで階層型アドレス帳 (HAB) 用に Active Directory スキーマを拡張する方法
http://support.microsoft.com/kb/973788/ja

Exchange Server 2010 用の情報ですが、必要となる3つの属性の要件は満たしています。

注) Active Directory のスキーマ変更は大変注意が必要な作業ですので、十分な検証を行った上で、自己責任のもとで行ってください。

上記の KB に記載されている サンプルの LDIF ファイル の内容と、ディレクトリ同期ツール で同期される項目を照らし合わせた結果、以下の項目については、今現在として 必要はありません。
(同期される項目として含まれていません)

<属性追加>
 msExchHABRootDepartmentLink
 msExchHABRootDepartmentBL
 msOrg-GroupSubtypeName
 msOrg-OtherDisplayNames
 msOrg-Leaders
 msOrg-LeadersBL

<属性の設定(上記に加え)>
 location

当然、将来的な拡張を見据えた属性の可能性もあるので、全ての項目を拡張される事をお勧めします。

ちなみに、勝手ながら必要な項目だけにスリム化した LDIF サンプル を作成してみました。
dn:CN=ms-DS-Phonetic-Display-Name,DC=X
changetype:ntdsSchemaAdd
adminDescription:ms-DS-Phonetic-Display-Name
adminDisplayName:ms-DS-Phonetic-Display-Name
attributeID: 1.2.840.113556.1.4.1946
attributeSecurityGuid::VAGN5Pi80RGHAgDAT7lgUA==
attributeSyntax: 2.5.5.12
isSingleValued:TRUE
lDAPDisplayName:msDS-PhoneticDisplayName
mapiId: 35986
name:ms-DS-Phonetic-Display-Name
oMSyntax: 64
objectCategory:CN=Attribute-Schema,DC=X
objectClass:attributeSchema
rangeLower: 0
rangeUpper: 256
schemaIdGuid::5JQa4mYt5UyzDQ74endv8A==
searchFlags: 5
showInAdvancedViewOnly:TRUE
systemFlags: 16
systemOnly:FALSE


dn:CN=ms-DS-HAB-Seniority-Index,DC=X
changetype:ntdsSchemaAdd
adminDescription:Contains the seniority index as applied by the organization where the person works.
adminDisplayName:ms-DS-HAB-Seniority-Index
attributeID: 1.2.840.113556.1.4.1997
attributeSecurityGuid::VAGN5Pi80RGHAgDAT7lgUA==
attributeSyntax: 2.5.5.9
isMemberOfPartialAttributeSet:TRUE
isSingleValued:TRUE
lDAPDisplayName:msDS-HABSeniorityIndex
mapiId: 36000
name:ms-DS-HAB-Seniority-Index
oMSyntax: 2
objectCategory:CN=Attribute-Schema,DC=X
objectClass:attributeSchema
schemaIdGuid::8Un03jv9RUCYz9lljaeItQ==
searchFlags: 1
showInAdvancedViewOnly:TRUE
systemFlags: 16
systemOnly:FALSE


dn:CN=ms-Org-Is-Organizational-Group,DC=X
changetype:ntdsSchemaAdd
adminDescription:ms-Org-Is-Organizational-Group
adminDisplayName:ms-Org-Is-Organizational-Group
attributeID: 1.2.840.113556.1.6.47.2.1
attributeSyntax: 2.5.5.8
isMemberOfPartialAttributeSet:TRUE
isSingleValued:TRUE
lDAPDisplayName:msOrg-IsOrganizational
mapiId: 36061
name:ms-Org-Is-Organizational-Group
oMSyntax: 1
objectCategory:CN=Attribute-Schema,DC=X
objectClass:attributeSchema
schemaIdGuid::C1a3SQdHoEqifOF6Cco/lw==
searchFlags: 16


dn:
changetype:ntdsSchemaModify
replace:schemaUpdateNow
schemaUpdateNow: 1
-


dn:CN=Organizational-Person,DC=X
changetype:ntdsSchemaModify
add:mayContain
mayContain:msDS-HABSeniorityIndex
-

dn:CN=Organizational-Person,DC=X
changetype:ntdsSchemaModify
add:mayContain
mayContain:msDS-PhoneticDisplayName
-

dn:CN=Group,DC=X
changetype:ntdsSchemaModify
add:mayContain
mayContain:thumbnailPhoto
-

dn:CN=Group,DC=X
changetype:ntdsSchemaModify
add:mayContain
mayContain:msDS-HABSeniorityIndex
-

dn:CN=Group,DC=X
changetype:ntdsSchemaModify
add:mayContain
mayContain:msDS-PhoneticDisplayName
-

dn:CN=Group,DC=X
changetype:ntdsSchemaModify
add:mayContain
mayContain:msOrg-IsOrganizational
-

dn:CN=Mail-Recipient,DC=X
changetype:ntdsSchemaModify
add:mayContain
mayContain:msDS-HABSeniorityIndex
-

dn:CN=Mail-Recipient,DC=X
changetype:ntdsSchemaModify
add:mayContain
mayContain:msDS-PhoneticDisplayName
-


dn:
changetype:ntdsSchemaModify
replace:schemaUpdateNow
schemaUpdateNow: 1
-

スキーママスタ の ドメインコントローラー上で LDIF ファイルを取り込みます。

 LDIFDE -i -f schema_file.txt -c DC=x #SchemaNamingContext



■ グループ / ユーザー への属性設定

スキーマの拡張が完了したら、拡張した属性に対して必要な設定を行います。
オンプレミスの Active Directory に対して ADSI エディット 等 で 値 を変更します。


ちなみに、設定するのは以下の3つの属性です。

 [msOrg-IsOrganizational] ・・・ (グループのみ) グループを階層の一部にするか? [True or False]
 [msDS-HABSeniorityIndex] ・・・ 表示順序の設定。数字が大きい方が上に表示。
 [msDS-PhoneticDisplayName] ・・・ フリガナの設定。

具体的な変更方法については、こちらが参考になるかと思います。

階層型アドレス帳の展開
http://technet.microsoft.com/ja-jp/library/ee649115.aspx

※ AD サイトや DC が複数ある場合は全ての DC にレプリケーション完了してるか確認しましょう

設定が完了したら、ディレクトリ同期ツール で 同期 を行います。
FIM Admin ツール で Operation を確認すると、ちゃんと設定した属性が追加されている事が判ります。


■ Exchange Online に対して階層型アドレス帳を有効にする

オンプレミスの Active Directory への設定が完了した後、Exchange Online 特有の設定として、
階層型アドレス帳のルートグループ (最上位のグループ) の設定だけは、Remote PowerShell を使って Exchange Online に対して直接設定を行う必要があります。

Exchange Online へ PowerShell で接続します。接続方法は こちら をご覧ください。

ルートにするグループを指定します。
Set-OrganizationConfig -HierarchicalAddressBookRoot "Contoso,Ltd"

※ このサンプルの場合 "Contoso,Ltd" がグループ名 (Name属性) です


■ Outlook 2007 SP2 以降 で確認する

階層型アドレス帳は Outlook 2007 SP2 以降で動作します。(OWA では動きません)
メールの宛先等の選択画面にて、[ 組織 ] タブが増えていれば成功です。



ディレクトリ同期ツール を導入済みの Exchange Online ユーザーの方で、階層型アドレス帳 の導入をされる方のご参考になれば。

0 件のコメント:

コメントを投稿