8.3. デュアルエントリーの自動作成

一部のクライアントおよび Red Hat Directory Server と統合には、2 つのエントリーが必要です。たとえば、Posix システムには、通常、各ユーザーにグループがあります。Directory Server の 管理エントリープラグイン は、適切な作成元のエントリーが作成されるたびに、属性の正確な値と特定の値で新しい管理エントリーが自動的に作成されます。

8.3.1. マネージドエントリー

管理エントリープラグインの背後にある基本的な概念は、エントリー A の作成時に、関連する属性値を含むエントリー B が自動的に配置される必要があることです。たとえば、Posix ユーザー (posixAccount エントリー) が作成されると、対応するグループエントリー (posixGroup エントリー) も作成する必要があります。管理エントリープラグインのインスタンスは、プラグインが、新しいエントリー (管理エントリー) を自動的に生成するエントリー (作成元のエントリー) を識別します。
プラグインは、ディレクトリーツリーの定義範囲内で機能し、指定した検索フィルターに一致するエントリーのみが管理エントリー操作をトリガーします。
サービスのクラスを設定するのと同様に、管理エントリーは 2 つのエントリーで設定されます。
  • プラグインインスタンスおよび使用するテンプレートの範囲を特定する定義エントリー
  • 最終的な管理エントリーをモデル化するテンプレートエントリー

8.3.1.1. インスタンス定義エントリーの概要

リンク先属性および DNA プラグインと同様に、Managed Entries プラグインには cn=plugins,cn=config にコンテナーエントリーがあり、プラグインの各固有の設定インスタンスには、そのコンテナーの下に定義エントリーがあります。
管理エントリープラグインのインスタンスは、以下の 3 つを定義します。
  • (検索範囲と検索フィルターを使用する) 作成元のエントリーを識別する検索基準
  • 管理エントリーを作成するサブツリー (新しいエントリーの場所)
  • 管理エントリーに使用するテンプレートエントリー

図8.2 管理エントリーの定義

管理エントリーの定義
以下に例を示します。
dn: cn=Posix User-Group,cn=Managed Entries,cn=plugins,cn=config
objectclass: extensibleObject
cn: Posix User-Group
originScope: ou=people,dc=example,dc=com
originFilter: objectclass=posixAccount
managedBase: ou=groups,dc=example,dc=com
managedTemplate: cn=Posix User-Group Template,ou=Templates,dc=example,dc=com
作成元のエントリーには、管理エントリーを作成するために特別な設定または設定は必要ありません。プラグインの範囲内に作成し、指定の検索フィルターと一致させる必要があります。

8.3.1.2. テンプレートエントリーの概要

プラグインの各インスタンスは、管理エントリー設定を定義するテンプレートエントリーを使用します。テンプレートは、オブジェクトクラスからエントリーの値にエントリーを効果的に配列します。
注記
テンプレートは定義エントリーで参照されるため、ディレクトリーのどこにでも配置できます。ただし、テンプレートエントリーを複製された接尾辞の下に置くことが推奨されます。これにより、マルチサプライヤーレプリケーションの他のサプライヤーはすべて、管理エントリープラグインのローカルインスタンスに同じテンプレートを使用します。
テンプレートエントリーの概念は、CoS で使用されるテンプレートに似ていますが、重要な相違点があります。マネージドエントリーテンプレートは、サービスのクラスに使用されるテンプレートのタイプとは若干異なります。サービスのクラスの場合、テンプレートには、その CoS に属するすべてのエントリーに読み込まれる特定の値を持つ 1 つの属性が含まれます。このようなエントリーの CoS 属性は、エントリーに設定した属性ではなく、仮想属性であるため、サービスのクラスへの変更は直ちに関連エントリーに反映されます。
一方、管理エントリープラグインのテンプレートエントリーは、関連するエントリーに値を提供する中央エントリーではありません。これは真のテンプレートです。エントリーの内容をレイアウトします。テンプレートエントリーには、静的属性 (CoS のように事前定義の値を持つもの) とマップされた属性 (作成元のエントリーからの値または値の一部をプルする属性) の両方を含めることができます。テンプレートは、管理エントリーが作成され、作成元のエントリーが変更され、テンプレートがこれらの更新を適用するために再度評価される場合に のみ 管理エントリーに適用されます。

