Механизм секретов RabbitMQ генерирует учётные данные пользователей RabbitMQ динамически на основе настроенных ролей. Для каждого запроса Stronghold создаёт в RabbitMQ отдельного пользователя с заданными правами на виртуальные хосты (vhosts) и тегами, а по истечении аренды удаляет его.
Stronghold управляет пользователями через RabbitMQ management HTTP API, поэтому в RabbitMQ должен быть включён плагин rabbitmq_management.
Механизм секретов RabbitMQ доступен во всех редакциях Stronghold.
Возможности
| Возможность | Поддержка |
|---|---|
| Динамические учётные данные | Да |
Права на виртуальные хосты (vhosts) | Да |
Права на обмены тем (vhost_topics) | Да |
Теги пользователя (tags) | Да |
Кастомизация имени пользователя (username_template) | Да |
Политика паролей (password_policy) | Да |
Настройка
Шаги настройки обычно выполняет администратор Stronghold или средство управления конфигурацией.
Включите механизм секретов RabbitMQ:
d8 stronghold secrets enable rabbitmqПо умолчанию механизм подключается по пути
rabbitmq/. Чтобы подключить его по другому пути, используйте аргумент-path.Настройте подключение к RabbitMQ management HTTP API. Укажите пользователя с правами администратора RabbitMQ (тег
administrator): от его имени Stronghold будет создавать и удалять пользователей.d8 stronghold write rabbitmq/config/connection connection_uri="https://rabbitmq.example.com:15672" username="stronghold-admin" password="<ADMIN_PASSWORD>"Где
<ADMIN_PASSWORD>— пароль пользователя RabbitMQstronghold-admin.Параметры эндпоинта
config/connection:Параметр Описание connection_uriURI RabbitMQ management HTTP API. usernameИмя пользователя-администратора RabbitMQ. passwordПароль пользователя-администратора RabbitMQ. verify_connectionПроверять ли connection_uriреальным подключением к management API. По умолчаниюtrue.username_templateШаблон, по которому генерируются имена динамических пользователей. password_policyИмя политики паролей для генерации паролей динамических пользователей. Создайте в RabbitMQ отдельного пользователя для Stronghold и не используйте его для других целей.
Настройте параметры аренды выдаваемых учётных данных:
d8 stronghold write rabbitmq/config/lease ttl=1800 max_ttl=3600ttl— срок, в течение которого учётные данные действуют без продления, в секундах;max_ttl— максимальный срок, после которого учётные данные не продлеваются, в секундах.
Значение
0(по умолчанию) означает использование системных значений TTL.Текущие параметры аренды можно прочитать командой:
d8 stronghold read rabbitmq/config/leaseСоздайте роль, которая описывает права создаваемых пользователей:
d8 stronghold write rabbitmq/roles/my-role vhosts='{"/":{"configure":".*","write":".*","read":".*"}}' tags="management"Параметры роли:
Параметр Описание vhostsJSON-карта виртуальных хостов и прав configure,writeиread(регулярные выражения RabbitMQ) для каждого из них.vhost_topicsВложенная JSON-карта: виртуальный хост → обмен (exchange) → права writeиreadна темы.tagsСписок тегов пользователя RabbitMQ через запятую, например managementилиmonitoring.Пример роли с правами на темы в обмене
amq.topic:d8 stronghold write rabbitmq/roles/topic-role vhosts='{"/":{"configure":"","write":".*","read":".*"}}' vhost_topics='{"/":{"amq.topic":{"write":"^orders\\..*","read":".*"}}}'
Использование
После настройки механизма секретов пользователь или приложение с токеном Stronghold и соответствующей политикой может получать учётные данные.
Запросите учётные данные для роли:
d8 stronghold read rabbitmq/creds/my-roleПример вывода:
Key Value --- ----- lease_id rabbitmq/creds/my-role/I39Hu8XXOombof4wiK5bKMn9 lease_duration 30m lease_renewable true password 3yNDBikgQvrkx2VA2zhq5IdSM7IWk1RyMYJr username root-39669250-3894-8032-c420-3d58483ebfc4Stronghold создаёт в RabbitMQ пользователя с правами из роли и возвращает его имя и пароль вместе с идентификатором аренды.
При необходимости продлите аренду до истечения
lease_duration:d8 stronghold lease renew rabbitmq/creds/my-role/I39Hu8XXOombof4wiK5bKMn9Когда учётные данные больше не нужны, отзовите аренду. Stronghold удалит пользователя в RabbitMQ:
d8 stronghold lease revoke rabbitmq/creds/my-role/I39Hu8XXOombof4wiK5bKMn9
Управление ролями
Список ролей:
d8 stronghold list rabbitmq/rolesЧтение роли:
d8 stronghold read rabbitmq/roles/my-roleУдаление роли:
d8 stronghold delete rabbitmq/roles/my-role
Пример политики
Политика, которая разрешает только получение учётных данных для роли my-role:
path "rabbitmq/creds/my-role" {
capabilities = ["read"]
}Полный список эндпоинтов и параметров приведён в справочнике API механизмов секретов.