Secrets 后端
在 1.10.10 版中添加。
除了从环境变量或元数据仓库数据库检索连接和变量之外,您还可以启用替代 secrets 后端,通过 Apache Airflow Community 提供的后端 在 Secret 后端 中检索 Airflow 连接或 Airflow 变量。
注意
Airflow UI 只显示存储在元数据数据库中的连接和变量,而不显示通过其他方式存储的。如果您使用了替代 secrets 后端,请在您的后端内部查看变量和连接的值。
您也可以从 Secrets 后端获取包含敏感数据的 Airflow 配置。详情请参见 设置配置选项。
搜索路径
在查找连接/变量时,默认情况下 Airflow 会先搜索环境变量,再搜索元数据仓库数据库。
如果您启用了替代 secrets 后端,它会被首先搜索,其次是环境变量,最后是元数据仓库。此搜索顺序不可配置。不过,在某些替代 secrets 后端中,您可能可以选择过滤在 secret 后端中搜索哪些连接/变量/配置。请查看您所使用的 secret 后端文档,了解是否提供此类选项。
另一方面,如果为 worker 定义了 secrets 后端,则查找顺序会优先使用 worker 的 secrets 后端,其次才是全局的 secrets 后端。
警告
使用环境变量或替代 secrets 后端存储 secret 或变量时,可能会产生键冲突。如果在不同后端之间出现重复键,所有写入操作都会更新元数据仓库中的值,但读取操作会按以下顺序返回第一个匹配的键:自定义后端 → 环境变量 → 元数据仓库。
配置
The [secrets] 部分包含以下选项
[secrets]
backend =
backend_kwargs =
将 backend 设置为您想启用的后端的全限定类名。
您可以使用 JSON 提供 backend_kwargs,它将作为关键字参数传递给您 secrets 后端的 __init__ 方法。
如果想检查当前设置的 secret 后端是哪一个,可以使用如下示例中的命令:airflow config get-value secrets backend。
$ airflow config get-value secrets backend
airflow.providers.google.cloud.secrets.secret_manager.CloudSecretManagerBackend
设置单独的后端关键字参数
与其将所有关键字参数编码为 JSON 块,不如使用 AIRFLOW__SECRETS__BACKEND_KWARG__<KEY> 前缀将每个参数设置为单独的环境变量。
# These two are equivalent:
export AIRFLOW__SECRETS__BACKEND_KWARGS='{"role_id": "abc", "secret_id": "xyz"}'
# or individually (useful for K8s Secrets):
export AIRFLOW__SECRETS__BACKEND_KWARG__ROLE_ID=abc
export AIRFLOW__SECRETS__BACKEND_KWARG__SECRET_ID=xyz
按键的变量会覆盖 BACKEND_KWARGS 中相同键的值。值为原始字符串(不进行 JSON 解析)。对于 worker,请使用 AIRFLOW__WORKERS__SECRETS_BACKEND_KWARG__<KEY> 前缀。
注意
这些环境变量在启动日志中会被掩码,方式与 BACKEND_KWARGS 相同。
Worker(工作节点)特定配置
以上章节覆盖了所有 Airflow 组件的通用配置选项。但在 Airflow 3 中,如果您想为 worker 配置单独的 secrets 后端,可以使用以下方式:
[workers]
secrets_backend =
secrets_backend_kwargs =
将 secrets_backend 设置为您希望启用的后端的全限定类名。
您可以使用 JSON 提供 secrets_backend_kwargs,它将作为关键字参数传递给 worker 的 secrets 后端的 __init__ 方法。
如果想检查当前为 worker 设置的 secret 后端是哪一个,可使用如下示例中的命令:airflow config get-value workers secrets_backend。
$ airflow config get-value workers secrets_backend
airflow.providers.google.cloud.secrets.secret_manager.CloudSecretManagerBackend
支持的核心后端
Apache Airflow 社区提供的 secret 后端
Apache Airflow 社区还发布了社区开发的提供者(Providers),其中一些也提供了能够扩展 Apache Airflow secret 后端功能的处理器。您可以在 Secret 后端 页面看到所有这些提供者。
自行实现 secret 后端
secret 后端是 airflow.secrets.base_secrets.BaseSecretsBackend 的子类,必须实现 get_connection() 或 get_conn_value() 以检索连接,get_variable() 以检索变量,及 get_config() 以检索 Airflow 配置。
编写完后端类后,在 airflow.cfg 的 [secrets] 部分中,将完整限定的类名填入 backend 键。
可以通过向 backend_kwargs 提供 JSON 字符串的方式,在 airflow.cfg 中配置对您的 SecretsBackend 的附加参数,这些参数将在实例化时传递给 __init__。更多细节请参见 配置,以及 SSM 参数存储 示例。
适配非 Airflow 兼容的连接 secret 格式
默认的 Secret 后端实现要求使用 Airflow 特有的格式来存储连接的 secret。当前大多数社区提供的实现都要求以 JSON 或 Airflow Connection URI 格式存储连接(参见 Secret 后端)。然而,一些组织可能需要以其他方式存储凭证(密码/令牌等),例如需要将同一凭证库用于多个数据平台,或使用自带凭证轮转机制且不兼容 Airflow 格式的服务。此时,您需要按照前面章节的说明自行实现 secret 后端,或在已有后端之上扩展并适配贵组织使用的方案。