図8.3 テンプレート、マネージドエントリー、およびアーティファクトエントリー

テンプレート、マネージドエントリー、およびアーティファクトエントリー
テンプレートは、テンプレートに static 属性を使用して、管理エントリーの属性に特定の値を指定できます。テンプレートは、作成元のエントリーの一部の属性から派生する値を使用することもできるため、この値はエントリーへのエントリーとは異なる場合があります。これは、値ではなく作成元のエントリーの属性タイプを参照するため、マップされた 属性とは異なる場合があります。
マップされた値は、トークン (動的な値) と静的な値の組み合わせを使用しますが、マップされた属性ごとに 1 つのトークン しか使用できません。
dn: cn=Posix User-Group Template,ou=Templates,dc=example,dc=com
objectclass: mepTemplateEntry
cn: Posix User-Group Template
mepRDNAttr: cn
mepStaticAttr: objectclass: posixGroup
mepMappedAttr: cn: $cn Group Entry
mepMappedAttr: gidNumber: $gidNumber
mepMappedAttr: memberUid: $uid
テンプレートのマップされた属性は、先頭にドル記号 ($) を追加して作成元のエントリーから値をプルして管理エントリーで使用するトークンを使用します。ドル記号が管理属性値で実際に定義されている場合は、ドル記号を 2 つ使用してドル記号をエスケープできます。
マッピングされた属性の定義は、Attr: ${cn}test など、中括弧で囲んで引用することができます。トークン名の直後にスペースやコンマなど属性名として有効な文字が使用される場合は、トークンの値を引用符で囲む必要はありません。たとえば、$cn test は属性名の直後に続くため、属性定義では使用できますが、管理エントリープラグインは作成元のエントリーで cntest という名前の属性を検索しようとするため、$cntest は有効ではありません。中括弧を使用すると、属性トークン名を識別します。
注記
静的属性およびマップされた属性に値が必要な属性の構文に準拠するようにしてください。

8.3.1.3. 管理エントリープラグインにより書き込まれるエントリー属性

作成元のエントリーと管理エントリーの両方には、管理エントリープラグインのインスタンスによって管理されていることを示す特別な管理エントリー属性があります。作成元のエントリーでは、プラグインは関連付けられた管理エントリーへのリンクを追加します。
dn: uid=jsmith,ou=people,dc=example,dc=com
objectclass: mepOriginEntry
objectclass: posixAccount
...
sn: Smith
mail: jsmith@example.com
mepManagedEntry: cn=jsmith Posix Group,ou=groups,dc=example,dc=com
管理エントリーでは、プラグインはテンプレートで定義された属性の他に、作成元のエントリーを参照する属性を追加します。
dn: cn=jsmith Posix Group,ou=groups,dc=example,dc=com
objectclass: mepManagedEntry
objectclass: posixGroup
...
mepManagedBy: uid=jsmith,ou=people,dc=example,dc=com
特別な属性を使用して、管理および作成元のエントリーを示すことで、関連するエントリーを簡単に特定し、管理エントリープラグインによる変更を評価できます。

8.3.1.4. 管理エントリープラグインおよび Directory Server 操作

管理エントリープラグインでは、追加操作および削除操作と同様に、Directory Server が一般的な操作を実行する方法に影響します。

表8.3 管理エントリープラグインおよび Directory Server 操作

演算子 マネージドエントリープラグインによる効果
Add すべての追加操作では、サーバーは新しいエントリーが管理エントリープラグインインスタンスの範囲内にあるかどうかを確認します。作成元エントリーの基準を満たすと、管理エントリーが作成され、管理エントリー関連の属性が元のエントリーと管理エントリーの両方に追加されます。
Modify
作成元のエントリーが変更すると、管理エントリーを更新するプラグインが誘発されます。ただし、テンプレート エントリーを変更しても、自動的に管理エントリーを更新しません。テンプレートエントリーへの変更は、次に作成元エントリーが変更するまで、管理エントリーに反映されません。
管理エントリー でマップされた管理属性は、管理エントリープラグインでのみ手動で変更することができません。マネージドエントリーの他の属性 (管理エントリープラグインで追加された静的属性を含む) は手動で変更できます。
Delete 作成元のエントリーが削除されると、管理エントリープラグインもそのエントリーに関連付けられた管理エントリーを削除します。削除できるエントリーにはいくつかの制限があります。
  • テンプレートエントリーは、プラグインインスタンス定義で現在参照されている場合は削除できません。
  • 管理エントリーは、管理エントリープラグイン以外では削除できません。
