认证/授权缓存后端
概述
此插件提供了一种以可配置的时间缓存认证和授权后端结果的方式。它不是一个独立的认证后端,而是现有后端(例如内置的、LDAP 或 HTTP 后端)的缓存层。虽然它与内置的(内部)认证和授权后端的结合不太有用,但可以与其他使用网络请求的后端(如 LDAP 或 HTTP)结合使用。
缓存过期目前是基于时间的。
目录
安装
rabbitmq_auth_backend_cache 插件随 RabbitMQ 一起提供。
与所有插件一样,它必须先启用才能使用,例如,使用 rabbitmqctl
rabbitmq-plugins enable rabbitmq_auth_backend_cache
授权和认证后端配置
要配置此插件以缓存所有授权和认证决策,首先将此缓存后端设置为 auth_backends 或其中之一,然后配置实际缓存的认证后端。
例如,缓存对 http 后端的请求
auth_backends.1 = cache
auth_cache.cached_backend = http
auth_http.http_method = post
可以为授权和认证使用不同的后端。
以下示例将插件配置为对 LDAP 后端进行认证,对内部后端进行授权
auth_backends.1 = cache
auth_cache.cached_backend.authn = ldap
auth_cache.cached_backend.authz = internal
基本缓存配置
您可以使用 cache_ttl 配置变量以毫秒为单位配置缓存项的 TTL。默认值为 15000 毫秒
auth_cache.cached_backend = ldap
auth_cache.cache_ttl = 5000
默认情况下,负面的认证和/或授权决策不会被缓存,只有肯定的会被缓存。但是,可以通过将 cache_refusals 设置为 true 来更改此行为,如下所示
auth_cache.cache_refusals = true
高级缓存配置
您还可以使用自定义缓存模块来存储缓存的请求。该模块应为实现 rabbit_auth_cache 行为的 Erlang 模块,并(可选)定义 start_link 函数来启动缓存进程。
此存储库提供了几个实现
rabbit_auth_cache_dict在内部进程字典中存储缓存条目。此模块仅用于演示,不应用于生产环境。rabbit_auth_cache_ets在 ETS 表中存储缓存条目,并使用计时器进行缓存失效。这是默认实现。rabbit_auth_cache_ets_segmented在多个 ETS 表中存储缓存条目,不删除单个缓存项,而是使用单独的进程进行垃圾回收。rabbit_auth_cache_ets_segmented_stateless与上一个相同,但最小化使用gen_server状态,使用 ets 表来存储分段信息。
要指定缓存模块,请使用 cache_module 配置键。此示例配置了 rabbit_auth_backend_ets_segmented 模块。
auth_cache.cache_module = rabbit_auth_backend_ets_segmented
在使用自定义 cache_module 实现时,可以使用 cache_module_args 指定 start args。Start args 应为传递给模块 start_link 函数的参数列表。
但是,附加的缓存模块参数只能通过 advanced.config 定义。
[
{rabbit, [
%% ...
]},
{rabbitmq_auth_backend_cache, [
{cache_module, rabbit_auth_backend_ets_segmented},
{cache_module_args, [10000]}
]}
].
如何清除缓存
可以使用 rabbitmqctl 命令 clear_auth_backend_cache 来清除所有集群节点上的缓存。
rabbitmqctl clear_auth_backend_cache