Как настроить пользователей в Redis с ACL

Как настроить пользователей в Redis с ACL

Redis — это высокопроизводительная in-memory база данных, широко используемая для кэширования, хранения сессий, реализации очередей и других задач. С ростом масштабов приложений и увеличением числа сервисов, взаимодействующих с Redis, важность безопасного управления доступом становится критической. До появления ACL (Access Control List) в Redis 6, система аутентификации была ограничена одним глобальным паролем, что не соответствовало современным требованиям безопасности. Введение ACL позволило гибко управлять правами пользователей, определяя, кто и какие команды может выполнять, а также к каким ключам получать доступ.

Настройка пользователей в Redis с помощью ACL позволяет детально контролировать права доступа: создавать пользователей с уникальными паролями, разрешать или запрещать выполнение команд, ограничивать доступ к определённым ключам. Главное — использовать защищённый режим (включить requirepass), настроить пользователей через конфигурационный файл или командную строку и регулярно проверять политики безопасности.

Что такое ACL в Redis и зачем он нужен

ACL (Access Control List) — это механизм управления доступом, введённый в Redis начиная с версии 6. Он позволяет создавать нескольких пользователей с индивидуальными правами, задавать им пароли, разрешать или блокировать выполнение определённых команд и ограничивать доступ к ключам по шаблонам. До этого Redis поддерживал только один общий пароль, задаваемый через директиву `requirepass`, что делало систему уязвимой при распределённой архитектуре.
С появлением ACL стало возможным реализовать принцип минимальных привилегий: каждый сервис или пользователь получает только те права, которые ему действительно нужны. Например, веб-приложение может иметь доступ только к командам `GET` и `SET` и только к ключам, начинающимся с префикса `session:*`. Это снижает риски в случае компрометации учетной записи.
Использование ACL особенно важно в микросервисных архитектурах, где десятки сервисов обращаются к одному экземпляру Redis. Без контроля доступа любой из них может случайно или злонамеренно удалить данные, изменить их или получить доступ к информации другого сервиса. ACL помогает избежать таких ситуаций.

Полезно знать: ACL работает как в автономном режиме Redis, так и в кластерах. Однако в кластерной конфигурации политики ACL должны быть синхронизированы между всеми узлами.

Стандартные пользователи: default и других

При первом запуске Redis автоматически создаётся один пользователь — `default`. Этот пользователь активен по умолчанию и имеет полный доступ ко всем командам и ключам. Если вы не настраивали ACL, все подключения используют именно этого пользователя. Именно поэтому важно переопределить его поведение или отключить глобальный пароль.
Пользователь `default` можно модифицировать: добавить пароль, ограничить команды или отключить совсем. Например, команда `ACL SETUSER default off` полностью деактивирует стандартного пользователя, после чего подключиться можно будет только под явно созданными учётными записями. Это повышает безопасность, но требует предварительной настройки альтернативных пользователей.
Также Redis позволяет создавать пользователей с префиксами, например `admin:`, `monitor:`, `cache:`, что упрощает логическую группировку. Хотя сам Redis не поддерживает группы пользователей, вы можете эмулировать их поведение через скрипты или внешние системы управления.

  1. Подключитесь к Redis через CLI: redis-cli.
  2. Проверьте текущих пользователей: ACL LIST.
  3. Изучите информацию о пользователе default: ACL WHOAMI и ACL USERS.
  4. Отключите глобальный пароль, если используется: CONFIG SET requirepass "".
  5. Настройте нового пользователя с ограниченными правами перед отключением default.
«Начинайте с отключения пользователя default сразу после создания первого защищённого аккаунта. Это простое действие закрывает множество потенциальных дыр в безопасности.» — Алексей К., DevOps-архитектор

Как создать и настроить пользователей с нуля

Создание пользователей в 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

— чтобы узнать, под каким пользователем вы вошли.

Полезно знать: Пароли в Redis хранятся в виде SHA-256 хешей. При использовании `>password` Redis автоматически хеширует значение. Не передавайте пароли в открытом виде в логах или скриптах.

Управление правами: команды и ключи

Один из самых мощных аспектов 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 при старте контейнера.

«Храните конфигурацию Redis в системе контроля версий. Это позволяет быстро восстановить политики доступа и отслеживать изменения в правах пользователей.» — Марина Т., SRE-инженер

