Плагин Redis ищет ключи, каналы и узлы развёртываний Redis и Valkey и управляет политиками доступа в терминах самого Redis: чтение и запись ключей по шаблону, подписка на каналы и публикация в них, а также мониторинг каждого узла. Идентификатор плагина и тип сервиса — redis. Сервисный плагин работает на сервере GrantForge; агент Redis, работающий рядом с развёртыванием, применяет политики собственным ACL Redis на каждом узле.
Интеграционные тесты Testcontainers в репозитории охватывают первичный узел с репликой Redis 7.2, 7.4, 8.2 и 8.10 и Valkey 8.1 и 9.1, а также кластер Redis 8.10. Это не сертифицирует все остальные версии.
Установка
Дистрибутив включает плагин в plugins/redis. Убедитесь, что redis включён в Управление платформой → Плагины; после обновления каталога плагинов выполните повторное сканирование. Плагин общается с Redis через Jedis в собственном загрузчике классов.
Добавление сервиса данных
- Откройте Права на данные → Сервисы данных, добавьте сервис и выберите Redis (
redis). - Укажите один или несколько узлов. Остальные узлы кластера и реплики первичного узла находятся по ним.
- Укажите пользователя для поиска, проверьте подключение и сохраните сервис. Проверка выполняет вход и описывает развёртывание: Redis или Valkey и версию, один ли это сервер, первичный узел с репликами или кластер, и кто вошёл.
Пользователь для поиска позволяет GrantForge находить ресурсы и не является пользователем, который читает или записывает. Успешная проверка подключения не означает, что доступ уже следует политикам.
| Параметр | Назначение |
|---|---|
redis.nodes |
Обязательно: узлы в виде host:port, например redis1.example.com:6379, через запятую, перебираются по порядку; без порта — 6379 |
username |
Пользователь для поиска, пользователь ACL; пустое значение — вход как пользователь по умолчанию |
password |
Его пароль, хранится в зашифрованном виде |
tls.mode |
disable (по умолчанию), verify-ca — проверять сертификаты серверов, verify-full — также их имена |
tls.ca.file |
TLS: путь на сервере GrantForge к PEM-сертификатам ЦС, по которым проверяются серверы. Пустое значение — сертификаты JVM |
tls.certificate.file |
TLS, для серверов, требующих клиентские сертификаты: путь на сервере GrantForge к клиентскому PEM-сертификату, который может содержать и ключ |
tls.key.file |
Путь на сервере GrantForge к PEM-ключу сертификата, если он в отдельном файле |
tls.key.password |
Пароль зашифрованного ключа, хранится в зашифрованном виде |
timeout |
Сколько могут занимать подключение и одна команда, по умолчанию 10000, в диапазоне 1..600000 миллисекунд |
Отклонённый вход, пользователь для поиска без нужного права и недоступные узлы сообщаются как таковые.
Что видит пользователь для поиска
Ключи находятся командой SCAN на каждом первичном узле, не более нескольких проходов, чтобы поиск оставался быстрым при любом числе ключей; каналы — те, у которых сейчас есть подписчики. SCAN перечисляет все ключи независимо от шаблонов ключей пользователя, поэтому пользователю для поиска не нужно право читать значения:
ACL SETUSER lookup on >… -@all +@connection +scan +pubsub|channels +info +cluster|nodes +acl|whoami ~* &*Ресурсы и типы доступа
| Уровень | Сопоставление | Типы доступа |
|---|---|---|
key |
Подстановочные знаки, с учётом регистра. Ключ или шаблон ключей | read, write |
channel |
Подстановочные знаки, с учётом регистра. Канал или шаблон каналов | subscribe, publish |
node |
Подстановочные знаки, без учёта регистра. Адрес узла в виде host:port |
monitor |
| Тип доступа | Что разрешает Redis |
|---|---|
read |
Команды @read над ключом, %R~ на нём |
write |
Команды @write над ключом, %W~ на нём, включая удаление |
subscribe |
SUBSCRIBE, PSUBSCRIBE, SSUBSCRIBE на канале, & |
publish |
PUBLISH, SPUBLISH на канале, & |
monitor |
INFO, DBSIZE, LATENCY LATEST, LATENCY HISTORY, MEMORY STATS |
В значениях политик * соответствует любому тексту, а ? — одному символу, как в собственных шаблонах Redis. Redis выдаёт ключи и каналы по шаблону и не может перечислить их агенту, поэтому значение политики выдаётся как отдельный шаблон там, где политики решают для пользователя одинаково по всему шаблону. Шаблон, внутри которого политики решают иначе, например sales:*, когда политика запрещает sales:card:*, не выдаётся, и об этом сообщается; вместо него укажите ключи или шаблоны, которые политики решают одинаково. Значения с квадратными скобками, обратными косыми чертами, круглыми скобками или пробелами никогда не выдаются.
Команды, которые Redis считает опасными, например FLUSHALL и KEYS, никогда не выдаются, а SCAN и RANDOMKEY, перечисляющие ключи независимо от шаблонов, — только пользователю, который может читать все ключи. Шаблоны называют ключи во всех базах узла, так как в ACL Redis нет баз.
Redis ничего не фильтрует внутри значения и ничего не маскирует, поэтому этот тип сервиса не предлагает ни того, ни другого.
Пример политик
Создайте в одном сервисе данных такие включённые политики:
| Ресурс | Правило |
|---|---|
key=sales:* |
Разрешить read группе analysts |
key=sales:card:* |
Разрешить read и write пользователю billing |
key=cart:* |
Разрешить read и write пользователю shop |
channel=orders.* |
Разрешить subscribe группе analysts; разрешить publish пользователю shop |
node=* |
Разрешить monitor пользователю dashboards |
Когда агент применит снимок, участники analysts будут читать все ключи sales: и следить за каналами заказов; billing будет читать и записывать ключи карт — шаблон, внутри которого никакая другая политика не решает иначе; shop будет вести корзины и публиковать события заказов; а dashboards будет видеть состояние каждого узла и никаких данных.
Применение политик
Сервисный плагин управляет политиками и ищет ресурсы. Для их применения нужен один агент Redis на развёртывание; развёртывание и проверки описаны в разделе Агент Redis.
