GrantForge

    Базы данных / Ключ-значение

    Redis

    Установка и настройка сервисного плагина Redis для Redis и Valkey, подключение к серверу, его репликам или кластеру, вход под пользователем ACL, при желании через TLS, поиск ключей, каналов и узлов и управление тем, кто какие ключи может читать и записывать, какими каналами пользоваться и какие узлы отслеживать.

    Плагин 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 в собственном загрузчике классов.

    Добавление сервиса данных

    1. Откройте Права на данные → Сервисы данных, добавьте сервис и выберите Redis (redis).
    2. Укажите один или несколько узлов. Остальные узлы кластера и реплики первичного узла находятся по ним.
    3. Укажите пользователя для поиска, проверьте подключение и сохраните сервис. Проверка выполняет вход и описывает развёртывание: 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.

    Связанные руководства

    Редактировать эту страницу на GitHub