跳至主内容
版本:4.2

认证/授权缓存后端

概述

此插件提供了一种以可配置的时间缓存认证和授权后端结果的方式。它不是一个独立的认证后端,而是现有后端(例如内置的、LDAPHTTP 后端)的缓存层。虽然它与内置的(内部)认证和授权后端的结合不太有用,但可以与其他使用网络请求的后端(如 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_etsETS 表中存储缓存条目,并使用计时器进行缓存失效。这是默认实现
  • 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 argsStart 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
© . This site is unofficial and not affiliated with VMware.