Перейти к содержимому
Последнее обновление

Как работает IAM Assume Role в Apache Doris

В этом документе описано, как Apache Doris обращается к ресурсам S3 с помощью механизма AWS IAM Assume Role: его преимущества перед традиционным подходом с AK/SK, процесс аутентификации с временными учётными данными STS и интеграция Doris с этим механизмом при развёртывании на EC2.

Сценарии применения​

СценарийОписание
Замена долгосрочных учётных данных AK/SKИспользование динамических временных учётных данных STS для устранения риска утечки ключей, явно заданных в конфигурации
Доступ к S3 из другого аккаунтаСущность из исходного аккаунта принимает роль в целевом аккаунте, а External ID обеспечивает безопасную изоляцию
Аудит соблюдения принципа минимальных привилегийАвторизация на основе ролей; AWS предоставляет журналы аудита с указанием конкретных исполнителей и действий
Кластеры Doris, развёрнутые на EC2Узлы FE/BE автоматически выполняют Assume Role через EC2 Instance Profile

Предварительные требования​

  • Apache Doris версии 3.0.6 или новее (S3 Load, TVF, Export, Resource, Repository, Storage Vault и другие функции поддерживают Assume Role)
  • Процессы FE и BE развёрнуты на экземплярах AWS EC2 с привязанной IAM Role
  • Для исходного и целевого аккаунтов заранее определены роли IAM и отношения доверия
  • Доступен сервис STS

1. Проблемы традиционного подхода с AK/SK при доступе к ресурсам AWS​

Схема доступа со статическими AK/SK имеет существенные недостатки в управлении ключами, отслеживании действий для аудита и контроле прав:

Категория рискаКонкретное проявление
Риск длительного несанкционированного доступаСтатические AK/SK необходимо явно указывать в файлах конфигурации. При утечке из-за раскрытия кода, случайного коммита или кражи злоумышленники на постоянной основе получают все права владельца ключей. Это создаёт постоянный риск утечки данных, несанкционированного изменения ресурсов и финансовых потерь
Пробелы в аудитеЕсли несколько пользователей или сервисов используют один набор ключей, журналы облачных операций фиксируют только идентификатор ключа и не позволяют связать действия с конкретным пользователем. В результате невозможно установить, кто на самом деле выполнил действие или какой бизнес-модуль за него отвечает
Высокие затраты на сопровождениеРотация ключей крайне трудоёмка: ключи бизнес-модулей приходится менять вручную, что чревато ошибками и легко приводит к перебоям в работе сервисов
Недостаточный контроль правУкрупнённая авторизация на уровне аккаунта не позволяет соблюдать принцип минимальных привилегий на уровне сервисов или экземпляров

2. Обзор механизма AWS IAM Assume Role​

2.1 Что такое AWS IAM Assume Role​

AWS Assume Role представляет собой безопасный механизм смены идентичности, который позволяет доверенной сущности (например, пользователю IAM, экземпляру EC2 или внешнему аккаунту) временно получать права целевой роли через STS (Security Token Service). Схема работы показана ниже:

Схема работы AWS IAM Assume Role

2.2 Преимущества AWS IAM Assume Role​

  • Механизм динамических токенов: замена постоянных учётных данных временными, действующими от 15 минут до 12 часов
  • Безопасная изоляция между аккаунтами: использование External ID для безопасной изоляции между аккаунтами с возможностью аудита через консоль AWS
  • Принцип минимальных привилегий: доступ на основе ролей с соблюдением принципа минимальных привилегий

2.3 Процесс аутентификации для доступа к бакету S3 через AWS IAM Assume Role​

Полный процесс аутентификации состоит из трёх этапов: проверки идентичности исходного пользователя, активации прав целевой роли и выполнения операций с ресурсами.

Процесс аутентификации для доступа IAM Role к бакету S3

Этап 1: Проверка идентичности исходного пользователя​

  1. Проверка политики разрешений

    • Когда исходный пользователь инициирует запрос AssumeRole, механизм политик IAM исходного аккаунта сначала проверяет, разрешено ли пользователю вызывать действие sts:AssumeRole.
    • Основание проверки: IAM Permissions Policies, привязанные к идентичности исходного пользователя
  2. Проверка отношений доверия

    • Через STS в целевой аккаунт отправляется запрос для проверки того, включён ли исходный пользователь в список разрешённых сущностей политики доверия целевой роли.
    • Основание проверки: IAM Trust Relationships Policies, привязанные к целевой роли (они явно указывают, каким аккаунтам или пользователям разрешено принимать эту роль)

Этап 2: Активация прав целевой роли​

  1. Генерация временных учётных данных

    Если проверка отношений доверия пройдена, STS генерирует набор временных учётных данных из трёх компонентов:

    {
    "AccessKeyId": "***",
    "SecretAccessKey": "***",
    "SessionToken": "***"
    }

    Учётные данные действуют от 15 минут до 12 часов.

  2. Проверка прав целевой роли

    • Прежде чем целевая роль использует временные учётные данные для доступа к S3, механизм политик IAM целевого аккаунта проверяет, разрешено ли роли выполнять запрошенное действие S3 (например, s3:GetObject или s3:PutObject).
    • Основание проверки: IAM Permissions Policies, привязанные к целевой роли (они определяют, какие действия разрешены роли)

Этап 3: Выполнение операций с ресурсами​

  1. Доступ к бакету: после успешного прохождения всех проверок целевая роль может выполнять операции S3 API.

3. Как Doris использует механизм AWS IAM Assume Role​

3.1 Принцип интеграции​

Doris использует механизм AWS IAM Assume Role, привязывая экземпляры AWS EC2, на которых развёрнуты процессы FE и BE, к исходному аккаунту. Основная схема работы показана ниже:

Схема интеграции Doris с IAM Role

После настройки процессы Doris FE и BE автоматически получают профиль экземпляра EC2 и выполняют Assume Role для доступа к бакету. При расширении кластера узлы BE автоматически проверяют, привязана ли IAM Role к каждому новому экземпляру EC2, чтобы не допустить пропусков в конфигурации.

3.2 Поддерживаемые функции​

S3 Load, TVF, Export, Resource, Repository, Storage Vault и другие функции Doris поддерживают подход AWS Assume Role в версии 3.0.6 и новее. Проверка подключения выполняется при выполнении SQL-инструкций для этих функций.

3.3 Пример настройки через SQL​

В следующем примере создаётся S3 Repository:

CREATE REPOSITORY `s3_repo`
WITH S3 ON LOCATION "s3://bucket/path/"
PROPERTIES (
"s3.role_arn" = "arn:aws:iam::1234567890:role/doris-s3-role",
"s3.external_id" = "doris-external-id",
"timeout" = "3600"
);

Основные параметры:

ПараметрОбязательныйОписание
s3.role_arnДаARN роли IAM Role2 в аккаунте AWS IAM Account2
s3.external_idНетЗначение externalId, заданное в Trust Relationships Policies
timeoutНетТайм-аут операции в секундах

Подробные сведения об использовании SQL-инструкций для других функций см. в разделе Аутентификация и авторизация AWS.