Red Hat Training
A Red Hat training course is available for Red Hat JBoss Enterprise Application Platform
3.3.2. LDAP と RBAC の承認の統合
LDAP サーバー (またはプロパティーファイル) を使って認証されたユーザーは、ユーザーグループのメンバーになることができます。ユーザーグループは、単一のユーザーに割り当てることのできる任意のラベルです。RBAC は、このグループ情報を使用してロールをユーザーに自動的に割り当てるか、ロールからユーザーを除外するように設定できます。
LDAP ディレクトリーには、ユーザーアカウントおよびグループのエントリーが含まれ、属性によって参照されます。LDAP サーバー設定によっては、ユーザーエンティティーはユーザーが所属するグループを memberOf 属性を介してマップできます。また、グループエンティティーは、uniqueMember 属性によってユーザーが属するユーザーをマップできます。ユーザーが LDAP サーバーに正常に認証されると、グループ検索が実行され、そのユーザーのグループ情報が読み込まれます。使用している Directory Server に応じて、グループ検索は、単純な名前 (通常は認証に使用されるユーザー名) を使用するか、ディレクトリー内のユーザーのエントリーの識別名を使用して実行できます。LDAP をセキュリティーレルムの承認メカニズムとして設定すると、グループ検索 (<group-search>) およびユーザー名と識別名 (<username-to-dn>) 間のマッピングが設定されます。
ユーザーのグループメンバーシップ情報が LDAP サーバーから決定されると、RBAC 設定内のマッピングを使用して、ユーザーが所有するロールが決定されます。このマッピングは、グループおよび個々のユーザーを明示的に包含または除外するように設定されます。
サーバーに接続するユーザーの認証手順が常に最初に行われます。ユーザーの認証に成功すると、サーバーはユーザーのグループを読み込みます。認証のステップと承認の手順では、それぞれ LDAP サーバーへの接続が必要です。セキュリティーレルムは、グループの読み込みステップで認証接続を再利用してこのプロセスを最適化します。
3.3.2.1. group-search の使用
グループメンバーシップ情報を検索する場合に使用できるスタイルには、Principal to Group および Group to Principal があります。グループのプリンシパルには、メンバーであるグループ (つまり、memberOf 属性) への参照を含むユーザーのエントリーがあります。Group to Principal には、グループのメンバーであるユーザー (つまり、uniqueMember) への参照が含まれるグループのエントリーがあります。
JBoss EAP 6 は Principal と Group to Principal の両方をサポートしますが、Group to Principal で Principal を使用することが推奨されます。グループへのプリンシパルが使用される場合、検索を実行せずに既知の識別名の属性を読み取ることで、グループ情報を直接読み込むことができます。Group to Principal では、ユーザーを参照するすべてのグループを特定するために、幅広い検索が必要になります。
Principal to Group と Group to Principal はいずれも、以下の属性を含む <group-search> タグを使用します。
| 属性 | 説明 |
|---|---|
| group-name | この属性は、ユーザーがメンバーとなるグループの一覧として返されたグループ名に使用されるフォームを指定するために使用されます。これは、グループ名の単純な形式か、グループの識別名のいずれかになります。識別名が必要な場合は、この属性を DISTINGUISHED_NAME に設定できます。デフォルトは SIMPLE です。 |
| iterative | この属性は、ユーザーがメンバーとなっているグループを特定した後、そのグループがメンバーとなっているグループを特定するために、グループに基づいて繰り返し検索を行う必要があるかどうかを示します。反復検索が有効になっていると、他のグループまたはサイクルが検出された場合に、メンバーではないグループに到達するまで継続されます。デフォルトは false です。 |
| group-dn-attribute | 属性が識別名であるグループのエントリーデフォルトは dn です。 |
| group-name-attribute | 属性が単純な名前であるグループのエントリーデフォルトは uid です。 |
同時グループメンバーシップは問題ではありません。各検索の記録は、すでに検索されているグループが再度検索されないように保持されます。
反復検索が機能するには、グループエントリーがユーザーエントリーと同じである必要があります。ユーザーがメンバーとなっているグループを識別するのに使用するのと同じアプローチを使用して、グループがメンバーとなっているグループを特定します。これは、グループメンバーシップ、クロス参照に使用される属性名の変更、または参照方向が変更された場合は利用できません。
グループ検索の Principal to Group (memberOf)
たとえば、GroupOne のメンバーの TestUserOne ユーザーと、GroupOne が次に GroupFive のメンバーとなる場合を考えます。グループメンバーシップは、メンバーレベルで memberOf 属性を使用することで表示されます。これは、TestUserOne によって、memberOf 属性が GroupOne の dn に設定されることになります。GroupOne は次に memberOf 属性を GroupFive の dn に設定します。
このタイプの検索を使用するために、principal-to-group 要素が group-search 要素に追加されます。
Principal to Group (つまり memberOf) の設定
<security-realm name="ldap-security-realm">
<authentication>
<ldap connection="ldap-connection" >
<!-- configuration -->
</ldap>
</authentication>
<authorization>
<ldap connection="ldap-connection">
<!-- configuration -->
<group-search group-name="SIMPLE" iterative="true" group-dn-attribute="dn" group-name-attribute="uid">
<principal-to-group group-attribute="memberOf" />
</group-search>
</ldap>
</authorization>
</security-realm>
<group-search> 内に、<principal-to-group> が group-attribute 属性で追加されていることに注意してください。参考情報:
表3.2 principal-to-group
| 属性 | 説明 |
|---|---|
| group-attribute | ユーザーがメンバーとなっているグループの識別名と一致するユーザーエントリーの属性の名前。デフォルトは memberOf です。 |
| prefer-original-connection | この値は、参照に従う際に優先するグループ情報を示します。プリンシパルがロードされるたびに、各グループメンバーシップの属性がその後にロードされます。属性がロードされるたびに、最後の参照情報からの元の接続または接続のいずれかを使用できます。デフォルトは true です。 |
Group to Principal (つまり uniqueMember) のグループ検索
Principal to Group と同じ例を考えてみましょう。ここでは、GroupOne のメンバーであるユーザーTestUserOne、次に GroupOne が GroupFive のメンバーです。ただし、この場合、グループメンバーシップはグループレベルで設定された uniqueMember 属性を使用することで表示されます。これは GroupFive によって、uniqueMember が GroupOne の dn に設定されていることを意味します。GroupOne は次に、uniqueMember を TestUserOne の dn に設定します。
このタイプの検索を使用するために、group-to-principal 要素が group-search 要素に追加されます。
Group to Principal (つまり uniqueMember) の設定
<security-realm name="ldap-security-realm">
<authentication>
<ldap connection="ldap-connection" >
<!-- configuration -->
</ldap>
</authentication>
<authorization>
<ldap connection="ldap-connection">
<!-- configuration -->
<group-search group-name="SIMPLE" iterative="true" group-dn-attribute="dn" group-name-attribute="uid">
<group-to-principal base-dn="ou=groups,dc=group-to-principal,dc=example,dc=org" recursive="true" search-by="DISTINGUISHED_NAME">
<membership-filter principal-attribute="uniqueMember" />
</group-to-principal>
</group-search>
</ldap>
</authorization>
</security-realm>
<group-search> 内で、<group-to-principal> に属性が追加され、<membership-filter> が含まれていることに注意してください。group-to-principal は、ユーザーエントリーを参照するグループの検索が実行される方法を定義するために使用され、membership-filter は、相互参照を定義するために使用されます。
参考情報:
表3.3 group-to-principal
| 属性 | 説明 |
|---|---|
| base-dn | 検索を開始するために使用するコンテキストの識別名。 |
| recursive | サブコンテキストも検索されるかどうか。デフォルトは false です。 |
| search-by | 検索で使用するロール名の形式。有効な値は SIMPLE および DISTINGUISHED_NAME です。デフォルトは DISTINGUISHED_NAME です。 |
| prefer-original-connection | この値は、参照に従う際に優先するグループ情報を示します。プリンシパルがロードされるたびに、各グループメンバーシップの属性がその後にロードされます。属性がロードされるたびに、最後の参照情報からの元の接続または接続のいずれかを使用できます。 |
表3.4 membership-filter
| 属性 | 説明 |
|---|---|
| principal-attribute | ユーザーエントリーを参照するグループエントリーの属性の名前。デフォルトは member です。 |