Secrets 后端¶
自版本 1.10.10 加入。
除了从环境变量或元数据数据库中检索连接和变量外,您还可以启用备用 secrets 后端,通过 Apache Airflow 社区提供的后端 从 Secret 后端 中检索 Airflow 连接或 Airflow 变量。
注意
Airflow UI 仅显示存储在元数据数据库中的连接和变量,而不显示通过其他任何方式存储的。如果您使用备用 secrets 后端,请在您的后端中查看变量和连接的值。
您还可以从 Secrets 后端获取包含敏感数据的 Airflow 配置。更多详情请参见 设置配置选项。
搜索路径¶
查找连接/变量时,Airflow 默认首先搜索环境变量,其次搜索元数据数据库。
如果您启用备用 secrets 后端,它将首先被搜索,其次是环境变量,然后是元数据数据库。此搜索顺序不可配置。不过,在某些备用 secrets 后端中,您可能可以选择过滤在 secret 后端中搜索哪些连接/变量/配置。请查阅您正在使用的 secret 后端的文档,查看是否有此选项。
另一方面,如果定义了 worker secrets 后端,查找顺序会优先搜索 worker secrets 后端,然后才是 secrets 后端。
警告
当使用环境变量或备用 secrets 后端存储 secrets 或变量时,可能会发生键冲突。如果在后端之间出现重复的键,所有写入操作都会更新元数据数据库中的值,但所有读取操作将返回按自定义后端、然后是环境变量、最后是元数据数据库的顺序找到的第一个匹配项。
配置¶
配置的 [secrets]
部分包含以下选项
[secrets]
backend =
backend_kwargs =
将 backend
设置为您要启用的后端的完全限定类名。
您可以提供 json 格式的 backend_kwargs
,它将作为 kwargs 传递给您的 secrets 后端的 __init__
方法。
如果您想检查当前设置的是哪个 secret 后端,可以使用如下示例所示的 airflow config get-value secrets backend
命令。
$ airflow config get-value secrets backend
airflow.providers.google.cloud.secrets.secret_manager.CloudSecretManagerBackend
Worker 特有配置¶
上述部分介绍了所有 Airflow 组件的通用配置选项。但在 Airflow 3 中,如果您想为 worker 配置单独的 secrets 后端,可以使用以下选项:
[workers]
secrets_backend =
secrets_backend_kwargs =
将 secrets_backend
设置为您要启用的后端的完全限定类名。
您可以提供 json 格式的 secrets_backend_kwargs
,它将作为 kwargs 传递给 worker secrets 后端的 __init__
方法。
如果您想检查当前设置的是哪个 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 社区还发布社区开发的 Provider(Provider),其中一些也提供了扩展 Apache Airflow secret 后端能力的 handler。您可以在 Secret 后端 中查看所有这些 provider。
开发自己的 Secrets 后端¶
secrets 后端是 airflow.secrets.base_secrets.BaseSecretsBackend
的子类,并且必须实现 get_connection()
或 get_conn_value()
来检索连接,实现 get_variable()
来检索变量,实现 get_config()
来检索 Airflow 配置。
编写完后端类后,在 airflow.cfg
的 [secrets]
部分的 backend
键中提供完全限定类名。
您的 SecretsBackend 的额外参数可以在 airflow.cfg
中配置,通过向 backend_kwargs
提供 JSON 字符串,该字符串将传递给您的 SecretsBackend 的 __init__
方法。更多详情请参见 配置,示例请参见 SSM Parameter Store。
适配非 Airflow 兼容的连接 Secret 格式¶
Secret 后端的默认实现要求使用 Airflow 特定的格式来存储连接的 secrets。目前大多数社区提供的实现要求连接以 JSON 或 Airflow 连接 URI 格式存储(参见 Secret 后端)。然而,有些组织可能需要以其他方式存储凭据(密码/token 等)。例如,如果同一凭据存储需要用于多个数据平台,或者您正在使用的服务具有内置的凭据轮换机制,但该机制与 Airflow 特定格式不兼容。在这种情况下,您需要按照前一章所述,开发自己的 secret 后端,可能需要扩展现有的 secrets 后端并使其适应您组织使用的方案。