5.4. キャッシングの有効化
セキュリティーレルムには、認証とグループ読み込みの両方の LDAP クエリーの結果をキャッシュする機能もあります。この機能により、グループのグループメンバーシップ情報を反復的にクエリーする場合など、特定の状況で異なるユーザーが複数の検索で複数のクエリーの結果を再利用できます。3 つの異なるキャッシュが利用でき、それぞれが個別に設定され、独立して動作します。
- authentication
- group-to-principal
- username-to-dn
5.4.1. キャッシュ設定
キャッシュは相互に独立していますが、上記 3 つともすべて、同じ方法で設定されます。キャッシュごとに、以下の設定オプションがあります。
属性 | 説明 |
---|---|
type | この属性は、キャッシュが準拠するエビクションストラテジーを定義します。オプションは by-access-time および by-search-time です。by-access-time は、最終アクセスから一定期間が経過すると、キャッシュからアイテムが退避されます。by-search-time は、最終アクセスのタイミングに関係なく、アイテムがキャッシュに保存されていた期間をもとに退避されます。 |
eviction-time | これは、ストラテジーに応じてエビクションに費やす時間 (秒単位) を定義します。 |
cache-failures | これは、失敗した検索のキャッシュを有効または無効にするブール値です。この設定により、検索に失敗しているにも拘らず、同じ検索が LDAP サーバーに反復的にアクセスしないようにできる可能性がありますが、存在しないユーザーの検索でキャッシュがいっぱいになってしまう可能性もあります。この設定は特に、認証キャッシュに重要です。 |
max-cache-size |
この属性は、キャッシュの最大サイズ (アイテム数) を定義し、アイテムの退避を開始するタイミングを指定できます。必要に応じて新しい認証や検索で使用できるように、古いアイテムはキャッシュから退避されます。つまり |
5.4.2. 例
この例では、LDAPRealm
という名前のセキュリティーレルムが作成されていることを前提としています。このセキュリティーれルムは、既存の LDAP サーバーに接続して、認証および承認用に設定されます。現在の設定を表示するコマンドの詳細は 現在のャッシュ設定の読み取り を参照してください。LDAP を使用するセキュリティーレルムの作成に関する詳細は、レガシーコア管理認証の使用 を参照してください。
ベース設定の例
"core-service" : { "management" : { "security-realm" : { "LDAPRealm" : { "authentication" : { "ldap" : { "allow-empty-passwords" : false, "base-dn" : "...", "connection" : "MyLdapConnection", "recursive" : false, "user-dn" : "dn", "username-attribute" : "uid", "cache" : null } }, "authorization" : { "ldap" : { "connection" : "MyLdapConnection", "group-search" : { "group-to-principal" : { "base-dn" : "...", "group-dn-attribute" : "dn", "group-name" : "SIMPLE", "group-name-attribute" : "uid", "iterative" : true, "principal-attribute" : "uniqueMember", "search-by" : "DISTINGUISHED_NAME", "cache" : null } }, "username-to-dn" : { "username-filter" : { "attribute" : "uid", "base-dn" : "...", "force" : false, "recursive" : false, "user-dn-attribute" : "dn", "cache" : null } } } }, } } } }
"core-service" : {
"management" : {
"security-realm" : {
"LDAPRealm" : {
"authentication" : {
"ldap" : {
"allow-empty-passwords" : false,
"base-dn" : "...",
"connection" : "MyLdapConnection",
"recursive" : false,
"user-dn" : "dn",
"username-attribute" : "uid",
"cache" : null
}
},
"authorization" : {
"ldap" : {
"connection" : "MyLdapConnection",
"group-search" : {
"group-to-principal" : {
"base-dn" : "...",
"group-dn-attribute" : "dn",
"group-name" : "SIMPLE",
"group-name-attribute" : "uid",
"iterative" : true,
"principal-attribute" : "uniqueMember",
"search-by" : "DISTINGUISHED_NAME",
"cache" : null
}
},
"username-to-dn" : {
"username-filter" : {
"attribute" : "uid",
"base-dn" : "...",
"force" : false,
"recursive" : false,
"user-dn-attribute" : "dn",
"cache" : null
}
}
}
},
}
}
}
}
"cache" : null
が指定されているエリアはすべて、キャッシュを設定できます。
- 認証
- 認証時に、この定義を使用してユーザーの識別名を検出し、LDAP サーバーへの接続を試行し、この認証情報を使用してアイデンティティーが作成されたことを確認します。
group-search
定義-
グループ検索の定義です。今回は上記の設定例で
iterative
がtrue
に指定されているので反復検索になっています。まず、ユーザーが直接所属するグループをすべて検索します。その後、これらのグループごとに検索が実行され、他のグループに所属しているかどうかを特定します。このプロセスは、循環参照が検出されるか、最後のグループが所属するグループがなくなるまで継続されます。 - グループ検索の
username-to-dn
定義 - グループ検索は、ユーザーの識別名の有無に依存します。このセクションはすべての状況で使用されるわけではありませんが、ユーザーの識別名の検出を 2 回目に試行する時などに使用できます。これは、ローカル認証など、2 つ目の認証形式がサポートされる場合に便利で、必要になる場合さえもあります。
5.4.2.1. 現在のキャッシュ設定の読み取り
これ以降のセクションで使用する CLI コマンドでは、セキュリティーレルム
の名前に LDAPRealm を使用します。これは、実際に設定するレルムの名前に置き換える必要があります。
現在のキャッシュ設定を読み取る CLI コマンド
/core-service=management/security-realm=LDAPRealm:read-resource(recursive=true)
/core-service=management/security-realm=LDAPRealm:read-resource(recursive=true)
出力
{ "outcome" => "success", "result" => { "map-groups-to-roles" => true, "authentication" => { "ldap" => { "advanced-filter" => undefined, "allow-empty-passwords" => false, "base-dn" => "dc=example,dc=com", "connection" => "ldapConnection", "recursive" => true, "user-dn" => "dn", "username-attribute" => "uid", "cache" => undefined } }, "authorization" => { "ldap" => { "connection" => "ldapConnection", "group-search" => { "principal-to-group" => { "group-attribute" => "description", "group-dn-attribute" => "dn", "group-name" => "SIMPLE", "group-name-attribute" => "cn", "iterative" => false, "prefer-original-connection" => true, "skip-missing-groups" => false, "cache" => undefined } }, "username-to-dn" => { "username-filter" => { "attribute" => "uid", "base-dn" => "ou=Users,dc=jboss,dc=org", "force" => true, "recursive" => false, "user-dn-attribute" => "dn", "cache" => undefined } } } }, "plug-in" => undefined, "server-identity" => undefined } }
{
"outcome" => "success",
"result" => {
"map-groups-to-roles" => true,
"authentication" => {
"ldap" => {
"advanced-filter" => undefined,
"allow-empty-passwords" => false,
"base-dn" => "dc=example,dc=com",
"connection" => "ldapConnection",
"recursive" => true,
"user-dn" => "dn",
"username-attribute" => "uid",
"cache" => undefined
}
},
"authorization" => {
"ldap" => {
"connection" => "ldapConnection",
"group-search" => {
"principal-to-group" => {
"group-attribute" => "description",
"group-dn-attribute" => "dn",
"group-name" => "SIMPLE",
"group-name-attribute" => "cn",
"iterative" => false,
"prefer-original-connection" => true,
"skip-missing-groups" => false,
"cache" => undefined
}
},
"username-to-dn" => {
"username-filter" => {
"attribute" => "uid",
"base-dn" => "ou=Users,dc=jboss,dc=org",
"force" => true,
"recursive" => false,
"user-dn-attribute" => "dn",
"cache" => undefined
}
}
}
},
"plug-in" => undefined,
"server-identity" => undefined
}
}
5.4.2.2. キャッシュの有効化
このセクション以降で使用される管理 CLI コマンドは、セキュリティーレルムの authentication セクション (authentication=ldap/
) でキャッシュを設定します。また、承認セクションのキャッシュは、コマンドのパスの更新と同様の方法で設定できます。
キャッシュを有効化する管理 CLI コマンド
/core-service=management/security-realm=LDAPRealm/authentication=ldap/cache=by-access-time:add(eviction-time=300, cache-failures=true, max-cache-size=100)
/core-service=management/security-realm=LDAPRealm/authentication=ldap/cache=by-access-time:add(eviction-time=300, cache-failures=true, max-cache-size=100)
このコマンドでは、退避時間 300 秒 (5 分)、最大キャッシュサイズ 100 個で、認証用の by-access-time
キャッシュを追加します。さらに、検索に失敗した検索がキャッシュされます。または、by-search-time
キャッシュを設定することもできます。
/core-service=management/security-realm=LDAPRealm/authentication=ldap/cache=by-search-time:add(eviction-time=300, cache-failures=true, max-cache-size=100)
/core-service=management/security-realm=LDAPRealm/authentication=ldap/cache=by-search-time:add(eviction-time=300, cache-failures=true, max-cache-size=100)
5.4.2.3. 既存のキャッシュ検証
既存のキャッシュを確認する管理 CLI コマンド
/core-service=management/security-realm=LDAPRealm/authentication=ldap/cache=by-access-time:read-resource(include-runtime=true) { "outcome" => "success", "result" => { "cache-failures" => true, "cache-size" => 1, "eviction-time" => 300, "max-cache-size" => 100 } }
/core-service=management/security-realm=LDAPRealm/authentication=ldap/cache=by-access-time:read-resource(include-runtime=true)
{
"outcome" => "success",
"result" => {
"cache-failures" => true,
"cache-size" => 1,
"eviction-time" => 300,
"max-cache-size" => 100
}
}
include-runtime
属性は cache-size
を追加し、これでキャッシュの現在のアイテム数が表示されます。上記の出力では、このアイテム数は 1
です。
5.4.2.4. 既存のキャッシュの内容のテスト
既存のキャッシュの内容をテストする管理 CLI コマンド
/core-service=management/security-realm=LDAPRealm/authentication=ldap/cache=by-access-time:contains(name=TestUserOne) { "outcome" => "success", "result" => true }
/core-service=management/security-realm=LDAPRealm/authentication=ldap/cache=by-access-time:contains(name=TestUserOne)
{
"outcome" => "success",
"result" => true
}
これは、TestUserOne
のエントリーがキャッシュに存在することを示しています。
5.4.2.5. キャッシュのフラッシュ
キャッシュから 1 つの項目をフラッシュしたり、キャッシュ全体をフラッシュしたりすることができます。
アイテム 1 つをフラッシュする管理 CLI コマンド
/core-service=management/security-realm=LDAPRealm/authentication=ldap/cache=by-access-time:flush-cache(name=TestUserOne)
/core-service=management/security-realm=LDAPRealm/authentication=ldap/cache=by-access-time:flush-cache(name=TestUserOne)
全キャッシュをフラッシュする管理 CLI コマンド
/core-service=management/security-realm=LDAPRealm/authentication=ldap/cache=by-access-time:flush-cache()
/core-service=management/security-realm=LDAPRealm/authentication=ldap/cache=by-access-time:flush-cache()
5.4.2.6. キャッシュの削除
キャッシュを削除する管理 CLI コマンド
/core-service=management/security-realm=LDAPRealm/authentication=ldap/cache=by-access-time:remove() reload
/core-service=management/security-realm=LDAPRealm/authentication=ldap/cache=by-access-time:remove()
reload