Ограничение видимости Airflow DAG по группам AD / LDAP

Можно ли ограничить видимость и доступность DAG по группам пользователей в Airflow?

Например, я хочу иметь одну большую среду Airflow для всей моей компании, разные команды будут использовать эту среду Airflow для своих рабочих процессов. Скажем, у нас есть команда A и команда B, которые обе принадлежат к своим соответствующим группам AD / LDAP, группе A и группе B. Возможно ли, чтобы группа A видела только те группы DAG, которые принадлежат ее команде, и наоборот для группы B?

Основываясь на моем исследовании и понимании, я не думаю, что это будет возможно в одной среде Airflow. Я думаю, что для этого мне нужно будет создать отдельную среду Airflow для каждой команды, чтобы у каждой команды была своя собственная папка Airflow Dags, содержащая их соответствующие DAG.


person Kyle Bridenstine    schedule 27.06.2018    source источник
comment
То есть не было найдено соответствующих статей, описывающих, как ограничить видимость DAG по группам.   -  person Kyle Bridenstine    schedule 27.06.2018
comment
В 1.10.2 они добавили средства управления доступом на уровне DAG. Насколько я могу судить, вам все равно придется вручную сопоставить группы DAG с ролью. Вы также должны вручную назначить пользователям роли; роль не может поддерживаться группой LDAP. github.com/minio/cookbook/blob/master/docs/   -  person santon    schedule 10.06.2019


Ответы (2)


Я думаю, здесь ставятся две разные проблемы:

Во-первых, аутентификация LDAP. Airflow обеспечивает поддержку аутентификации LDAP на основе ldap3. Пример в связанном документе показывает, как связать роли Airflow с группами LDAP (например, с частью data_profiler_filter).

Во-вторых, ограничение доступа к DAG по группе. На момент написания этой статьи текущая версия Airflow (1.9) не поддерживает ограничение видимости DAG по группе. Недавняя работа над управлением доступом на основе ролей (RBAC) меняет это. Ниже я перечислил 3 различных варианта решения этой проблемы.


Вариант 1 - RBAC (наибольший контроль, доступен в Airflow ≥ 1.10)

Новые функции RBAC добавляют поддержку таких разрешений и лучше всего подходят для детального управления. Он использует систему разрешений, построенную на Flask App Builder. Он был создан компанией с вариантом использования, очень похожим на то, что вы упомянули, что более подробно обсуждается в выпуске Jira.

Более подробную информацию можно найти в:

Пользовательский интерфейс веб-сервера RBAC теперь доступен на главном сервере в airflow / www_rbac . Другие функции RBAC также активно развиваются для дальнейшего повышения безопасности в многопользовательской среде.

Примечание. Также продолжается работа над новой функцией управления доступом на уровне DAG (DLAC) в AIRFLOW- 2267, который основан на работе RBAC по внедрению еще более детального контроля. Дополнительную информацию можно найти в проектной документации и PR № 3197.


Вариант 2 - Мультиарендность с собственниками (самый простой, доступен в Airflow ‹1.10)

Второй вариант, который вы можете рассмотреть для среднеуровневого управления, - это настройка нескольких арендаторов. с помощью webserver.filter_by_owner и настройки одного явного owner (пользователя, а не группы) для каждой группы DAG. «При этом пользователь будет видеть только те даги, владельцем которых он является, если только он не является суперпользователем».

В сторону: связанная функция, которую вы можете заинтересовать в выполнении задач от имени конкретного пользователя с выдача себя за другое лицо с использованием run_as_user или core.default_impersonation.


Вариант 3. Запуск нескольких отдельных экземпляров Airflow (максимальная изоляция)

Третий вариант крупномасштабного управления, который выбирают некоторые компании, - это запуск нескольких отдельных экземпляров Airflow, по одному на команду. Это, вероятно, наиболее практично для тех, кто сегодня хочет изолированно запускать группы DAG для нескольких команд. Если вы используете Astronomer Enterprise, мы поддерживаем запуск нескольких экземпляров Airflow.

person Taylor Edmiston    schedule 27.06.2018
comment
Я думаю, что RBAC доступен только с версии 2.0? - person Charmy; 16.05.2019
comment
@Charmy Я считаю, что после выпуска 2.0 пользовательский интерфейс RBAC станет стандартным, а старый пользовательский интерфейс будет устаревшим. Однако, начиная с версии 1.10, RBAC доступен, и многие люди уже используют его. Дополнительную информацию о том, как включить и использовать его, можно найти на странице Безопасность пользовательского интерфейса RBAC . Вы также можете найти дополнительную информацию о выпусках функций RBAC в журнале изменений воздушного потока. - person Taylor Edmiston; 16.05.2019
comment
Вариант 2, filter_by_owner. Не работает. Это правда, что пользователи, которые не владеют DAG, не могут видеть его на экране DAG, но как только владелец (или другой процесс) запускает DAG, любой пользователь может получить доступ к главному экрану DAG из Обзор ›DAG Runs и удалить / изменить / вызвать это. - person amza; 11.06.2019
comment
@amza Спасибо. Я обновил ответ, чтобы отразить это. Если вы используете ‹1.10, я думаю, вы могли обнаружить ошибку. Если вы используете ≥ 1.10, похоже, что эта опция устарела с введением RBAC. github.com/apache/airflow/blame/ - person Taylor Edmiston; 11.06.2019
comment
@TaylorEdmiston Я не видел в вашем обновленном ответе упоминания об этом. Я осознал это беспокойство только после прочтения комментария Амзы - person cryanbhu; 12.07.2019

Поскольку у вас может быть множество владельцев, другим вариантом будет

  1. Определите переменную с вашей группой как массив имен пользователей в json
// Variable: group-datascience
["dinigo","michael","david"]
  1. В вашем новом даге установите этот конфиг как владельца
dag = DAG(
  dag_id='dag-with-group-scope',
  owner= Variable.get('group-datascience', parse_json=True),
  # some more config
)
  1. Активируйте фильтрацию владельца в файле airflow.cfg или через переменную окружения.
  2. Удалите разрешение на просмотр / редактирование переменных для людей с настраиваемой ролью. В противном случае они могли бы изменить его, когда захотят.

Это всего лишь макияж, и его легко взломать. Поскольку любой может запросить все переменные из задачи (может ли?). Но это может помочь организовать

person dinigo    schedule 14.04.2020