Apache Airflow – мощная платформа для оркестрации рабочих процессов, широко используемая в data engineering. Одной из ключевых задач при работе с Airflow является управление доступом к DAG (Directed Acyclic Graph), особенно когда речь идет о ручном запуске. Эта статья предоставит пошаговую инструкцию по настройке прав доступа в Airflow, чтобы конкретные пользователи или группы пользователей могли запускать определенные DAG вручную. Мы рассмотрим встроенные роли, настройку пользователей, DAG-based access control и интеграцию с внешними системами аутентификации.
Основы управления доступом в Airflow
Обзор системы ролей и разрешений Airflow
Airflow использует ролевую модель управления доступом (RBAC). Разрешения назначаются ролям, а пользователи назначаются ролям. Это позволяет централизованно управлять доступом к ресурсам Airflow, включая DAG, переменные, подключения и т.д. Правильная настройка прав доступа – критически важна для безопасности и предотвращения несанкционированного доступа к данным и процессам.
Встроенные роли и их назначение: Admin, User, Op
Airflow предоставляет несколько встроенных ролей:
-
Admin: Имеет полный доступ ко всем функциям Airflow. Администратор может создавать, редактировать и удалять пользователей, роли, DAG и другие ресурсы.
-
User: Имеет доступ к UI Airflow и может выполнять определенные операции, в зависимости от назначенных разрешений.
-
Op: Предназначена для выполнения оперативных задач, таких как запуск и остановка DAG, просмотр логов.
Кроме этих ролей можно создавать пользовательские роли с необходимым набором разрешений.
Создание и настройка пользователей в Airflow
Создание нового пользователя через UI и CLI
Нового пользователя можно создать через веб-интерфейс Airflow (UI) или с помощью командной строки (CLI).
Через UI:
-
Перейдите в раздел Security -> List Users.
-
Нажмите кнопку Create.
-
Заполните необходимые поля (имя пользователя, пароль, email).
-
Сохраните пользователя.
Через CLI (используя airflow users create):
airflow users create --username <username> --firstname <firstname> --lastname <lastname> --email <email> --role <role>
Например:
airflow users create --username data_engineer --firstname John --lastname Doe --email john.doe@example.com --role Op
Назначение ролей пользователям: примеры и рекомендации
После создания пользователя необходимо назначить ему роль. Роль определяет, какие действия пользователь может выполнять в Airflow.
Через UI:
-
Перейдите в раздел Security -> List Users.
-
Выберите пользователя, которому нужно назначить роль.
-
В разделе Roles добавьте нужные роли.
-
Сохраните изменения.
Рекомендуется создавать пользовательские роли с минимально необходимыми разрешениями для конкретных задач. Например, роль для запуска DAG вручную должна включать только разрешение на запуск и просмотр логов для определенных DAG.
Предоставление прав на ручной запуск DAG
Настройка разрешений на уровне DAG: DAG-based access control
Airflow позволяет настроить права доступа на уровне DAG. Это означает, что можно указать, какие пользователи или группы пользователей могут запускать, просматривать или редактировать определенный DAG. DAG-based access control обеспечивает более гранулярный контроль доступа и повышает безопасность.
Практические примеры назначения прав для конкретных пользователей/групп
Чтобы предоставить пользователю data_engineer права на ручной запуск DAG my_dag, необходимо выполнить следующие шаги:
-
Создайте пользовательскую роль, например
DagRunner. -
Назначьте роли
DagRunnerразрешениеcan_triggerдля DAGmy_dag. -
Назначьте пользователя
data_engineerролиDagRunner.
Это можно сделать программно, используя API Airflow или напрямую редактируя базу данных (не рекомендуется).
Пример (упрощенный, требует адаптации под конкретную среду Airflow, включая настройку RBAC):
from airflow.models import DAG
from airflow.operators.bash import BashOperator
from airflow.utils.dates import days_ago
with DAG(
dag_id='my_dag',
schedule=None,
start_date=days_ago(2),
tags=['example'],
) as dag:
task1 = BashOperator(
task_id='print_date',
bash_command='date',
)
В данном примере, после настройки RBAC и создания роли DagRunner, пользователь data_engineer, которому назначена эта роль, сможет вручную запустить my_dag через UI Airflow.
Продвинутые методы управления доступом и устранение неполадок
Интеграция с внешними системами аутентификации (LDAP, OAuth)
Для централизованного управления пользователями и упрощения аутентификации, Airflow можно интегрировать с внешними системами аутентификации, такими как LDAP и OAuth. Это позволяет использовать существующие учетные записи пользователей и политики безопасности.
Настройка интеграции с LDAP обычно включает указание параметров подключения к LDAP-серверу, таких как URL, DN, и параметры поиска пользователей и групп. Конфигурация OAuth требует регистрации приложения Airflow в OAuth-провайдере и настройки callback URL.
Решение распространенных проблем с правами доступа и логированием
Распространенные проблемы с правами доступа включают:
-
Пользователь не может запустить DAG: проверьте, назначена ли пользователю роль с разрешением
can_triggerдля данного DAG. -
Пользователь не видит DAG в UI: убедитесь, что у пользователя есть разрешение на просмотр DAG (
can_read). -
Некорректная работа интеграции с LDAP/OAuth: проверьте правильность конфигурации подключения и сопоставление ролей.
Логи Airflow содержат подробную информацию о событиях, связанных с аутентификацией и авторизацией. Используйте логи для диагностики проблем с правами доступа и определения причин ошибок.
Заключение
Правильная настройка управления доступом в Airflow – важная задача для обеспечения безопасности и контроля над рабочими процессами. Используйте встроенные роли, создавайте пользовательские роли с гранулярными разрешениями, и интегрируйте Airflow с внешними системами аутентификации для упрощения управления пользователями. Регулярно проверяйте и обновляйте политики доступа, чтобы соответствовать требованиям безопасности и потребностям бизнеса. При возникновении проблем, используйте логи Airflow для диагностики и устранения неполадок.