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