身份验证/授权缓存后端
概述
此插件提供了一种缓存身份验证和授权后端结果的方法,缓存时间可配置。它不是一个独立的身份验证后端,而是一个现有后端(例如内置后端、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
基本缓存配置
您可以配置缓存项的 TTL,通过使用 cache_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