Перейти к основному содержимому
Версия: 2.0.x

Настройка безопасности для Iceberg REST Catalog

В сценариях, где несколько узлов совместно обращаются к одному и тому же data lake, основная проблема заключается в том, как обеспечить безопасное, унифицированное и проверяемое управление правами. В традиционных моделях пользователям необходимо настраивать storage credentials и выполнять локальный контроль прав индивидуально для каждого узла, что не только увеличивает затраты на обслуживание, но и создаёт риски утечки credentials и несогласованности прав.

Интегрируя Iceberg REST Catalog с Selena, можно достичь безопасного доступа и унифицированного управления правами через комбинацию JWT (JSON Web Token) аутентификации и Vended Credentials (временных credentials). Эта настройка помогает:

  • Уменьшить риски credentials: Нет необходимости хранить информацию учётных записей с высокими привилегиями внутри Selena. Credentials выдаются временно Catalog, избегая утечки.
  • Унифицировать и упростить права: Контроль доступа ко всем базам данных, таблицам и представлениям централизованно управляется Catalog, обеспечивая согласованность между различными узлами и избегая избыточной конфигурации.
  • Соответствие требованиям и упрощение операций: Действия пользователей отслеживаются, что облегчает аудит. Это также снижает затраты на поддержание прав и storage credentials внутри Selena.

Механизмы безопасности

  • JWT аутентификация
    • Когда пользователь входит в Selena, полученный JWT Token может быть передан в Iceberg REST Session Catalog.
    • Catalog будет аутентифицировать пользователя на основе JWT Token и выполнять запросы под идентичностью реального пользователя.
    • Преимущество в том, что Selena не нужно хранить учётные записи с высокими привилегиями, что значительно снижает риски безопасности.
  • Vended credentials
    • После аутентификации Catalog может сгенерировать временные storage access credentials для пользователя.
    • Пользователям не нужно настраивать credentials для storage layer в Selena.
    • При каждом обращении к object storage Selena будет использовать временные credentials, выданные Catalog.
    • Это повышает безопасность и упрощает управление credentials.

Использование

Шаг 1. Настройка JWT аутентификации

В Selena настройте Security Integration на основе JWT или создайте пользователя с JWT аутентификацией.

Шаг 2. Создание Iceberg REST Catalog и настройка параметров безопасности

CREATE EXTERNAL CATALOG iceberg_rest_catalog
PROPERTIES (
"iceberg.catalog.type" = "rest",
"iceberg.catalog.uri" = "<rest_server_api_endpoint>",
"iceberg.catalog.security" = "jwt",
"iceberg.catalog.warehouse" = "<identifier_or_path_to_warehouse>",
"iceberg.catalog.vended-credentials-enabled" = "true"
);

Свойства:

  • iceberg.catalog.type: Установите это свойство в rest, указывая на использование REST Catalog.
  • iceberg.catalog.uri: API endpoint для сервиса REST Catalog.
  • iceberg.catalog.security: Установите это свойство в jwt для включения JWT аутентификации. Selena будет передавать информацию аутентификации текущего пользователя в Catalog.
  • iceberg.catalog.warehouse: Указывает путь к Iceberg data warehouse или идентификатор.
  • iceberg.catalog.vended-credentials-enabled: Установите это свойство в true для включения Vended Credentials и разрешения выдачи временных credentials.

Шаг 3. Предоставление прав

Когда пользователь запрашивает Catalog через Selena, права обрабатываются на двух уровнях:

  1. Права внутренних объектов Selena

    Имеет ли пользователь право просматривать объект Catalog внутри Selena и переключать сессию на этот Catalog с помощью SET CATALOG.

  2. Права внутри Catalog

    Имеет ли пользователь соответствующие права доступа при обращении к базам данных, таблицам или представлениям внутри Catalog.

В идеальном workflow Selena отвечает за управление базовыми правами, необходимыми пользователю для доступа к объектам Catalog после входа в кластер Selena. Детальные права доступа к данным внутри Catalog полностью управляются самим Catalog. Это означает:

  • Пользователи должны иметь право USAGE на объект Catalog в Selena, чтобы они могли переключиться на catalog с помощью SET CATALOG или просматривать информацию о catalog с помощью SHOW CATALOGS.
  • Проверки прав на уровне данных полностью обрабатываются Catalog.

Права внутренних объектов Catalog в Selena

Для выполнения SHOW CATALOGS или SET CATALOG в Selena пользователю необходимо право USAGE на соответствующий объект Catalog.

Вариант 1: Предоставление доступа всем пользователям

Если вы разрешаете всем пользователям просматривать и переключаться на указанный Catalog, вы можете предоставить право USAGE Catalog роли public.

GRANT USAGE ON CATALOG <catalog_name> TO ROLE public;

Это автоматически предоставит всем пользователям при входе в Selena роль public и, соответственно, право USAGE этого Catalog.

Вариант 2: Детальное управление правами

Если вы хотите, чтобы только определённые пользователи или группы могли просматривать и переключаться на Catalog, вы можете использовать Group Provider и Role для более детального управления:

  1. Синхронизируйте информацию о внешних группах пользователей с Selena, используя Group Provider.

  2. Создайте соответствующую роль Selena.

    CREATE ROLE <role_name>;
  3. Привяжите роль к внешней группе пользователей:

    GRANT <role_name> TO EXTERNAL GROUP <group_name>;
  4. Предоставьте роли право USAGE Catalog:

    GRANT USAGE ON CATALOG <catalog_name> TO ROLE <role_name>;

В этом случае члены внешней группы автоматически унаследуют назначенную роль при входе в Selena и получат право USAGE Catalog.

Права на данные внутри Catalog

Настраивая свойства Catalog, проверки прав для всех объектов внутри Catalog делегируются самому Catalog. Catalog будет централизованно управлять аутентификацией и правами, упрощая конфигурацию прав в Selena, избегая избыточных авторизаций и обеспечивая согласованность правил прав между различными engines.

ALTER CATALOG iceberg_rest_catalog
SET PROPERTIES (
"catalog.access.control" = "allowall"
);

Свойства:

  • catalog.access.control: Установите это свойство в allowall. Selena не будет выполнять дополнительные проверки прав на объекты внутри Catalog. Вместо этого всё управление правами будет обрабатываться самим Catalog.