7.7. アクセス制御の設計
認証スキームを決定したら、それらのスキームを使用してディレクトリーに含まれる情報を保護する方法を決定します。アクセス制御では、特定のクライアントが特定の情報にアクセスでき、その他のクライアントはアクセスできないように指定できます。
アクセス制御を定義するには、1 つ以上の アクセス制御リスト (ACL) を使用します。ディレクトリーの ACL は、指定されたエントリーとその属性へのパーミッション (読み取り、書き込み、検索、比較など) を許可または拒否する一連の 1 つ以上の アクセス制御情報 (ACI) ステートメントで構成されます。
ACL を使用すると、ディレクトリーツリーの任意のレベルでパーミッションを設定できます。
- ディレクトリー全体
- ディレクトリーの特定のサブツリー
- ディレクトリーの特定のエントリー
- エントリー属性の特定セット
- 指定の LDAP 検索フィルターと一致するエントリー
さらに、特定のユーザー、特定のグループに属するすべてのユーザー、またはディレクトリーのすべてのユーザーに対してパーミッションを設定することもできます。IP アドレス (IPv4 または IPv6) や DNS 名などのネットワークの場所へのアクセスを定義できます。
7.7.1. ACI 形式について リンクのコピーリンクがクリップボードにコピーされました!
セキュリティーポリシーを設計するときは、ディレクトリー内で ACI が表現される方法と、設定できるパーミッションを理解する必要があります。
ディレクトリー ACI は次の一般的な形式を使用します。
target permission bind_rule
target permission bind_rule
ACI 変数の説明は次のとおりです。
- Target
- ACI が対象とするエントリー (通常はサブツリー)、対象とする属性、またはその両方を指定します。ターゲットは ACI が適用されるディレクトリー要素を識別します。ACI はエントリーを 1 つだけターゲットにできますが、複数の属性をターゲットにできます。さらに、ターゲットには LDAP 検索フィルターを含めることができます。共通の属性値を含む、広範囲に分散したエントリーに対してパーミッションを設定できます。
- Permission
- ACI が設定する実際のパーミッションを識別します。パーミッション変数は、ACI が指定されたターゲットへの読み取りや検索などの特定のタイプのディレクトリーアクセスを許可または拒否することを示します。
- Bind rule
- パーミッションが適用されるバインド DN またはネットワークの場所を特定します。バインドルールは LDAP フィルターを指定する場合もあり、そのフィルターがバインドクライアントアプリケーションに対して true であると評価された場合、ACI はクライアントアプリケーションに適用されます。
したがって、ディレクトリーオブジェクトターゲットの場合、バインドルールが true の場合、ACI はパーミッションを許可または拒否します。
パーミッションとバインドルールはペアで設定され、すべてのターゲットには複数のパーミッションとバインドルールのペアを設定できます。特定のターゲットに対して複数のアクセス制御を効果的に設定できます。以下に例を示します。
target (permission bind_rule)(permission bind_rule) ...
target (permission bind_rule)(permission bind_rule) ...
7.7.1.1. ターゲット リンクのコピーリンクがクリップボードにコピーされました!
ACI は、ディレクトリーエントリーとそのエントリーの属性をターゲットにすることができます。
ディレクトリーエントリーをターゲットにすると、そのエントリーとそのすべての子エントリーがパーミッションの範囲に含まれます。ACI のターゲットエントリーを明示的に定義しない場合、ACI は ACI ステートメントを含むディレクトリーエントリーをターゲットにします。ACI は、1 つのエントリーのみ、または単一の LDAP 検索フィルターに一致するエントリーのみを対象にすることができます。
属性をターゲットにすると、属性値のサブセットにのみパーミッションが適用されます。属性セットをターゲットにする場合は、ACI がターゲットとする属性、または ACI がターゲットとしない属性を明示的に指定します。ターゲット内の属性を除外すると、オブジェクトクラス構造で許可される一部の属性を除くすべての属性に対するパーミッションが設定されます。
7.7.1.2. パーミッション リンクのコピーリンクがクリップボードにコピーされました!
パーミッションによってアクセスを許可または拒否できます。パーミッションを拒否しないでください。詳細は、アクセスの許可または拒否 を参照してください。
パーミッションは、ディレクトリーサービスに対して実行される操作のいずれかです。
| パーミッション | 説明 |
|---|---|
| Read | ユーザーがディレクトリーデータを読み取ることができるかを示します。 |
| Write | ユーザーがディレクトリーを変更または作成できるかを示します。さらに、このパーミッションにより、ユーザーはディレクトリーデータを削除することはできますが、エントリー自体は削除できません。ただし、エントリー全体を削除するには、ユーザーに delete パーミッションが必要です。 |
| Search | ユーザーがディレクトリーデータを検索できるかを示します。これは、read パーミッションとは異なります。read パーミッションの場合は、検索操作の一部として返される場合に、ユーザーがディレクトリーデータを表示することを許可します。
たとえば、共通名 ( |
| Compare |
ユーザーがデータを比較できるかどうかを示します。compare パーミッションには検索機能が含まれますが、Directory Server は検索の結果として実際のディレクトリー情報を返しません。代わりに、Directory Server は、比較された値が一致するかどうかを示す単純なブール値を返します。ディレクトリーの認証中に比較操作を使用して、 |
| Self-write | self-write パーミッションはグループ管理にのみ使用してください。このパーミッションにより、ユーザーは自分自身をグループに追加したり、グループから削除したりできます。 |
| 追加 | ユーザーが対象エントリーの下に子エントリーを作成できるか示します。 |
| Delete | ユーザーが対象エントリーを削除できるか示します。 |
| プロキシー | ユーザーが Directory Manager 以外の他の DN を使用して、この DN の権限でディレクトリーにアクセスできることを示します。 |
7.7.1.3. バインドルール リンクのコピーリンクがクリップボードにコピーされました!
バインドルールは、ACI が適用されるバインド DN (ユーザー) を定義します。また、時刻や IP アドレスなどのバインド属性を指定することもできます。
さらに、バインドルールでは、ACI がユーザー自身のエントリーにのみ適用されることを簡単に定義できます。ユーザーは、他のユーザーのエントリーを更新するリスクを負うことなく、自分のエントリーを更新できます。
バインドルールは、ACI が適用される次の状況を示します。
- バインド操作が特定の IP アドレス (IPv4 または IPv6) または DNS ホスト名から到着した場合。これを使用すると、特定のマシンまたはネットワークドメインからのすべてのディレクトリー更新を強制的に実行できます。
- ユーザーが匿名でバインドする場合。匿名バインドのパーミッションを設定すると、そのパーミッションはディレクトリーにバインドするすべてのユーザーに適用されることになります。
- ディレクトリーに正常にバインドされるユーザーの場合。これを使用すると、匿名アクセスを阻止する一方で、一般アクセスを許可することができます。
- ユーザーがエントリーの直接の親としてバインドされている場合。
- ユーザーが特定の LDAP 検索条件を満たしている場合。
Directory Server は、バインドルールに次のキーワードを提供します。
- Parent
- バインド DN が直接の親エントリーである場合、バインドルールは true になります。ディレクトリーエントリーがその直下の子エントリーを管理できるようにする特定のパーミッションを付与できます。
- Self
- バインド DN がアクセスを要求するエントリーと同じである場合、バインドルールは true になります。特定のパーミッションを付与して、各ユーザーが自分のエントリーを更新できるようにすることができます。
- すべて
- ディレクトリーに正常にバインドされたユーザーは、バインドルールは true になります。
- 全ユーザー
- bind ルールは、すべてのユーザーで true になります。このキーワードを使用して、匿名アクセスを許可または拒否します。
7.7.2. パーミッションの設定 リンクのコピーリンクがクリップボードにコピーされました!
デフォルトでは、Directory Server は、Directory Manager を除くすべてのユーザーに対してあらゆる種類のアクセスを拒否します。したがって、ユーザーがディレクトリーにアクセスできるようにするには、ACI を設定する必要があります。
7.7.2.1. 優先度ルール リンクのコピーリンクがクリップボードにコピーされました!
ユーザーがディレクトリーエントリーに対して何らかのアクセスを試みると、Directory Server はディレクトリーに設定されているアクセス制御をチェックします。アクセスを決定するため、Directory Server は 優先度ルール を適用します。このルールは、競合する 2 つのパーミッションが存在する場合に、アクセスを拒否するパーミッションが、アクセスを許可するパーミッションよりも常に優先されることを示しています。
たとえば、Directory Server がディレクトリーのルートレベルでの書き込みパーミッションを拒否し、そのパーミッションがディレクトリーにアクセスするすべてのユーザーに適用される場合、書き込みアクセスを許可するその他のパーミッションに関係なく、どのユーザーもディレクトリーに書き込むことはできません。特定のユーザーにディレクトリーへの書き込みパーミッションを許可するには、元の書き込み拒否の範囲を設定して、そのユーザーが含まれないようにする必要があります。次に、ユーザーに対して追加の書き込み許可パーミッションを設定する必要があります。
7.7.2.2. アクセスの許可または不許可 リンクのコピーリンクがクリップボードにコピーされました!
ディレクトリーツリーへのアクセスを許可または拒否できますが、アクセスを明示的に拒否する場合は注意してください。優先ルールにより、Directory Server は、ディレクトリーの上位レベルでアクセスを拒否するルールを見つけた場合、アクセスを許可する可能性のある競合するパーミッションに関係なく、下位レベルでのアクセスを拒否します。
ユーザーまたはクライアントアプリケーションの可能な限り小さなサブセットのみが含まれるように、アクセスルールのスコープを制限します。たとえば、ユーザーが自分のディレクトリーエントリーの任意の属性に書き込めるようにパーミッションを設定しても、Directory Administrator グループのメンバーを除くすべてのユーザーに uid 属性への書き込み権限を拒否することができます。
または、以下の方法で書き込みアクセスを許可する 2 つのアクセス制御ルールを作成します。
-
uid属性を除くすべての属性への書き込み権限を許可するルールを 1 つ作成します。このルールはすべてのユーザーに適用される必要があります。 -
uid属性への書き込み権限を許可するルールを 1 つ作成します。このルールは、Directory Administrators グループのメンバーにのみ適用する必要があります。
許可特権のみを提供すると、明示的な拒否特権を設定する必要がなくなります。
7.7.2.3. アクセスを拒否する場合 リンクのコピーリンクがクリップボードにコピーされました!
明示的に拒否権限を設定する必要はほとんどありませんが、次の場合には役立ちます。
複雑な ACL が分散している大きなディレクトリーツリーがある場合。
セキュリティー上の理由により、Directory Server は特定のユーザー、グループ、または物理的なロケーションへのアクセスを突然拒否する必要がある場合があります。時間をかけて既存の ACL を注意深く調べ、許可パーミッションを制限する方法を理解する代わりに、分析を行う時間ができるまで、明示的な拒否特権を一時的に設定します。ACL がこのように複雑になると、拒否 ACI は将来的には管理オーバーヘッドにコストのみを追加します。できるだけ早く ACL を作り直して、明示的な拒否特権を回避し、アクセス制御スキーム全体を簡素化します。
アクセス制御は、曜日または時間に基づいて設定します。
たとえば、Directory Server はすべての書き込みアクティビティーを拒否することができます。時間は、日曜日午後 11 時 (
2300) から月曜日午前 1 時 (0100) までになります。管理の観点からは、ディレクトリー全体ですべての allow-for-write ACI を検索し、その範囲をこの時間枠内で制限するよりも、このタイプの時間ベースのアクセスを明示的に制限する ACI を管理する方が簡単な場合があります。ディレクトリー管理権限を複数のユーザーに委任する場合は、権限を制限します。
個人またはユーザーのグループに、ツリーの一部を変更を許可せずに、ディレクトリーツリーの一部の管理を許可するには、明示的な拒否特権を使用します。
たとえば、メール管理者が共通名 (
cn) 属性への書き込みアクセスを許可しないようにするには、共通名属性への書き込みアクセスを明示的に拒否する ACI を設定します。
7.7.2.4. アクセス制御ルールの配置場所 リンクのコピーリンクがクリップボードにコピーされました!
ディレクトリー内の任意のエントリーにアクセス制御ルールを追加できます。多くの場合、管理者はオブジェクトクラス domainComponent、country、organization、organizationalUnit、inetOrgPerson、または group. を持つエントリーにアクセス制御ルールを適用します。ACL 管理を簡素化するために、ルールを可能な限りグループに整理します。ルールは、ターゲットエントリーとそのエントリーのすべての子に適用されます。したがって、アクセス制御ルールは、個々のリーフ (個人など) のエントリーに分散させるのではなく、ディレクトリーのルートポイントまたはディレクトリーブランチポイントに配置するのが最適です。
7.7.2.5. フィルターされたアクセス制御ルールの使用 リンクのコピーリンクがクリップボードにコピーされました!
LDAP 検索フィルターを使用して、定義された基準セットに一致するディレクトリーエントリーへのアクセスを設定できます。たとえば、Marketing に設定された organizationalUnit 属性を含むすべてのエントリーに対して読み取りアクセスを許可します。
フィルターされたアクセス制御ルールにより、事前定義のアクセスレベルが許可されます。たとえば、ディレクトリーには自宅住所や電話番号の情報が含まれています。この情報を公開したい人もいれば、非公開にしたい人もいます。
アクセスを設定するには、次の方法を使用できます。
-
すべてのユーザーディレクトリーエントリーに
publishHomeContactInfoという属性を追加します。 -
publishHomeContactInfo属性が true (有効) に設定されているエントリーに対してのみ、homePhone属性とhomePostalAddress属性への読み取りアクセスを許可するアクセス制御ルールを設定します。LDAP 検索フィルターを使用して、このルールのターゲットを表します。 -
ディレクトリーユーザーが独自の
publishHomeContactInfo属性の値を true または false に変更できるようにします。これにより、ディレクトリーユーザーは、この情報が公開されているかどうかを判断できます。
7.7.3. ACI の表示: Get effective rights リンクのコピーリンクがクリップボードにコピーされました!
Get effective rights (GER) は、エントリー内の各属性に設定されているアクセス制御パーミッションを返す拡張 ldapsearch コマンドです。この検索により、LDAP クライアントは、サーバーのアクセス制御設定によってユーザーが実行できる操作を判別できます。
アクセス制御情報は、エントリー権限と属性権限の 2 つのアクセスグループに分かれています。エントリー権限は、変更や削除など、特定のエントリーに限定された権限です。属性権限は、ディレクトリー全体のその属性のすべてのインスタンスへのアクセス権です。
このような詳細なアクセス制御は、以下のような状況で必要になることがあります。
-
GER コマンドを使用して、ディレクトリーのアクセス制御命令をより適切に編成できます。あるユーザーグループが閲覧または編集できる内容を、別のユーザーグループと比較して制限しなければならない状況は頻繁に発生します。たとえば、
QA Managersグループのメンバーは、managerやsalaryなどの属性を検索して読み取る権限を持っていますが、それを変更または削除する権限を持っているのはHR Groupのメンバーだけです。他にも方法はありますが、ユーザーまたはグループの実効権限を確認することで、管理者が適切なアクセス制御を設定しているか確認できます。 -
GER コマンドを使用して、個人のエントリーで表示または変更できる属性を確認できます。たとえば、ユーザーは
homePostalAddressやcnなどの属性にアクセスできるはずですが、manager属性やsalary属性に対しては読み取り権限しか持っていない場合があります。
7.7.4. ACI の使用: いくつかのヒントとコツ リンクのコピーリンクがクリップボードにコピーされました!
次のヒントは、ディレクトリーセキュリティーモデルの管理にかかる管理上の負担を軽減し、ディレクトリーのパフォーマンス特性を向上させるのに役立ちます。
ディレクトリー内の ACI の数を最小限に抑えます。
Directory Server は 50,000 を超える ACI を評価できますが、多数の ACI ステートメントを管理するのは困難です。ACI の数が多いと、人間の管理者が特定のクライアントが使用できるディレクトリーオブジェクトをすぐに判断することが難しくなります。
Directory Server は、マクロを使用してディレクトリー内の ACI の数を最小限に抑えます。マクロを使用して、ACI ターゲットまたはバインドルール、あるいはその両方で DN またはその一部を表します。
アクセス許可の許可と拒否のバランスを取ります。
デフォルトのルールでは、明確にアクセスを許可されていないユーザーへのアクセスは拒否されますが、ツリーのルートに近いアクセスを許可する ACI を 1 つ使用し、リーフエントリーに近いアクセスを拒否する ACI を少数使用して、ACI の数を減らす方がよい場合があります。このシナリオでは、リーフエントリーの近くで複数の許可 ACI が使用されることを回避します。
ACI 内の最小の属性セットを識別します。
属性のサブセットへのアクセスを許可または拒否する場合、最小のリストが許可される属性のセットであるか、拒否される属性のセットであるかを選択します。次に、最小のリストの管理のみが必要になるように ACI を設定します。
たとえば、
personオブジェクトクラスには多数の属性が含まれています。ユーザーが少数の属性のみを更新できるようにするには、それらの属性のみへの書き込みアクセスを許可する ACI を記述します。ただし、少数の属性を除くすべての属性をユーザーが更新できるようにするには、これらの少数の名前付き属性を除くすべての属性への書き込みアクセスを許可する ACI を作成します。LDAP 検索フィルターの使用には注意が必要です。
検索フィルターでは、アクセスを管理するオブジェクトの名前は直接指定されません。したがって、それらを使用すると、予期しない結果が生じる可能性があります。特に、ディレクトリーが複雑になった場合に予期しない結果が生じる可能性があります。ACI で検索フィルターを使用する前に、同じフィルターを使用して
ldapsearch操作を実行し、結果を明確にします。ディレクトリーツリーの異なる部分で ACI を複製しないでください。
ACI の重複を防ぎます。たとえば、ディレクトリールートポイントに、
commonName属性とgivenName属性へのグループ書き込みアクセスを許可する ACI があり、同じグループにcommonName属性のみへの書き込みアクセスを許可する別の ACI がある場合、1 つのコントロールのみがグループへの書き込みアクセスを許可するように ACI を更新することを検討してください。ディレクトリーがより複雑になると、誤って ACI が重複するリスクが急速に高まります。ACI の重複を回避することで、ディレクトリーに含まれる ACI の総数が減り、セキュリティー管理が容易になります。
ACI に名前を付けます。
ACI の命名は任意ですが、各 ACI に短くて意味のある名前を付けることは、セキュリティーモデルの管理に役立ちます。
ディレクトリー内で ACI をできるだけ密接にグループ化します。
ACI の場所をディレクトリーのルートポイントと主要なディレクトリーのブランチポイントに制限するようにします。ACI をグループ化すると、ディレクトリー内の ACI の総数を最小限に抑えるだけでなく、ACI の合計リストを管理するのにも役立ちます。
バインド DN が
cn=Joeと等しくない場合に書き込みを拒否するなど、二重否定の使用は避けてください。この構文はサーバーにとっては完全に受け入れられますが、人間が読めるものではありません。
7.7.5. ルート DN (Directory Manager) への ACI の適用 リンクのコピーリンクがクリップボードにコピーされました!
通常のアクセス制御ルールは、Directory Manager ユーザーには適用されません。Directory Manager は、通常のユーザーデータベースではなく dse.ldif ファイルで定義されるため、ACI ターゲットにはそのユーザーが含まれません。
Directory Manager では、メンテナンスタスクを実行し、インシデントへの対応に高いレベルのアクセスが必要です。ただし、Directory Manager に一定レベルのアクセス制御を付与して、ルートユーザーとして不正アクセスや攻撃が行われるのを阻止することができます。
RootDN Access Control プラグインを使用して、Directory Manager ユーザーに固有の特定のアクセス制御ルールを設定します。
- 特定の日および特定の時間範囲でアクセスを許可または拒否する時間ベースのアクセス制御
- 定義された IP アドレス、サブネット、およびドメインからのアクセスを許可または拒否するための IP アドレスルール
- 特定のホスト、ドメイン、およびサブドメインからのアクセスを許可または拒否するホストアクセスルール
Directory Manager にはアクセス制御ルールを 1 つだけ設定できます。これはプラグインエントリーにあり、ディレクトリー全体に適用されます。
Directory Manager アカウントに適切なレベルのアクセス権があることを確認してください。この管理ユーザーは、時間外に保守操作を実行したり、障害に対応したりする必要がある場合があります。この場合、時間または曜日のルールを厳しく設定しすぎると、Directory Manager ユーザーがディレクトリーを効果的に管理できなくなる可能性があります。