GrantForge

    Базы данных / Широкостолбцовые (NoSQL)

    Агент Apache HBase

    Установка сопроцессора в master и region server HBase, чтобы проверять операции, чтение и запись политиками GrantForge, возвращать только столбцы, доступные пользователю для чтения, и скрывать то, чем он не может пользоваться.

    Агент HBase — сопроцессор master, регионов и region server: HBase спрашивает его о каждой операции, каждом чтении и каждой записи, и он отвечает по подписанным политикам сервиса данных hbase. Дистрибутив поставляет его одним совместимым с Java 8 JAR-файлом agents/hbase/grantforge-agent-hbase-<version>.jar с перемещёнными внутрь зависимостями.

    Интеграционные тесты Testcontainers в репозитории запускают JAR внутри HBase 2.5.16, 2.6.7 и 3.0.0. Это не сертифицирует все остальные версии. Плагин сервиса описан на странице Apache HBase.

    Как это работает

    • Каждый запрос проверяется в каждой названной им области. В HBase право охватывает всё в своей области, поэтому агент решает запрос на уровне его пространства имён, таблицы, семейства столбцов и столбца: запрет в любой из них отклоняет запрос, разрешение в любой — даёт доступ.
    • Владельцы пространства имён владеют его таблицами. create и admin на пространстве имён позволяют создать его, создавать в нём таблицы и управлять ими без политики на каждую таблицу.
    • Чтение возвращает то, что можно читать. Если пользователь может читать только часть таблицы, например одно семейство столбцов, get и scan возвращают эти столбцы вместо ошибки; пользователю, которому нельзя читать ничего из таблицы, отказывают.
    • Списки опускают то, чем нельзя пользоваться. Список пространств имён и таблиц показывает только те, которыми пользователь может пользоваться или внутри которых может пользоваться чем-то, а список снимков — только снимки таблиц, которыми он управляет; описание пространства имён, которым он не может пользоваться, отклоняется.
    • Отказы объясняют причину. Клиент получает Permission denied: user bob has no read on table sales:items (no GrantForge policy allows it) или политику, которая запретила доступ.
    • Решения сохраняются, обращения объединяются. Решения текущего снимка хранятся, по умолчанию 100 000 штук в течение 10 секунд, а новый снимок начинает с чистого листа. Одинаковые разрешённые обращения в пределах окна, по умолчанию 10 секунд, передаются одним событием доступа с их числом; отказы передаются по одному и сразу.
    • Серверы не проверяются. Суперпользователи HBase, указанные в hbase.superuser, и собственная работа серверов не проверяются и не попадают в аудит. Таблицы пространства имён hbase, например hbase:meta, может читать любой, как это нужно клиентам.
    Операция Нужный доступ
    Get, scan read на таблице или на возвращаемых столбцах
    Put, increment, append, delete столбцов write на каждом записываемом столбце
    Delete семейства столбцов или строки write на каждом семействе столбцов, так как HBase удаляет строку по семействам
    Check-and-mutate read на сравниваемом столбце или на таблице при фильтре и write на записываемом
    Создание таблицы create на пространстве имён
    Удаление, очистка, изменение, включение, отключение, flush, split, слияние, компактация admin или create на таблице
    Перемещение, назначение, снятие назначения, перевод в offline admin на таблице
    Создание, восстановление, удаление или вывод списка снимков admin на таблице; для клонирования также нужен create на целевом пространстве имён
    Массовая загрузка create на таблице
    Создание, изменение, удаление пространства имён admin на пространстве имён
    Описание пространства имён; списки пространств имён и таблиц Любой доступ к нему самому или к его содержимому
    Балансировщик, остановка кластера, квоты, узлы репликации, группы region server, процедуры, вывод из эксплуатации, остановка region server, смена WAL admin на global

    Развёртывание

    1. Добавьте сервис данных hbase и настройте его политики. Откройте Права доступа к данным → Агенты, выберите сервис и выпустите токен агента. Он показывается один раз; сохраните его в файл, доступный для чтения только учётной записи HBase.

    2. Скопируйте JAR в lib каждого master и region server, например /opt/hbase/lib.

    3. Добавьте параметры в hbase-site.xml каждого узла, заменив примеры адреса, путей и имени экземпляра:

      <property><name>hbase.coprocessor.master.classes</name>
        <value>org.devlive.grantforge.hbase.agent.GrantForgeHBaseCoprocessor</value></property>
      <property><name>hbase.coprocessor.region.classes</name>
        <value>org.devlive.grantforge.hbase.agent.GrantForgeHBaseCoprocessor</value></property>
      <property><name>hbase.coprocessor.regionserver.classes</name>
        <value>org.devlive.grantforge.hbase.agent.GrantForgeHBaseCoprocessor</value></property>
      <property><name>grantforge.server.url</name><value>https://grantforge.example.com</value></property>
      <property><name>grantforge.token.file</name><value>/etc/hbase/grantforge.token</value></property>
      <property><name>grantforge.instance</name><value>regionserver-1</value></property>
      <property><name>grantforge.cache.dir</name><value>/var/lib/hbase/grantforge-cache</value></property>

      Каталог кэша должен быть доступен для записи учётной записи HBase. Замените собственный AccessController HBase в списках сопроцессоров, а не загружайте оба.

    4. Перезапускайте master и region server по одному. Пока у агента нет первого снимка, все запросы, кроме запросов суперпользователей, отклоняются.

    5. Сначала перенесите существующие права: права, сохранённые AccessController HBase в hbase:acl, перестают действовать. Заранее выведите их через user_permission и создайте соответствующие политики.

    Параметр Назначение
    grantforge.server.url, grantforge.token.file, grantforge.instance, grantforge.cache.dir Обязательные: сервер GrantForge, файл токена агента, имя этого master или region server и доступный для записи каталог для подписанного снимка и событий в очереди
    grantforge.signing.key.file Необязательный файл, закрепляющий ключ подписи снимков; скопируйте открытый ключ Ed25519 X.509 в кодировке Base64 со страницы агентов. Если не задан, ключ запрашивается у сервера при первом обращении
    grantforge.connect.timeout.ms, grantforge.read.timeout.ms Тайм-ауты подключения и чтения к GrantForge, по умолчанию 5000 / 8000 миллисекунд
    grantforge.refresh.interval.ms Как часто агент запрашивает новые политики, по умолчанию 30000, не меньше 1000 миллисекунд
    grantforge.audit.batch.size, grantforge.audit.queue.capacity, grantforge.audit.flush.interval.ms, grantforge.audit.spool.limit.bytes События доступа: размер пакета (по умолчанию 500), размер очереди (по умолчанию 10000), интервал отправки (по умолчанию 5000 миллисекунд) и предел очереди на диске (по умолчанию 64 МиБ)
    grantforge.audit.fold.window.ms Сколько времени одинаковые разрешённые обращения объединяются в одно событие, по умолчанию 10000, не больше 3600000 миллисекунд; 0 передаёт каждое
    grantforge.decision.cache.size, grantforge.decision.cache.ttl.ms Наибольшее число хранимых решений, по умолчанию 100000, не больше 10000000, 0 не хранит ни одного; и как долго, по умолчанию 10000, 1..3600000 миллисекунд

    HBase запускает сопроцессор для master, для region server и для каждого открываемого региона; все они используют один агент, один кэш решений и одно объединение событий.

    Пользователи, группы и роли

    Политики называют короткое имя, которое HBase присваивает пользователю подключения: имя пользователя простой аутентификации или короткое имя принципала Kerberos по hadoop.security.auth_to_local. Группы — это группы, которые сопоставление групп Hadoop даёт пользователю на сервере, вместе с группами, в которые его включает GrantForge; роли — те, что назначает GrantForge.

    Решения и ограничения

    • Без пригодного снимка отклоняется всё, кроме запросов суперпользователей и чтения пространства имён hbase. Неиспользуемый сервис оставляет HBase без проверок, как без авторизатора.
    • Токен, привязанный к сервису, тип которого не hbase, отклоняет всё.
    • Команды HBase grant, revoke и user_permission завершаются ошибкой AccessController is not loaded: права — это политики GrantForge.
    • Вызовы конечных точек сопроцессоров не проверяются; загружайте только те, которым доверяете.
    • Здесь HBase не даёт создателю таблицы собственных прав; политика на пространстве имён, как выше, даёт владельцам их таблицы.
    • HBase записывает некоторые отказы в журнал вместо того, чтобы вернуть их, например при переключении балансировщика: переключатель остаётся как был, но клиент об этом не узнаёт.
    • Решения хранятся grantforge.decision.cache.ttl.ms, поэтому период действия политики начинается или заканчивается с задержкой до этого значения.
    • Права HBase на уровне ячеек и метки видимости не охвачены. Столбцы сравниваются как текст UTF-8.

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

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