2.3. マクロアクセス制御命令の使用
マクロアクセス制御命令 (ACI) を使用すると、LDAP エントリーの識別名 (DN) またはその一部を対象とするアクセスを自動化し、ACI の数を減らすことができます。
2.3.1. マクロアクセス制御命令の例 リンクのコピーリンクがクリップボードにコピーされました!
次の図は、サフィックスとして dc=hostedCompany1,dc=example,dc=com
および dc=hostedCompany2,dc=example,dc=com
と、サブドメインの繰り返しパターンを持つディレクトリーツリーを示しています。各サブドメインの構造は、ou=groups
、ou=people
エントリーと同じです。ディレクトリーツリーは、マクロアクセス制御命令 (ACI) を使用して、ACI の総数を減らします。
ディレクトリーツリーに適用される ACI には、繰り返しパターンがあります。たとえば、次の ACI は dc=hostedCompany1,dc=example,dc=com
ノードにあり、DomainAdmins
グループに対する読み取りおよび検索権限を、そのツリー内の任意のエントリーに付与します。
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: (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";)
図2.1 マクロ ACI ディレクトリーツリーの例
以下の ACI は、groupdn
キーワードの DN の異なる部分を示しています。
-
dc=hostedCompany1,dc=example,dc=com
ノードには、次の ACI が含まれています。
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: (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";)
-
dc=subdomain1,dc=hostedCompany1,dc=example,dc=com
ノードには、次の ACI が含まれています。
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: (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";)
-
dc=hostedCompany2,dc=example,dc=com
ノードには、次の ACI が含まれています。
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: (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";)
-
dc=subdomain1,dc=hostedCompany2,dc=example,dc=com
ノードには、次の ACI が含まれています。
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";)
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";)
マクロを使用して、繰り返しパターンの複数の ACI を置き換えます。たとえば、上記の ACI を 1 つに減らすには、次のマクロを使用します。
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="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";)
2.3.2. マクロアクセス制御命令の構文 リンクのコピーリンクがクリップボードにコピーされました!
マクロアクセス制御命令 (ACI) には、DN または DN の一部を置き換える次のタイプの式が含まれます。
-
($dn)
, -
[$dn]
, -
($attr.attrName)
。この場合の attrName は、ターゲットエントリーの一部である属性を表します。
ACI キーワードは、ACI の対象であるバインド認証情報を提供します。サブジェクトは、ACI が適用される場所を決定します。
マクロ | ACI キーワード | 説明 |
---|---|---|
|
|
サブジェクトのマッチングと直接置換。 |
|
| サブジェクトのサブツリーで機能する複数の RDN の置き換え。 |
|
|
ターゲットエントリーからサブジェクトへの |
マクロを使用する場合は、($dn)
マクロを含むターゲットを定義する必要があることに注意してください。($dn)
マクロと ($attr.attrName)
マクロを組み合わせることができます。
2.3.3. [$dn] マクロの例 リンクのコピーリンクがクリップボードにコピーされました!
[$dn]
マクロは、ターゲットとなるソースの DN を複数回確認します。このマクロは、一致するまで、確認するたびに左端の RDN コンポーネントを削除します。
たとえば、cn=all,ou=groups,dc=subdomain1,dc=hostedCompany1,dc=example,dc=com
サブツリーをターゲットとする LDAP リクエストと、以下の ACI があるとします。
aci: (target="ldap:///ou=groups,($dn),dc=example,dc=com") (targetattr = "*") (version 3.0; acl "Domain access"; allow (read,search) groupdn="ldap:///cn=domainAdmins,ou=groups,[$dn],dc=example,dc=com";)
aci: (target="ldap:///ou=groups,($dn),dc=example,dc=com")
(targetattr = "*") (version 3.0; acl "Domain access"; allow (read,search)
groupdn="ldap:///cn=domainAdmins,ou=groups,[$dn],dc=example,dc=com";)
マクロは次のように展開されます。
-
ターゲットの
($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] は
dc=hostedCompany1
です。この場合の結果は、
groupdn="ldap:///cn=domainAdmins,ou=Groups,dc=hostedCompany1,dc=example,dc=com"
になります。バインド DN がそのグループのメンバーでない場合、ACI は評価されません。これがメンバーの場合には、ACI が評価されます。
[$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: (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=hostedCompany1
および ou=people,dc=subdomain1,dc=hostedCompany1
ノードへのアクセスはありません。
2.3.4. ($dn) マクロの例 リンクのコピーリンクがクリップボードにコピーされました!
($dn)
マクロは、置換値を LDAP リクエストからのエントリーと比較します。たとえば、LDAP リクエストは次のエントリーを対象としています。
cn=all,ou=groups,dc=subdomain1,dc=hostedCompany1,dc=example,dc=com
cn=all,ou=groups,dc=subdomain1,dc=hostedCompany1,dc=example,dc=com
ACI は、次のターゲットを定義します。
(target="ldap:///ou=groups,($dn),dc=example,dc=com")
(target="ldap:///ou=groups,($dn),dc=example,dc=com")
この例では、($dn)
マクロは dc=subdomain1,dc=hostedCompany1
と一致します。
ACI のサブジェクトが ($dn)
マクロを使用する場合、ターゲットに一致するサブストリングによりサブジェクトが展開されます。
aci: (target="ldap:///ou=*,($dn),dc=example,dc=com") (targetattr = "*") (version 3.0; acl "Domain access"; allow (read,search) groupdn="ldap:///cn=domainAdmins,ou=groups,($dn),dc=example,dc=com";)
aci: (target="ldap:///ou=*,($dn),dc=example,dc=com")
(targetattr = "*") (version 3.0; acl "Domain access"; allow (read,search)
groupdn="ldap:///cn=domainAdmins,ou=groups,($dn),dc=example,dc=com";)
ACI は次のように展開されます。
aci: (target="ldap:///ou=groups,dc=subdomain1,dc=hostedCompany1, dc=example,dc=com") (targetattr = "*") (version 3.0; acl "Domain access"; allow (read,search) groupdn="ldap:///cn=domainAdmins,ou=groups, dc=subdomain1,dc=hostedCompany1,dc=example,dc=com";)
aci: (target="ldap:///ou=groups,dc=subdomain1,dc=hostedCompany1,
dc=example,dc=com") (targetattr = "*") (version 3.0; acl "Domain
access"; allow (read,search) groupdn="ldap:///cn=domainAdmins,ou=groups,
dc=subdomain1,dc=hostedCompany1,dc=example,dc=com";)
マクロが展開された後、Red Hat Directory Server は通常のプロセスに従って ACI を評価し、アクセスが許可されているか判断します。
2.3.5. ($attr.attrName) マクロの例 リンクのコピーリンクがクリップボードにコピーされました!
($attr.attrName)
マクロは、必ず DN の一部として使用します。たとえば、以下の roledn
を定義します。
roledn = "ldap:///cn=DomainAdmins,($attr.ou),dc=HostedCompany1,dc=example,dc=com"
roledn = "ldap:///cn=DomainAdmins,($attr.ou),dc=HostedCompany1,dc=example,dc=com"
サーバーが、以下のエントリーを対象とする LDAP 操作を受信すると仮定します。
dn: cn=Jane Doe,ou=People,dc=HostedCompany1,dc=example,dc=com cn: Jane Doe sn: Doe ou: Engineering...
dn: cn=Jane Doe,ou=People,dc=HostedCompany1,dc=example,dc=com
cn: Jane Doe
sn: Doe
ou: Engineering...
ACI の roledn
部分を評価するために、サーバーはターゲットエントリーの ou
属性を確認し、その値を使用してマクロを展開します。roledn
は次のように展開されます。
roledn = "ldap:///cn=DomainAdmins,ou=Engineering,dc=HostedCompany1,dc=example,dc=com"
roledn = "ldap:///cn=DomainAdmins,ou=Engineering,dc=HostedCompany1,dc=example,dc=com"
Red Hat Directory Server は、通常の ACI 評価アルゴリズムに従って ACI を評価します。
属性に複数の値がある場合、RHDS は各値を使用してマクロを展開し、展開されたマクロと最初に一致した値を使用します。以下に例を示します。
dn: cn=Jane Doe,ou=People,dc=HostedCompany1,dc=example,dc=com cn: Jane Doe sn: Doe ou: Engineering ou: People...
dn: cn=Jane Doe,ou=People,dc=HostedCompany1,dc=example,dc=com
cn: Jane Doe
sn: Doe
ou: Engineering
ou: People...
Red Hat Directory Server が ACI を評価するとき、展開された次の式に対して論理 OR を実行します。
roledn = "ldap:///cn=DomainAdmins,ou=Engineering,dc=HostedCompany1,dc=example,dc=com" roledn = "ldap:///cn=DomainAdmins,ou=People,dc=HostedCompany1,dc=example,dc=com"
roledn = "ldap:///cn=DomainAdmins,ou=Engineering,dc=HostedCompany1,dc=example,dc=com"
roledn = "ldap:///cn=DomainAdmins,ou=People,dc=HostedCompany1,dc=example,dc=com"