Как настроить пользователей в Redis с ACL
Redis — это высокопроизводительная in-memory база данных, широко используемая для кэширования, хранения сессий, реализации очередей и других задач. С ростом масштабов приложений и увеличением числа сервисов, взаимодействующих с Redis, важность безопасного управления доступом становится критической. До появления ACL (Access Control List) в Redis 6, система аутентификации была ограничена одним глобальным паролем, что не соответствовало современным требованиям безопасности. Введение ACL позволило гибко управлять правами пользователей, определяя, кто и какие команды может выполнять, а также к каким ключам получать доступ.
Что такое ACL в Redis и зачем он нужен
ACL (Access Control List) — это механизм управления доступом, введённый в Redis начиная с версии 6. Он позволяет создавать нескольких пользователей с индивидуальными правами, задавать им пароли, разрешать или блокировать выполнение определённых команд и ограничивать доступ к ключам по шаблонам. До этого Redis поддерживал только один общий пароль, задаваемый через директиву `requirepass`, что делало систему уязвимой при распределённой архитектуре.
С появлением ACL стало возможным реализовать принцип минимальных привилегий: каждый сервис или пользователь получает только те права, которые ему действительно нужны. Например, веб-приложение может иметь доступ только к командам `GET` и `SET` и только к ключам, начинающимся с префикса `session:*`. Это снижает риски в случае компрометации учетной записи.
Использование ACL особенно важно в микросервисных архитектурах, где десятки сервисов обращаются к одному экземпляру Redis. Без контроля доступа любой из них может случайно или злонамеренно удалить данные, изменить их или получить доступ к информации другого сервиса. ACL помогает избежать таких ситуаций.
Стандартные пользователи: default и других
При первом запуске Redis автоматически создаётся один пользователь — `default`. Этот пользователь активен по умолчанию и имеет полный доступ ко всем командам и ключам. Если вы не настраивали ACL, все подключения используют именно этого пользователя. Именно поэтому важно переопределить его поведение или отключить глобальный пароль.
Пользователь `default` можно модифицировать: добавить пароль, ограничить команды или отключить совсем. Например, команда `ACL SETUSER default off` полностью деактивирует стандартного пользователя, после чего подключиться можно будет только под явно созданными учётными записями. Это повышает безопасность, но требует предварительной настройки альтернативных пользователей.
Также Redis позволяет создавать пользователей с префиксами, например `admin:`, `monitor:`, `cache:`, что упрощает логическую группировку. Хотя сам Redis не поддерживает группы пользователей, вы можете эмулировать их поведение через скрипты или внешние системы управления.
- Подключитесь к Redis через CLI:
redis-cli. - Проверьте текущих пользователей:
ACL LIST. - Изучите информацию о пользователе default:
ACL WHOAMIиACL USERS. - Отключите глобальный пароль, если используется:
CONFIG SET requirepass "". - Настройте нового пользователя с ограниченными правами перед отключением default.
Как создать и настроить пользователей с нуля
Создание пользователей в Redis осуществляется двумя способами: через командную строку с помощью команды `ACL SETUSER` или через конфигурационный файл `redis.conf`. Оба метода равнозначны, но подход с конфигурацией обеспечивает постоянство настроек после перезапуска сервера.
Команда `ACL SETUSER` требует указания имени пользователя и одного или нескольких флагов. Основные флаги:
- `on` / `off` — включает или отключает пользователя;
- `nopass` — разрешает подключение без пароля (небезопасно);
- `>password` — добавляет пароль (хранится в хеше);
- `+command` — разрешает выполнение команды;
- `-command` — запрещает выполнение команды;
- `~pattern` — разрешает доступ к ключам по шаблону (например, `~cache:*`);
- `&category` — разрешает все команды из категории (например, `&@read`).
Пример создания пользователя с ограниченными правами:
ACL SETUSER reader >mypass +@read ~data:* ~config:*
Этот пользователь может выполнять только команды чтения (`GET`, `HGETALL` и т.д.) и только над ключами, начинающимися с `data:` или `config:`.
Для проверки прав используйте:
ACL CHECKPASS username password
или
ACL WHOAMI
— чтобы узнать, под каким пользователем вы вошли.
Управление правами: команды и ключи
Один из самых мощных аспектов ACL — возможность точно настраивать, какие команды может выполнять пользователь. Redis поддерживает категории команд, такие как `@read`, `@write`, `@admin`, `@dangerous`, `@slow`. Это упрощает настройку политик без необходимости перечислять каждую команду вручную.
Категория |
Команды |
Назначение |
|---|---|---|
@read |
GET, HGET, LRANGE, SMEMBERS |
Чтение данных |
@write |
SET, HSET, LPUSH, SADD |
Запись и модификация |
@admin |
ACL, CONFIG, SAVE, SHUTDOWN |
Администрирование |
@dangerous |
FLUSHDB, FLUSHALL, DEBUG |
Опасные операции |
@slow |
SLOWLOG, LATENCY |
Мониторинг производительности |
Для максимальной безопасности рекомендуется начинать с пустого набора прав (`resetkeys`, `resetpass`) и затем добавлять только необходимое. Например:
ACL SETUSER monitor on >monpass +@slow +INFO ~* &@slow
— такой пользователь может только просматривать медленные запросы и получать информацию о сервере.
Ограничение по ключам работает через шаблоны. Поддерживаются символы `*` (любое количество символов) и `?` (один символ). Например:
- `~app:*` — доступ к ключам вроде `app:session:123`;
- `~temp:?` — только к ключам вида `temp:A`, `temp:B`;
- `resetkeys` — снимает все разрешения на ключи.
Постоянная настройка через redis.conf
Настройки, заданные через `ACL SETUSER` в CLI, теряются после перезапуска Redis, если не сохранены в конфигурации. Для постоянного хранения используйте директиву `user` в файле `redis.conf`. Формат строки совпадает с синтаксисом команды `ACL SETUSER`.
Пример записи в `redis.conf`:
user admin on >strongpass +@all ~* &@all
user cache on >cachepass +@read +@write ~cache:*
user default off
После изменения файла необходимо перезагрузить Redis или применить настройки через `ACL LOAD`, если сервер уже запущен. Команда `ACL SAVE` позволяет экспортировать текущие правила в конфигурационный файл — удобно при тестировании в проде.
Если вы используете Docker или Kubernetes, монтируйте изменённый `redis.conf` как volume. Также можно использовать init-скрипты для автоматической загрузки ACL при старте контейнера.
Рекомендации по безопасности и управлению ACL
Настройка ACL — это не разовое действие, а часть стратегии безопасности. Регулярно проводите аудит пользователей и их прав. Используйте команду `ACL LIST` для получения полного списка, а `ACL CAT` — для просмотра всех доступных категорий команд.
Не используйте пароли в открытом виде в конфигах. Вместо этого применяйте переменные окружения или секрет-менеджеры (Hashicorp Vault, AWS Secrets Manager). Redis поддерживает загрузку паролей извне через скрипты инициализации.
Отключайте ненужных пользователей и периодически меняйте пароли. Внедрите политику ротации учётных данных, особенно для администраторов. Для критических систем можно реализовать двухэтапную аутентификацию на уровне приложения, хотя сам Redis её не поддерживает.
Логируйте попытки входа и вызовы команд. Redis может отправлять логи в syslog или файл, где можно отслеживать подозрительную активность: множественные отказы авторизации, использование опасных команд (`FLUSHALL`, `DEBUG`).
Экспертное мнение
Правильная настройка ACL — это баланс между безопасностью и удобством. Полный запрет всех команд слишком жёсткий, а полный доступ — опасный. Начинайте с анализа реальных потребностей каждого сервиса. Какие команды он реально использует? К каким ключам обращается?
Автоматизация — ключ к стабильности. Настройте CI/CD-пайплайн, который разворачивает Redis с актуальной конфигурацией ACL. Используйте инструменты вроде Ansible, Terraform или Puppet для управления политиками в разных средах.
Тестирование ACL должно включать проверку сценариев отказа: что произойдёт, если пользователь попробует выполнить запрещённую команду? Получит ли он понятную ошибку? Не сломается ли приложение?
Мониторинг — неотъемлемая часть. Настройте алерты на подозрительные действия: например, если пользователь с правами только на чтение внезапно пытается выполнить `DEL` или `FLUSHDB`.
Вопросы и ответы
Заключение
Настройка пользователей в Redis с помощью ACL — это обязательный шаг для любого production-сервера. Она позволяет перейти от модели «всё или ничего» к гибкой системе контроля доступа, соответствующей принципам информационной безопасности. Создание пользователей с минимальными привилегиями, ограничение по командам и ключам, а также постоянное управление политиками через конфигурацию обеспечивают высокий уровень защиты.
- Всегда используйте ACL вместо глобального пароля в Redis 6+.
- Создавайте пользователей с минимальными необходимыми правами.
- Ограничивайте доступ к ключам через шаблоны (например, ~cache:*).
- Храните настройки ACL в redis.conf для сохранения после перезапуска.
- Регулярно аудируйте пользователей и ведите логи подключений.
⚠️ Дисклеймер — нажмите, чтобы развернуть
Материалы, опубликованные в разделе «Блог» на сайте RU DESIGN SHOP (rudesignshop.ru), носят исключительно информационный и ознакомительный характер и не являются руководством к действию, финансовой рекомендацией, медицинской услугой, ветеринарным назначением либо рекламой товаров и услуг, включая азартные игры. Публикации не содержат призывов к участию в азартных играх и не направлены на продвижение соответствующих операторов.
Безопасность применения товаров и веществ: при использовании строительных материалов, бытовой химии, пестицидов и агрохимикатов необходимо строго следовать инструкциям производителя и действующему законодательству Российской Федерации, включая Федеральный закон РФ от 19.07.1997 № 109-ФЗ «О безопасном обращении с пестицидами и агрохимикатами».
Упоминание товарных знаков, брендов и организаций носит исключительно информационный характер и не означает наличие партнёрских отношений или одобрения со стороны правообладателей.
Материалы, содержащие сведения о медицинских, ветеринарных или косметических средствах, представлены в справочных целях и не являются медицинской консультацией или назначением. Перед применением рекомендуется обратиться к врачу, ветеринарному специалисту или иному сертифицированному профессионалу.
Возрастные ограничения: материалы, содержащие сведения о продукции категории 18+, включая алкоголь или азартные игры, предназначены исключительно для совершеннолетней аудитории и публикуются в информационных целях.
Правовая ответственность: решения, принятые на основе опубликованной информации, пользователь принимает самостоятельно и на свой риск; редакция и авторы несут ответственность в пределах, установленных законодательством Российской Федерации.
Редакция не допускает публикаций, содержащих пропаганду экстремизма, терроризма, наркотических средств или суицида; подобные материалы подлежат немедленному удалению.
Упоминание организаций с ограниченным статусом: компания Meta Platforms Inc. (социальные сети Facebook и Instagram) признана экстремистской организацией решением суда РФ, её деятельность запрещена на территории Российской Федерации; любые упоминания приводятся исключительно в информационных целях.
Авторские права и источники: информация собирается из открытых источников; её актуальность указывается на дату публикации и может изменяться.
Изображения и иллюстрации используются на условиях, разрешённых правообладателями. При возникновении претензий редакция готова оперативно рассмотреть обращение и внести необходимые изменения.
Персональные данные и cookies: сайт использует cookies и обрабатывает персональные данные пользователей в соответствии с Федеральным законом № 152-ФЗ «О персональных данных» и Политикой конфиденциальности RU DESIGN SHOP.
Мнения авторов могут не совпадать с позицией государственных органов или коммерческих организаций, упомянутых в материалах.