Rename 元のエントリーの名前を変更した場合は、プラグインは対応する管理エントリーを更新します。エントリーがプラグインスコープの に移動すると、管理エントリーが削除されますが、エントリーがプラグインスコープの に移動した場合は、追加操作のように処理され、新しい管理エントリーが作成されます。削除操作と同様に、名前変更または移動できるエントリーに制限があります。
  • 設定定義エントリーは、コンテナーエントリーの管理エントリープラグインを外に移動できません。エントリーが削除されると、そのプラグインインスタンスが非アクティブになります。
  • エントリーが管理エントリープラグインのコンテナーエントリー に移動する場合、これは検証され、アクティブな設定定義として処理されます。
  • テンプレートエントリーの名前を変更したり、プラグインインスタンス定義で現在参照している場合は移動したりすることはできません。
  • 管理エントリープラグインの名前を変更または移動することはできません。
レプリケーション 管理エントリープラグイン操作は レプリケーションの更新によって開始しません。プラグインスコープのエントリーの追加または修正操作が別のレプリカに複製される場合、その操作はレプリカで管理エントリープラグインインスタンスを発生させず、エントリーを作成または更新しません。管理エントリーの更新を複製する唯一の方法は、最終管理エントリーをレプリカに複製することです。

8.3.2. マネージドエントリーテンプレートエントリーの作成

最初に作成するエントリーはテンプレートエントリーです。テンプレートエントリーには、生成される管理エントリーに必要なすべての設定を含める必要があります。これは、テンプレート内の静的およびマップされた属性に属性値表明を設定して行います。
mepStaticAttr: attribute: specific_value
mepMappedAttr: attribute: $token_value
静的属性は明示的な値を設定し、マップされた属性は、元のエントリーから一部の値をプルし、指定の属性を提供するためにそれを使用します。これらの属性の値は、attribute: $attr のトークンになります。属性の拡張トークンの構文が必要な属性構文に違反しない限り、他の用語や文字列を属性で使用できます。以下に例を示します。
mepMappedAttr: cn: Managed Group for $cn
管理エントリーについて、その後に設定する必要がある構文ルールがいくつかあります。
  • マップされた値は、トークン (動的な値) と静的な値の組み合わせを使用しますが、マップされた属性ごとに 1 つのトークン しか使用できません。
  • テンプレートのマップされた属性は、先頭にドル記号 ($) を追加して作成元のエントリーから値をプルして管理エントリーで使用するトークンを使用します。ドル記号が管理属性値で実際に定義されている場合は、ドル記号を 2 つ使用してドル記号をエスケープできます。
  • マッピングされた属性の定義は、Attr: ${cn}test など、中括弧で囲んで引用することができます。トークン名の直後にスペースやコンマなど属性名として有効な文字が使用される場合は、トークンの値を引用符で囲む必要はありません。たとえば、$cn test は属性名の直後に続くため、属性定義では使用できますが、管理エントリープラグインは作成元のエントリーで cntest という名前の属性を検索しようとするため、$cntest は有効ではありません。中括弧を使用すると、属性トークン名を識別します。
  • 静的属性およびマップされた属性に値が必要な属性の構文に準拠するようにしてください。
注記
静的属性およびマップされた属性に値が必要な属性の構文に準拠するようにしてください。たとえば、マップされた属性のいずれかが gidNumber の場合、マップされた値は整数にする必要があります。

表8.4 管理エントリーテンプレートの属性

