RabbitMQ
RabbitMQ 机密引擎根据配置的权限以及虚拟主机(virtual host)来动态生成用户凭据。这意味着需要访问虚拟主机的服务不再需要硬编码凭据。
由于每个服务都使用与众不同的凭据访问数据库,因此当发现有问题的数据访问时,审计会变得更加容易。我们可以通过 RabbitMQ 用户名跟踪到服务的特定实例。
Vault 在创建的用户对应的租约到期而变得无效时,会同时调用其自身内部的吊销系统以及删除 RabbitMQ 用户以确保该用户不再有效。
配置
大部分机密引擎在工作之前必须要先进行配置。这些步骤通常是由系统管理员或是配置管理工具来完成。
- 启用 RabbitMQ 机密引擎:
$ vault secrets enable rabbitmq
Success! Enabled the rabbitmq secrets engine at: rabbitmq/
默认情况下,机密引擎会挂载到名字对应的路径上。要在不同路径上启用机密引擎,请使用 -path
参数。
- 配置 Vault 用来与 RabbitMQ 通信以生成凭据的凭据:
$ vault write rabbitmq/config/connection \
connection_uri="http://localhost:15672" \
username="admin" \
password="password"
Success! Data written to: rabbitmq/config/connection
必须要确保 Vault 用户有管理用户的管理员权限。
- 在 Vault 中配置一个映射到 RabbitMQ 虚拟主机权限的 Vault 角色:
$ vault write rabbitmq/roles/my-role \
vhosts='{"/":{"write": ".*", "read": ".*"}}'
Success! Data written to: rabbitmq/roles/my-role
通过写入 roles/my-role
路径,我们定义了 my-role
角色。该角色将通过评估给定的 vhosts
、vhost_topics
和 tags
语句来创建。默认情况下,不会为角色分配标签、虚拟主机或主题权限。如果未定义主题权限并使用默认授权后端(authorisation backend),则始终可以发布到主题交换或从主题消费。可以阅读有关 RabbitMQ 管理标签和 RabbitMQ 主题授权的更多信息。
使用方法
配置了机密引擎后,一个拥有搭配了合适权限的 Vault 令牌的用户或是机器可以生成 RabbitMQ 凭据。
通过读取搭配角色名的 /creds
端点来创建一个新的凭据:
$ vault read rabbitmq/creds/my-role
Key Value
--- -----
lease_id rabbitmq/creds/my-role/I39Hu8XXOombof4wiK5bKMn9
lease_duration 768h
lease_renewable true
password 3yNDBikgQvrkx2VA2zhq5IdSM7IWk1RyMYJr
username root-39669250-3894-8032-c420-3d58483ebfc4
通过使用 ACL,可以限制使用 rabbitmq 机密引擎,以便受信任的操作员可以管理角色定义,并且用户和应用程序都被限制只能使用他们被允许读取的凭据。