2. Directory Serverのインスタンスと接尾辞
dsutilコマンドを使用して通常ユーザーにユーザー・アカウントを管理させるには:
7. Directory Serverのパスワード・ポリシー
8. Directory Serverのバックアップとリストア
9. Directory Serverのグループ、ロールおよびCoS
16. Directory Proxy Serverのツール
17. Directory Proxy Serverのインスタンス
19. Directory Proxy Serverの証明書
20. Directory Proxy Serverのロード・バランシングとクライアント・アフィニティ
22. Directory Proxy Serverによる仮想化
24. Directory Proxy ServerとバックエンドLDAPサーバーの接続
25. クライアントとDirectory Proxy Serverの接続
26. Directory Proxy Serverのクライアント認証
27. Directory Proxy Serverのロギング
28. Directory Proxy Serverの監視とアラート
第3部 Directory Service Control Centerの管理
同じようなディレクトリ・ツリー構造を持つ組織では、マクロによってディレクトリ内で使用するACIの数を最適化できます。ディレクトリ・ツリー内のACIの数を減らすことによって、アクセス制御ポリシーの管理が簡単になります。また、ACIによるメモリー使用の効率も向上します。
マクロは、ACIの中でDN、またはDNの一部を表現するために使用されるプレースホルダです。マクロを使用すると、ACIのターゲット部分またはバインド・ルール部分、あるいはその両方のDNを表せます。実際の処理では、Directory ServerがLDAP操作を受け取ると、LDAP操作のターゲットとなるリソースに対してACIマクロのマッチングが行われます。このマッチングは、一致する部分文字列の存在を確認するために行われます。一致が検出された場合は、一致した部分文字列を使用してバインド・ルール側のマクロが展開され、その展開バインド・ルールを評価してリソースへのアクセス権が決定されます。
この項では、マクロACIの例とマクロACIの構文について説明します。
マクロACIの利点と最も効果的に機能させる方法を、例を示しながら説明します。図6-1は、全体的なACIの数を減らすために、マクロACIを効果的に利用しているディレクトリ・ツリーです。
この例では、同じツリー構造のサブドメインが同じパターンで繰り返されています(ou=groups,ou=people)。Example.comディレクトリ・ツリーには、dc=hostedCompany2,dc=example,dc=comおよびdc=hostedCompany3,dc=example,dc=comという2つの接尾辞が格納されているので、このパターンはツリー内でも繰り返されています。ただし、図には示されていません。
ディレクトリ・ツリーにあるACIでも、同じパターンが繰り返されています。たとえば、次のACIはdc=hostedCompany1,dc=example,dc=comノード上に置かれています。
aci: (targetattr="*") (targetfilter=(objectClass=nsManagedDomain))(version 3.0; acl "Domain access"; allow (read,search) groupdn= "ldap:///cn=DomainAdmins,ou=Groups,dc=hostedCompany1, dc=example,dc=com";)
このACIは、dc=hostedCompany1,dc=example,dc=comツリー内のすべてのエントリに対する読取りおよび検索権限をdomainAdminsグループに与えます。
図6-1 マクロACIのディレクトリ・ツリーの例
次のACIは、dc=hostedCompany1,dc=example,dc=comノード上に置かれています。
aci: (targetattr="*") (targetfilter=(objectClass=nsManagedDomain)) (version 3.0; acl "Domain access"; allow (read,search) groupdn="ldap:///cn=DomainAdmins,ou=Groups,dc=hostedCompany1,dc=example,dc=com";)
次のACIは、dc=subdomain1,dc=hostedCompany1, dc=example,dc=comノード上に置かれています。
aci: (targetattr="*") (targetfilter=(objectClass=nsManagedDomain)) (version 3.0; acl "Domain access"; allow (read,search) groupdn="ldap:///cn=DomainAdmins,ou=Groups,dc=subdomain1,dc=hostedCompany1, dc=example,dc=com";)
次のACIは、dc=hostedCompany2,dc=example,dc=comノード上に置かれています。
aci: (targetattr="*") (targetfilter=(objectClass=nsManagedDomain)) (version 3.0; acl "Domain access"; allow (read,search) groupdn="ldap:///cn=DomainAdmins,ou=Groups,dc=hostedCompany2, dc=example,dc=com";)
次のACIは、dc=subdomain1,dc=hostedCompany2, dc=example,dc=comノード上に置かれています。
aci: (targetattr="*") (targetfilter=(objectClass=nsManagedDomain)) (version 3.0; acl "Domain access"; allow (read,search) groupdn="ldap:///cn=DomainAdmins,ou=Groups,dc=subdomain1,dc=hostedCompany2, dc=example,dc=com";)
前述の4つのACIの違いは、groupdnキーワード内で指定されているDNのみです。DN用のマクロを使用することによって、これらのACIを、1つのACIにまとめてルート・ツリーのdc=example,dc=comノードに置くことができます。このマクロACIは次のようになります。
aci: (target="ldap:///ou=Groups,($dn),dc=example,dc=com") (targetattr="*")(targetfilter=(objectClass=nsManagedDomain)) (version 3.0; acl "Domain access"; allow (read,search) groupdn="ldap:///cn=DomainAdmins,ou=Groups,[$dn],dc=example,dc=com";)
前述の個々のACIでは使用されていなかったtargetキーワードをここでは新たに使用していることに注意してください。
この例では、ACIの数が4つから1つに減っています。ただし、本当の利点はそれのみではなく、ディレクトリ・ツリー全体で複数繰り返されているパターンをまとめられるところにあります。
ここでは、わかりやすくするために、userdn、roledn、groupdn、userattrなどのバインド資格証明を与えるために使用されるACIキーワードをまとめて、サブジェクトと呼びます。サブジェクトは、ACIの適用対象を決定します。
次の表に、特定のACIキーワードの置換に使用できるマクロを示します。
表6-3 マクロACIキーワード
|
マクロACIキーワードには、次のような制限が適用されます。
サブジェクトで($dn)マクロや[$dn]マクロを使用するときは、($dn)マクロを含むtargetを定義する必要があります。
サブジェクトで($attr.attrName)マクロと($dn)マクロを組み合せることはできますが、[$dn]マクロと組み合せることはできません。
ACIのtargetに含まれる($dn)マクロを、LDAPリクエストのターゲットとなるエントリと比較することによって、実際に置き換えられる値が決定します。たとえば、このエントリをターゲットとするLDAPリクエストがあるとします。
cn=all,ou=groups,dc=subdomain1, dc=hostedCompany1,dc=example,dc=com
また、次のようなtargetを定義しているACIもあるとします。
(target="ldap:///ou=Groups,($dn),dc=example,dc=com")
この場合、($dn)マクロはdc=subdomain1, dc=hostedCompany1と一致します。ACIのサブジェクト内で($dn)はこの部分文字列に置き換えられます。
ACIのサブジェクト内では、($dn)マクロはターゲット内で一致する部分文字列全体に置き換えられます。たとえば、次のようになります。
groupdn="ldap:///cn=DomainAdmins,ou=Groups,($dn),dc=example,dc=com"
サブジェクトは次のようになります。
groupdn="ldap:///cn=DomainAdmins,ou=Groups, dc=subdomain1,dc=hostedCompany1,dc=example,dc=com"
マクロが展開されると、通常のプロセスに続いてDirectory ServerがACIを評価し、アクセス権が与えられるかどうかを決定します。
注意: 標準のACIとは異なり、マクロ置換を使用したACIはターゲット・エントリの子へのアクセスを許可する必要はありません。これは、子のDNがターゲットとなった場合に、置換によってサブジェクト文字列内に有効なDNが作成されない可能性があるためです。
[$dn]の置換メカニズムは($dn)のものと少し異なります。一致する対象が見つかるまで、一番左にあるRDNコンポーネントを外しながら、ターゲット・リソースのDNの検証を繰り返します。
たとえば、cn=all,ou=groups, dc=subdomain1,dc=hostedCompany1,dc=example,dc=comサブツリーをターゲットとするLDAPリクエストで、次のようなACIがあるとします。
aci: (targetattr="*") (target="ldap:///ou=Groups,($dn),dc=example,dc=com") (version 3.0; acl "Domain access"; allow (read,search) groupdn="ldap:///cn=DomainAdmins,ou=Groups,[$dn], dc=example,dc=com";)
サーバーは次のように処理を続け、このACIを展開します。
targetの($dn)とdc=subdomain1,dc=hostedCompany1が一致することを確認します。
サブジェクトの[$dn]をdc=subdomain1,dc=hostedCompany1で置き換えます。
この結果、サブジェクトはgroupdn="ldap:///cn=DomainAdmins,ou=Groups, dc=subdomain1,dc=hostedCompany1,dc=example,dc=com"になります。バインドDNがそのグループのメンバーであるためにアクセスが許可される場合は、マクロの展開を停止し、ACIを評価します。バインドDNがメンバーでない場合は、処理を継続します。
サブジェクトの[$dn]をdc=hostedCompany1で置き換えます。
この結果、サブジェクトはgroupdn="ldap:///cn=DomainAdmins,ou=Groups, dc=hostedCompany1,dc=example,dc=com"になります。バインドDNがこのグループのメンバーであるかどうかが再び検証され、メンバーである場合はACIが完全に評価されます。バインドDNがメンバーでない場合は、マクロの展開は最後に一致したRDNで置き換えたところで終了し、このACIに対する評価は終了します。
[$dn]マクロの利点は、ドメインレベルの管理者に対して、ディレクトリ・ツリー内のすべてのサブドメインへのアクセス権を柔軟な方法で与えられることです。したがって、[$dn]マクロは、ドメイン間の階層的な関係を表す場合に便利です。
たとえば、次のようなACIがあるとします。
aci: (target="ldap:///ou=*,($dn),dc=example,dc=com") (targetattr="*") (targetfilter=(objectClass=nsManagedDomain)) (version 3.0; acl "Domain access"; allow (read,search) groupdn= "ldap:///cn=DomainAdmins,ou=Groups,[$dn],dc=example,dc=com";)
このACIは、cn=DomainAdmins,ou=Groups, dc=hostedCompany1,dc=example,dc=comのメンバーに対して、dc=hostedCompany1の下にあるすべてのサブドメインへのアクセス権を与えます。したがって、そのグループに属する管理者は、サブツリーou=people,dc=subdomain1.1,dc=subdomain1などにアクセスできます。
ただし、同時に、cn=DomainAdmins,ou=Groups, dc=subdomain1.1のメンバーのou=people,dc=subdomain1, dc=hostedCompany1およびou=people,dc=hostedCompany1ノードに対するアクセスは拒否されます。
($attr.attrname)マクロは、常にDNのサブジェクト部分で使用されます。たとえば、次のようなrolednを定義できます。
roledn = "ldap:///cn=DomainAdmins,($attr.ou),dc=HostedCompany1,dc=example,dc=com"
ここで、サーバーが次のエントリをターゲットとするLDAP操作を受け取ったとします。
dn: cn=Babs Jensen,ou=People,dc=HostedCompany1,dc=example,dc=com cn: Babs Jensen sn: Jensen ou: Sales ...
ACIのroledn部分を評価するために、サーバーはターゲット・エントリに格納されているou属性の値を読み取ります。その後、サブジェクト内でこの値を置換してマクロを展開します。この例では、rolednは次のように展開されます。
roledn = "ldap:///cn=DomainAdmins,ou=Sales,dc=HostedCompany1,dc=example,dc=com"
続いて、通常のACI評価アルゴリズムに従って、Directory ServerがACIを評価します。
マクロ内で指定された属性が複数の値を持つ場合は、それぞれの値を使用して順にマクロが展開されます。最初にマッチングに成功した値が使用されます。