属性 説明
mepTemplateEntry (オブジェクトクラス) テンプレートとしてエントリーを識別します。
cn エントリーの共通名を指定します。
mepMappedAttr プラグインは、元のエントリーから取得した値で管理エントリーの属性を作成するために使用する属性とトークンのペアが含まれます。
mepRDNAttr 管理エントリーで naming 属性として使用する属性を指定します。RDN として使用される属性は、設定のためにマップされた属性である 必要があります
mepStaticAttr 管理エントリーに指定された値とともに使用される属性と値のペアが含まれます。
テンプレートエントリーを作成するには、以下を実行します。
dsconf plugin managed-entries template add コマンドを使用して、テンプレートエントリーを追加します。以下に例を示します。
# dsconf -D "cn=Directory Manager" ldap://server.example.com plugin managed-entries template "cn=Posix User Template,ou=templates,dc=example,dc=com" add --rdn-attr "cn" --static-attr "objectclass: posixGroup" --mapped-attr "cn: $cn Group Entry" "gidNumber: $gidNumber" "memberUid: $uid"

8.3.3. マネージドエントリーインスタンス定義の作成

テンプレートエントリーが作成されると、そのテンプレートを参照する定義エントリーを作成できます。定義エントリーは、管理エントリープラグインのインスタンスです。
注記
定義が作成されると、サーバーは指定されたテンプレートエントリーが存在するかどうかを確認します。サーバーは、テンプレートが存在しないと、定義設定が無効であるという警告を返します。
定義エントリーは、潜在的な元のエントリーと管理エントリーを作成する情報を認識するためにパラメーターを定義する必要があります。プラグインインスタンスに使用できる属性は、表8.5「管理エントリー定義エントリーの属性」 に記載されています。

表8.5 管理エントリー定義エントリーの属性

属性名 説明
originFilter 検索に使用する検索フィルターで、管理エントリーを必要とするサブツリーのエントリーを特定します。構文は、通常の検索フィルターと同じです。
originScope 監視するプラグインの潜在的な元のエントリーを含むベースサブツリー。
managedTemplate 管理エントリーの作成に使用するテンプレートエントリーを特定します。このエントリーは、ディレクトリーツリーの任意の場所に置くことができます。
managedBase 管理エントリーを作成するサブツリー。
注記
管理エントリープラグインはデフォルトで有効です。このプラグインが無効になっている場合は、「プラグインの有効化および無効化」 で説明されているように、再度有効にします。
インスタンスを作成するには、以下を実行します。
  1. cn=Managed Entries,cn=plugins,cn=config コンテナーエントリーの下に、新しいプラグインインスタンスを作成します。以下に例を示します。
    # dsconf -D "cn=Directory Manager" ldap://server.example.com plugin managed-entries config "cn=instance,cn=Managed Entries,cn=plugins,cn=config" add --scope="ou=people,dc=example,dc=com" --filter="objectclass=posixAccount" --managed-base="ou=groups,dc=example,dc=com" --managed-template="cn=Posix User-Group Template,ou=Templates,dc=example,dc=com"
    このコマンドは、作成元のエントリー検索、新規管理エントリーの場所、使用するテンプレートエントリーの場所を設定します。
  2. Directory Server が動的プラグインを有効にするために設定されていない場合は、サーバーを再起動して変更した新しいプラグインインスタンスを読み込みます。
    # dsctl instance_name restart

8.3.4. 複製されたデータベースへの管理エントリープラグイン設定の追加

「マネージドエントリー」強調表示されているように、管理エントリープラグインの異なるインスタンスが、cn=plugins,cn=com のコンテナープラグインエントリーの下にある子として作成されます。(これは、複数のインスタンスを許可するプラグインに共通です。 この欠点は、cn=plugins,cn=com の設定エントリーが複製されないため、各 Directory Server インスタンスに設定を再作成する必要があります。
管理エントリープラグインエントリーでは、nsslapd-pluginConfigArea 属性が許可されます。この属性は、プラグインインスタンスエントリーが含まれるメインのデータベースエリアにおける、別のコンテナーエントリーへの属性です。このコンテナーエントリーは、複製されたデータベースで使用することができます。これにより、プラグイン設定を複製できます。
  1. コンテナーエントリーを作成します。たとえば、コンテナーエントリーを参照するエントリーを作成するには、次のコマンドを実行します。
    # dsconf -D "cn=Directory Manager" ldap://server.example.com plugin managed-entries set --config-area="cn=managed entries container,ou=containers,dc=example,dc=com"
  2. 新規コンテナーエントリーの下にある定義 (「マネージドエントリーインスタンス定義の作成」) エントリーおよびテンプレート (「マネージドエントリーテンプレートエントリーの作成」) エントリーを移動または作成します。