Администрирование пользователей RabbitMQ и прав доступа: Руководство по командной строке
Управление пользователями и определение прав доступа является фундаментальным аспектом обеспечения безопасности любой инфраструктуры брокера сообщений. RabbitMQ, мощный брокер сообщений, предоставляет надежные механизмы для аутентификации и авторизации пользователей, которыми управляют преимущественно с помощью утилиты командной строки rabbitmqctl. Это руководство посвящено исключительно использованию rabbitmqctl для освоения администрирования пользователей, охватывая все: от создания и назначения ролей до детальной настройки разрешений в виртуальных хостах.
Правильно настроенные разрешения гарантируют, что приложения и администраторы взаимодействуют с брокером только там, где это необходимо, минимизируя риски безопасности и операционную путаницу. Используя эти инструменты командной строки, вы можете эффективно создавать сценарии и автоматизировать сложные настройки безопасности.
Предварительные требования
Прежде чем продолжить, убедитесь, что у вас есть следующее:
- Установленный сервер RabbitMQ: Брокер должен быть запущен.
- Доступ к
rabbitmqctl: У вас должны быть необходимые права (обычно права администратора) для выполнения команд против запущенного экземпляра RabbitMQ. Команды обычно выполняются с машины, на которой размещен сервер RabbitMQ.
Управление пользователями с помощью rabbitmqctl
Инструмент rabbitmqctl использует семейство команд user_* для всех операций, связанных с пользователями. Важно понимать, что пользователи RabbitMQ отличаются от пользователей операционной системы.
1. Просмотр существующих пользователей
Чтобы увидеть, кто в настоящее время имеет доступ к брокеру, используйте команду list_users:
rabbitmqctl list_users
Пример вывода:
Listing users ...
user: guest tags: [administrator]
user: app_prod tags: [policymaker]
2. Создание нового пользователя
При настройке новой учетной записи службы или администратора вы должны создать пользователя и назначить ему начальный пароль.
Чтобы создать пользователя с именем api_user и паролем securepass:
rabbitmqctl add_user api_user securepass
3. Изменение тегов пользователей (ролей)
Теги пользователей определяют предварительно заданные роли, которые предоставляют определенные административные возможности. Наиболее распространенными тегами являются administrator, policymaker и management.
administrator: Может изменять пользователей, разрешения, vhost'ы и настраивать параметры кластера.policymaker: Может устанавливать политики (например, для высокой доступности или TTL сообщений).management: Может использовать интерфейс плагина управления (если установлен).
Просмотр текущих тегов
Используйте list_user_tags, чтобы увидеть текущие роли:
rabbitmqctl list_user_tags api_user
Назначение или перезапись тегов
Чтобы назначить тег management пользователю api_user:
rabbitmqctl set_user_tags api_user management
Чтобы добавить тег policymaker в дополнение к существующим тегам, используйте команду add_tag:
rabbitmqctl set_user_tags api_user administrator policymaker
Удаление тегов
Чтобы удалить определенный тег:
rabbitmqctl clear_user_tags api_user policymaker
4. Смена пароля пользователя
Если необходимо сменить учетные данные, используйте команду change_password:
rabbitmqctl change_password api_user newsecurepass123
5. Удаление пользователя
Чтобы полностью удалить пользователя и отозвать весь связанный доступ:
rabbitmqctl delete_user api_user
Внимание: В производственных средах из соображений безопасности обычно рекомендуется удалять пользователя
guest, хотя для этого сначала необходимо создать нового административного пользователя.
Управление разрешениями виртуального хоста
Разрешения в RabbitMQ определяются отдельно для каждого виртуального хоста (vhost). Vhost действует как пространство имен для очередей, обменников и привязок. По умолчанию в RabbitMQ есть корневой vhost с именем /.
1. Просмотр Vhost'ов
Сначала определите доступные vhost'ы:
rabbitmqctl list_vhosts
2. Установка разрешений для пользователя в VHost
Команда set_permissions является наиболее важной для безопасности приложений. Она предоставляет пользователю права на конфигурирование, чтение или запись ресурсов в пределах определенного vhost.
Синтаксис: set_permissions <vhost> <user> <conf> <read> <write>
Значения разрешений являются регулярными выражениями (.* означает все ресурсы).
Пример: Предоставление полного доступа к определенному VHost
Если мы хотим, чтобы app_prod имел полный доступ CRUD (Конфигурация, Чтение, Запись) только к /prod_vhost:
rabbitmqctl set_permissions -p /prod_vhost app_prod "^.*" "^.*" "^.*"
| Разрешение | Значение (Regex) | Описание |
|---|---|---|
Конфигурация (conf) |
.* |
Может создавать/удалять обменники, очереди, привязки и устанавливать параметры vhost. |
Чтение (read) |
.* |
Может потреблять сообщения и получать статус очереди/обменника. |
Запись (write) |
.* |
Может публиковать сообщения и создавать привязки. |
Пример: Ограничение пользователя только публикацией
Общий шаблон для "огневых" (firehose) издателей — ограничить их только записью:
# Пользователь 'publisher' может записывать, но не может конфигурировать или читать сообщения в /analytics_vhost
rabbitmqctl set_permissions -p /analytics_vhost publisher "^$" "^$" "^.*$"
3. Сброс разрешений
Чтобы полностью удалить все разрешения, которые пользователь имеет в определенном vhost, используйте clear_permissions:
rabbitmqctl clear_permissions -p /prod_vhost app_prod
4. Просмотр разрешений пользователя
Чтобы проверить разрешения, предоставленные конкретному пользователю в vhost:
rabbitmqctl list_permissions -p /prod_vhost app_prod
Рекомендации по администрированию пользователей
- Принцип наименьших привилегий (PoLP): Всегда предоставляйте минимально необходимые разрешения для функционирования приложения или пользователя. Избегайте использования тега
administrator, если это абсолютно не требуется. - Выделенные Vhost'ы: Используйте разные виртуальные хосты для разных сред (например,
dev,staging,prod) и строго контролируйте доступ между ними. - Избегайте пользователя Guest: В целях безопасности по умолчанию пользователь
guestдолжен быть отключен или ограничен (по умолчанию он имеет доступ только изlocalhost). - Скриптинг: Поскольку все эти команды идемпотентны и основаны на командной строке, создавайте сценарии для настройки и удаления пользователей для согласованного развертывания.
Освоив эти команды rabbitmqctl, вы получите детальный, поддающийся скриптованию контроль над тем, кто может получить доступ к ресурсам вашего брокера сообщений, что приведет к более безопасному и управляемому развертыванию RabbitMQ.