管理用户、虚拟主机和权限
使用 RabbitMQ 用户、虚拟主机和权限来隔离应用程序,并降低凭据泄露带来的影响。生产工作负载不应与应用程序客户端共享平台生成的管理员账户。
本指南说明如何创建虚拟主机、创建应用程序用户,以及授予最小权限。
前提条件
在管理用户和权限之前,请确保满足以下条件:
- 你拥有 RabbitMQ Pod 的管理端点或
kubectl exec访问权限。 - 你拥有管理员凭据。有关平台生成的默认账户,请参见 User Management。
- 你了解应用程序所需的虚拟主机名称、应用程序用户名,以及交换机或队列命名模式。
权限模型
RabbitMQ 权限的作用域限定在虚拟主机级别,并包含三个正则表达式:
为应用程序用户使用更窄的正则表达式。仅将 administrator 标签授予需要跨实例具备管理权限的运维用户。
操作步骤
1. 创建虚拟主机
为该应用程序创建一个虚拟主机:
对于在 RabbitMQ Pod 内执行的命令,你也可以使用 rabbitmqctl:
2. 创建应用程序用户
为该应用程序创建一个用户。不要将该用户重复用于管理。
如果你使用 rabbitmqctl,请运行:
将应用程序密码存储在 Kubernetes Secret 中,或存储在你批准的密钥管理器中。不要将其以明文形式存储在应用程序清单中。
3. 授予应用程序权限
以下示例允许 payments-app 用户在 payments 虚拟主机中配置、发布到以及消费以 payments. 开头的资源:
等效的 rabbitmqctl 命令为:
4. 在需要时授予 topic 权限
如果应用程序使用 topic 授权,请将 topic 权限与资源权限分开定义:
仅当你的授权模型需要时才配置 topic 权限。
5. 验证访问
列出虚拟主机、用户和权限:
使用应用程序用户验证应用程序连接性,不要使用管理员账户。
推荐实践
- 为每个应用程序或租户边界创建专用虚拟主机。
- 为每个应用程序运行时身份创建一个 RabbitMQ 用户。
- 对应用程序用户使用更窄的权限正则表达式,而不是
.*。 - 将管理员用户与生产者和消费者用户分开。
- 通过 Kubernetes
Secret更新或你批准的密钥管理器轮换应用程序密码。 - 在应用程序下线时移除用户和权限。