Apache Airflow 密钥后端2025 年 6 月 10 日 | 阅读 8 分钟 引言Apache Airflow 是一个强大的平台,用于以编程方式创建、调度和监控工作流。但是,随着工作流变得越来越复杂并与各种系统集成,管理密码、API 密钥和其他凭据等敏感信息已成为一个关键问题。这时,Airflow 中的 Secrets Backend(密钥后端)概念就发挥了作用。 什么是 Airflow 中的 Secrets Backend?Airflow 中的 Secrets Backend 是一种用于安全存储和检索工作流所需的敏感信息的机制。它不是在 DAG 或配置文件中硬编码凭据,而是允许集中管理密钥,从而提高安全性和合规性。 为什么使用 Secrets Backend?
Secrets Backend 搜索路径搜索路径决定了 Airflow 检查各种密钥来源的顺序。这种机制确保了灵活性,并允许在主来源找不到密钥时回退到其他选项。 默认搜索路径Airflow 的默认搜索路径如下:
您可以通过在 airflow.cfg 中配置 providers.Secrets 部分来定制搜索路径。 定制搜索路径要定制搜索路径,请按所需顺序指定后端: 此示例优先使用 AWS Secrets Manager,同时仍允许使用环境变量和其他后端作为回退。 Secrets Backend 配置正确配置 Secrets Backend 可确保无缝集成和安全检索密钥。以下是配置 Airflow 中 Secrets Backend 的一般步骤和示例: 配置的一般步骤
示例:配置 HashiCorp Vault 示例:配置 AWS Secrets Manager 其他配置示例Google Cloud Secret Manager Kubernetes Secrets Databricks Secret Scope 配置技巧
支持的核心后端Airflow 开箱即用地支持多个核心密钥后端。它们包括:
功能比较
社区提供的 Secrets Backend除了核心后端之外,Apache Airflow 社区还提供了额外的后端以实现扩展功能。这些后端作为 Airflow 提供程序包的一部分提供。 示例
优点
自建 Secrets Backend在内置或社区提供的后端不满足要求的场景中,您可以实现自定义的 Secrets Backend。 创建自定义后端的步骤要实现自定义 Secrets Backend,您必须创建一个继承自 BaseSecretsBackend 并实现其方法的类。以下是关键组件: 1. 初始化 (__init__) 定义后端的配置参数(例如,API 端点、身份验证令牌)。 2. 检索连接密钥 (get_conn_value) 此方法为给定的连接 ID 获取连接密钥。 3. 检索变量密钥 (get_variable) 此方法从后端检索存储的变量。 4. 检索配置密钥 (get_config) 此方法从后端检索配置选项。 创建自定义 Secrets Backend 的分步指南步骤 1:继承 BaseSecretsBackend 首先,从 Airflow 导入 BaseSecretsBackend 类并创建一个新的子类。 步骤 2:实现 get_conn_value get_conn_value 方法获取给定 conn_id 的连接详细信息。以下是一个示例: 步骤 3:实现 get_variable 此方法从后端检索变量的值。 步骤 4:实现 get_config 此方法从后端检索配置选项。 从自定义密钥后端获取配置值。 步骤 5:在 airflow.cfg 中注册自定义后端 实现自定义后端后,您需要在 Airflow 配置文件 (airflow.cfg) 中注册它。 适应非 Airflow 兼容的连接密钥格式许多密钥管理系统以不直接符合 Apache Airflow 预期结构的格式存储凭据。当用于连接、变量和配置时,Airflow 要求密钥遵循特定的架构。当使用存储密钥格式自定义或非标准格式的第三方密钥管理系统时,通常会出现此挑战。将这些密钥适配到与 Airflow 无缝配合,可确保工作流安全运行且不中断。 Airflow 的连接要求在 Airflow 中,连接定义了工作流中的任务如何与外部系统(例如数据库、云服务、API)进行交互。连接通常包含以下详细信息:
Airflow 连接示例 典型的 Airflow 连接以以下结构表示: 密钥后端通常以自定义格式存储密钥,这可能与 Airflow 的架构不同。例如:
适应不兼容密钥格式的挑战
适应密钥格式的策略将自定义键映射到 Airflow 键如果密钥后端使用非标准键名,请在后端键和 Airflow 期望的键之间创建映射。 示例:键映射 解析嵌套或层级数据如果后端以嵌套格式(例如 JSON)存储密钥,请编写一个解析器来提取所需的字段。 示例:解析 JSON 数据 解码编码的密钥对于编码的密钥,在 Airflow 中使用它们之前进行解码。Base64 是一种常见的编码格式。 示例:解码 Base64 密钥 捆绑密钥的自定义解析器如果多个密钥存储在单个键中,请使用自定义解析逻辑提取必要的值。 示例:解析捆绑密钥 在自定义 Secrets Backend 中实现适配器Airflow 允许用户通过继承 BaseSecretsBackend 来创建自定义 Secrets Backend。此功能可用于为不兼容的密钥格式实现适配器。 自定义 Secrets Backend 示例 适应密钥格式
通过了解可用选项、定制配置以及适应独特要求,组织可以增强安全性、简化管理并确保合规性,无论是利用核心后端、社区提供的解决方案还是自定义实现;一个实现良好的 Secrets Backend 是强大工作流编排的基石。 |
我们请求您订阅我们的新闻通讯以获取最新更新。