В сферу ответственности дата-инженера входит не только проектирование быстрых и производительных конвейеров обработки данных, но обеспечение их надежности, в т.ч. с точки зрения информационной безопасности. Сегодня рассмотрим, как управлять чувствительной информацией (секретами) в Apache AirFlow, каких видов они бывают, где хранятся и что нужно сделать, чтобы не отображать их в UI и логе задач.
3 вида секретов в Apache Airflow
Секреты — это конфиденциальная информация, которая используется в пользовательских DAG-цепочках. Они бывают следующих видов [1]:
- переменные (variables) – как общий способ хранения и извлечения произвольного контента или настроек в виде простого хранилища значений ключа в Airflow. Переменные среды — самый простой в использовании способ, но неудобный в обслуживании. Переменные среды не поддерживают встроенное шифрование и к ним невозможно получить доступ из GUI или CLI-интерфейсов Airflow. Безопаснее работать и этим видом секретов из Kubernetes. Продолжительность жизни переменных среды зависит от развертывания Airflow или его конфигураций.
- подключения (connections) — информация, необходимая для подключения к внешним системам в формате URI в URL-кодировке.
- конфигурации (configurations) – конфигурационные настройки AirFlow, которые могут храниться в бэкэнде системы.
При хранении секретов в базе метаданных AirFlow (Metastore DB), их обслуживание упрощается. В частности, они доступны из GUI- и CLI-интерфейсов, а также через API. При добавлении соединений кодирование URL и форматирование URI выполняется автоматически. Поддерживается шифрование ключом Fernet в БД, просто экспортируется и импортируется. В этом случае длительность жизни секрета определяется хранилищем Airflow Metastore. Впрочем, этот способ может быть не одобрен специалистами cybersecurity и не подойдет для production-сред. Поэтому стоит рассмотреть альтернативные способы [1]:
- HashiCorp Vault – open-source утилита для безопасного и надежного хранения и распространения секретов, таких как ключи API, токены доступа и пароли [2];
- GCP Secret Manager — система хранения ключей API, паролей, сертификатов и других конфиденциальных данных в Google Cloud [3];
- AWS Secrets Manager — сервис управления конфиденциальными данными, который помогает защитить доступ к приложениям, сервисам и ИТ‑ресурсам [4];
- Azure Key Vault — облачная служба для безопасного хранения секретов (ключи API, пароли, сертификаты или криптографические ключи) и доступа к ним.
Data Pipeline на Apache Airflow
Код курса
AIRF
Ближайшая дата курса
27 ноября, 2024
Продолжительность
24 ак.часов
Стоимость обучения
72 000 руб.
Лучшие практики управления секретами в AirFow
С учетом, что развертывание Apache AirFlow в Google Cloud Platform (GCP) и других облачных средах сегодня становится весьма популярно, целесообразно использовать возможности именно этих SaaS/PaaS-решений для хранения конфиденциальной информацией и управления доступом к ней. В частности, интеграция GCP Workload Identity и AWS IAM (Identity and Access Management) предоставляет следующие преимущества совместного использования этих технологий [1]:
- безопасность – не нужно прикасаться к учетным записям сервисов;
- гибкость — учетные записи облачных служб привязаны к учетным записям служб Kubernetes;
- простота эксплуатации – достаточно однажды настроить разрешения и сохранить их для долговременного использования.
Подключения и конфиденциальные переменные среды рекомендуется хранить в backend-альтеративах, таких как HashiCorp Vault, GCP Secret Manager, AWS Secrets Manager, Azure Key Vault. А Airflow Metastore DB стоит применять для тех секретов, к которым нужен доступ непосредственно из самого фреймворка [1]. Об автоматизации очистки хранилища Metastore читайте в нашей новой статье. Посмотреть и установить готовые Python-пакеты управления секретами от самих провайдеров, в частности, HashiCorp, можно в открытом и бесплатном реестре от компании Astronomer, которая занимается коммерциализирует Apache AirFlow. Подробнее об этом мы рассказываем здесь.
Также имеет смысл маскировать конфиденциальные данные. Airflow по умолчанию маскирует пароли подключения, конфиденциальные переменные и ключи из дополнительного поля подключения (JSON), когда они появляются в журналах задач, в представлениях переменных и визуализированных полях GUI. За включение/отключение маскирования отвечает параметр конфигурации hide_sensitive_var_conn_fields. Автоматическое маскирование запускается подключением или доступом к переменной. Но при передаче чувствительных данных через XCom или любой другой подобный канал, оно не будет замаскировано в нисходящей задаче.
Когда маскирование включено, Airflow всегда будет маскировать поле пароля каждого соединения, к которому выполняется задача. Также фреймворк спрячет значение переменной или поле дополнительного JSON-объекта Connection, если имя содержит слова типа ‘password’, ‘secret’, ‘passwd’, ‘authorization’, ‘api_key’, ‘apikey’, ‘access_token’. Наконец, если требуется маскировать дополнительный секрет, который уже был замаскирован одним из вышеперечисленных методов, дата-инженер может сделать это в пользовательском DAG-файле или в функции выполнения оператора с помощью mask_secret() следующим образом [5]:
@task def my_func(): from airflow.utils.log.secrets_masker import mask_secret mask_secret("custom_value")
или через объявление функции в классе:
class MyOperator(BaseOperator): def execute(self, context): from airflow.utils.log.secrets_masker import mask_secret mask_secret("custom_value")
Читайте в нашей новой статье про управление пользователями в AirFlow.
Data Pipeline на Apache Airflow
Код курса
AIRF
Ближайшая дата курса
27 ноября, 2024
Продолжительность
24 ак.часов
Стоимость обучения
72 000 руб.
Узнайте больше полезных тонкостей современной дата-инженерии и практического применения Apache AirFlow для разработки сложных конвейеров аналитики больших данных с Hadoop и Spark на специализированных курсах в нашем лицензированном учебном центре обучения и повышения квалификации для разработчиков, менеджеров, архитекторов, инженеров, администраторов, Data Scientist’ов и аналитиков Big Data в Москве:
- https://www.astronomer.io/blog/secrets-management-airflow-2
- https://www.vaultproject.io/
- https://cloud.google.com/secret-manager
- https://aws.amazon.com/ru/secrets-manager/faqs/
- https://airflow.apache.org/docs/apache-airflow/stable/security/secrets/index.html