Плагин HBase ищет пространства имён, таблицы и семейства столбцов и управляет политиками доступа в областях собственных прав HBase: глобальной области, пространствах имён, таблицах, семействах столбцов и столбцах. ID плагина и тип сервиса — hbase. Плагин сервиса работает на сервере GrantForge; агент HBase, установленный в master и region server, применяет политики.
Интеграционные тесты Testcontainers в репозитории покрывают HBase 2.5.16, 2.6.7 и 3.0.0, собранные из проверенных по SHA-512 выпусков Apache, и кластер 2.6.7 с Kerberos; это не сертифицирует все остальные версии.
Установка
Дистрибутив содержит плагин в plugins/hbase. Убедитесь, что hbase включён в Управление платформой → Плагины; после обновления каталога плагинов просканируйте его заново. Плагин общается с кластером через собственный клиент HBase (hbase-shaded-client-byo-hadoop 2.6.7) поверх shaded-клиента Hadoop 3.5.0 в отдельном загрузчике классов, поэтому работает и с HBase 2.x, и с 3.x.
Добавление сервиса данных
- Откройте Права на данные → Сервисы данных, добавьте сервис и выберите Apache HBase (
hbase). - Укажите кворум ZooKeeper или серверы начальной загрузки кластера HBase 2.5 и новее.
- Выберите способ входа пользователя для поиска, укажите его, проверьте подключение и сохраните сервис. Проверка входит в систему и описывает кластер: его ID, версию и число работающих region server.
Параметры носят имена клиентов HBase, поэтому их можно скопировать из hbase-site.xml. Пользователь для поиска позволяет GrantForge находить ресурсы; он не связан с клиентами, которые читают и пишут данные. Успешная проверка подключения не означает, что запросы уже подчиняются политикам.
| Параметр | Назначение |
|---|---|
hbase.zookeeper.quorum |
Хосты ZooKeeper, хост или хост:порт через запятую, например zk1,zk2,zk3:2181; обязателен, если не заданы серверы начальной загрузки |
hbase.zookeeper.property.clientPort |
Порт хостов кворума, у которых он не указан, по умолчанию 2181 |
zookeeper.znode.parent |
Корень кластера в ZooKeeper, по умолчанию /hbase |
hbase.client.bootstrap.servers |
Вместо ZooKeeper, начиная с HBase 2.5: master или region server, хост:порт через запятую |
hbase.security.authentication |
simple (по умолчанию): имя пользователя; kerberos: принципал с keytab или паролем |
username |
Обязательный пользователь для поиска; при Kerberos — полный принципал, например grantforge@EXAMPLE.COM |
password |
Kerberos: пароль принципала, если keytab не задан; хранится в зашифрованном виде |
keytab |
Kerberos: путь к keytab принципала, доступный для чтения на сервере GrantForge |
kerberos.kdc |
Kerberos: KDC области принципала, хост[:порт] через запятую; пустое значение использует krb5.conf сервера |
hbase.master.kerberos.principal |
Kerberos: принципал master, по умолчанию hbase/_HOST@ и область принципала для поиска |
hbase.regionserver.kerberos.principal |
Kerberos: принципал region server, по умолчанию тот же, что у master |
hbase.rpc.protection |
authentication (по умолчанию), integrity или privacy, как в кластере |
hbase.rpc.timeout |
Тайм-аут RPC, по умолчанию 30000, диапазон 1..600000 |
Сервис — это ровно то, что сказано в его параметрах: никакой hbase-site.xml сервера GrantForge не читается. Параметры Kerberos отклоняются при простой аутентификации; Kerberos требует пароль или keytab. Поиск сдаётся после нескольких попыток, а не через минуты, как HBase по умолчанию.
Kerberos
При kerberos GrantForge выполняет вход принципала через собственный вход Hadoop, по keytab или с паролем, сохраняет вход и продлевает его по keytab; больше ничего на сервере GrantForge не требует настроек Kerberos. Области, KDC которых указаны в kerberos.kdc, объявляются для всего сервера GrantForge, как это делают плагины HDFS и Hive, поэтому разные сервисы могут одновременно использовать разные области.
Кластер закрывает соединение клиента, который входит не так, как он ожидает, и не объясняет причину. Плагин сообщает об этом как об отказе во входе и указывает на hbase.security.authentication и hbase.rpc.protection, которые должны совпадать с настройками кластера.
Что видит пользователь для поиска
Когда агент HBase применяет политики, списки опускают пространства имён и таблицы, которыми пользователь для поиска не может пользоваться: дайте ему политику, разрешающую read на пространстве имён *, или укажите его в hbase.superuser кластера.
Ресурсы и типы доступа
| Уровень | Сопоставление | Типы доступа |
|---|---|---|
global |
Единственное значение * |
admin: операции над всем кластером, например балансировщик, квоты и репликация |
namespace |
Подстановочные знаки, с учётом регистра | read, write, create, admin |
table |
Подстановочные знаки, с учётом регистра; внутри пространства имён, без его имени | read, write, create, admin |
column_family |
Подстановочные знаки, с учётом регистра; внутри таблицы | read, write |
column |
Подстановочные знаки, с учётом регистра; внутри семейства столбцов; имена как текст UTF-8 | read, write |
Типы доступа — это read, write, create и admin самой HBase. exec HBase для конечных точек сопроцессоров не предлагается, потому что агент не может проверять их вызовы во всех версиях HBase.
Как и в HBase, право охватывает всё в своей области: read на пространстве имён sales читает все его таблицы, write на семействе столбцов пишет все его столбцы. Запрос решается в каждой названной им области, и запрет в любой из них отклоняет его; так политика может разрешить таблицу и запретить один её столбец. Глобальная область — это сам кластер, а не все таблицы; все таблицы охватывают политики на пространстве имён *.
В значениях политик * соответствует любому числу символов, ? — одному. Редактор политик предлагает пространства имён, таблицы в названных политикой пространствах имён и семейства столбцов её таблиц; столбцы содержат данные и не предлагаются.
Пример политик
Допустим, в пространстве имён sales есть таблица orders с семействами столбцов d, где лежат name и ssn, и meta. Создайте в одном сервисе данных эти включённые политики доступа:
| Ресурсы | Правило |
|---|---|
namespace=sales |
Разрешить read пользователю alice |
namespace=sales, table=orders, column_family=d |
Разрешить read пользователю bob |
namespace=sales, table=orders |
Разрешить read группе auditors |
namespace=sales, table=orders, column_family=d, column=ssn |
Запретить read группе auditors |
namespace=analytics |
Разрешить create и admin пользователю dave |
Когда агент применит новый снимок, alice будет читать все таблицы sales; bob при чтении orders получит только столбцы d, а в списке таблиц увидит только orders; участники auditors прочтут всю orders, кроме d:ssn; dave создаст пространство имён analytics и его таблицы, будет ими управлять, а создание таблиц в других местах ему запретят.
Применение политик
Плагин сервиса управляет политиками и ищет ресурсы. Чтобы применять их, в каждом master и region server нужен агент HBase. Развёртывание и проверки описаны на странице агента HBase.