Рекомендации по безопасности и управлению ACL

Настройка ACL — это не разовое действие, а часть стратегии безопасности. Регулярно проводите аудит пользователей и их прав. Используйте команду `ACL LIST` для получения полного списка, а `ACL CAT` — для просмотра всех доступных категорий команд.
Не используйте пароли в открытом виде в конфигах. Вместо этого применяйте переменные окружения или секрет-менеджеры (Hashicorp Vault, AWS Secrets Manager). Redis поддерживает загрузку паролей извне через скрипты инициализации.
Отключайте ненужных пользователей и периодически меняйте пароли. Внедрите политику ротации учётных данных, особенно для администраторов. Для критических систем можно реализовать двухэтапную аутентификацию на уровне приложения, хотя сам Redis её не поддерживает.
Логируйте попытки входа и вызовы команд. Redis может отправлять логи в syslog или файл, где можно отслеживать подозрительную активность: множественные отказы авторизации, использование опасных команд (`FLUSHALL`, `DEBUG`).

Полезно знать: Включите TLS для шифрования соединений с Redis. Это особенно важно при использовании ACL, чтобы пароли и данные не передавались в открытом виде по сети.

Экспертное мнение

Правильная настройка ACL — это баланс между безопасностью и удобством. Полный запрет всех команд слишком жёсткий, а полный доступ — опасный. Начинайте с анализа реальных потребностей каждого сервиса. Какие команды он реально использует? К каким ключам обращается?
Автоматизация — ключ к стабильности. Настройте CI/CD-пайплайн, который разворачивает Redis с актуальной конфигурацией ACL. Используйте инструменты вроде Ansible, Terraform или Puppet для управления политиками в разных средах.
Тестирование ACL должно включать проверку сценариев отказа: что произойдёт, если пользователь попробует выполнить запрещённую команду? Получит ли он понятную ошибку? Не сломается ли приложение?
Мониторинг — неотъемлемая часть. Настройте алерты на подозрительные действия: например, если пользователь с правами только на чтение внезапно пытается выполнить `DEL` или `FLUSHDB`.

Вопросы и ответы

Можно ли использовать несколько паролей для одного пользователя?
Да, Redis поддерживает несколько паролей на одного пользователя. Добавьте каждый с помощью `>password`. Пользователь сможет войти с любым из них. Удалить конкретный пароль можно через `<password`.
Как проверить, какие команды может выполнять пользователь?
Используйте `ACL GETUSER username`, чтобы увидеть список разрешённых и запрещённых команд, шаблоны ключей и статус. Также можно протестировать подключение с учётными данными.
Что делать, если я заблокировал себя?
Если вы отключили пользователя `default` и потеряли доступ, подключитесь через loopback-интерфейс (если разрешено) и используйте `ACL LOAD` для восстановления конфигурации. Либо временно отредактируйте `redis.conf` и перезапустите сервер.
Поддерживает ли Redis роли или группы пользователей?
Нет, встроенная поддержка ролей отсутствует. Однако вы можете эмулировать их через скрипты, централизованное управление конфигурацией или внешние системы авторизации.
Нужно ли отключать requirepass при использовании ACL?
Да, это рекомендуется. Глобальный пароль и ACL работают независимо, но их одновременное использование усложняет управление. Лучше полностью перейти на модель ACL с именованными пользователями.

Заключение

Настройка пользователей в Redis с помощью ACL — это обязательный шаг для любого production-сервера. Она позволяет перейти от модели «всё или ничего» к гибкой системе контроля доступа, соответствующей принципам информационной безопасности. Создание пользователей с минимальными привилегиями, ограничение по командам и ключам, а также постоянное управление политиками через конфигурацию обеспечивают высокий уровень защиты.

Использование ACL в Redis кардинально повышает безопасность вашей инфраструктуры. Не оставляйте сервер с открытым доступом или одним паролем — это устаревшая и рискованная практика. Начните с отключения пользователя default, создайте учётные записи для каждого сервиса и регулярно проводите аудит прав.
  • Всегда используйте 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.

Мнения авторов могут не совпадать с позицией государственных органов или коммерческих организаций, упомянутых в материалах.