Практическое задание

Эта задача — шаг 7 курса «Redis в проде»

ACL-пользователь только для кэша

средне~15 мин

Приложению нужен свой логин в Redis с минимальными правами. Создай ACL-пользователя:

  • имя app, пароль app-secret, пользователь включён;
  • доступ только к ключам по шаблону cache:*;
  • разрешены только команды GET, SET, DEL и PING — FLUSHALL, CONFIG, KEYS и всё остальное запрещено.

Пользователь должен пережить перезапуск Redis: храни ACL в отдельном файле /etc/redis/users.acl, подключённом в /etc/redis/redis.conf директивой aclfile. Пользователя default не трогай.

Что потренируешь:
  • redis
  • ACL
  • ACL SETUSER
  • aclfile
  • ACL SAVE
  • принцип минимальных привилегий

Разбор темы

Начиная с Redis 6 доступ разграничивается через ACL: у каждого пользователя есть пароль, набор разрешённых команд (+get, -@all, +@read…) и шаблоны ключей (~cache:*), к которым он может обращаться. Приложение, которому нужен только кэш, не должно уметь FLUSHALL или CONFIG SET — так утечка его пароля или ошибка в коде не уничтожит все данные. Пользователи, созданные ACL SETUSER, живут в памяти: чтобы они пережили перезапуск, их хранят в отдельном файле (aclfile) и сохраняют туда ACL SAVE, а ACL LOAD перечитывает файл без рестарта.

Что проверяется

  1. app входит по паролю и пишет/читает cache:x
  2. app не видит ключи вне cache:*
  3. app не может FLUSHALL, CONFIG и KEYS
  4. app не может выполнять команды кроме GET/SET/DEL/PING
  5. ACL хранятся в /etc/redis/users.acl
  6. пользователь app переживает перезапуск (проверка перезапускает Redis)

Как это выглядит