API 身份验证¶
API 身份验证与 Web 身份验证分开处理。默认情况下,检查用户会话
[api]
auth_backends = airflow.api.auth.backend.session
在 1.10.11 版中更改:在 Airflow <1.10.11 中,默认设置是允许所有 API 请求在未经身份验证的情况下进行,但这会给 Web 服务器可公开访问时带来安全风险。
在 2.3.0 版中更改:在 Airflow <2.3.0 中,此设置是 auth_backend
,并且只允许一个值。在 2.3.0 中,它已更改为支持依次尝试的多个后端。
如果您想检查当前设置了哪些身份验证后端,可以使用 airflow config get-value api auth_backends
命令,如下面的示例所示。
$ airflow config get-value api auth_backends
airflow.api.auth.backend.basic_auth
禁用身份验证¶
如果您希望实验性 API 正常工作,并且知道在未经身份验证的情况下启用此功能的风险(或者如果您在 Airflow 前面有自己的身份验证层),则可以在 airflow.cfg
中设置以下内容
[api]
auth_backends = airflow.api.auth.backend.default
注意
您只能禁用实验性 API 的身份验证,而不能禁用稳定的 REST API 的身份验证。
有关 Python 和 Airflow 如何管理模块的详细信息,请参阅 模块管理。
Kerberos 身份验证¶
目前 API 支持 Kerberos 身份验证。
要启用 Kerberos 身份验证,请在配置中设置以下内容
[api]
auth_backends = airflow.api.auth.backend.kerberos_auth
[kerberos]
keytab = <KEYTAB>
Kerberos 服务配置为 airflow/fully.qualified.domainname@REALM
。确保此主体存在于密钥表文件中。
您必须确保使用 kerberos 完整用户名/领域来命名您的用户才能使其正常工作。这意味着您的用户名应为 user_name@KERBEROS-REALM
。
基本身份验证¶
基本用户名密码身份验证目前受 API 支持。这适用于通过 LDAP 登录或使用密码在 Airflow 元数据数据库中创建的用户。
要启用基本身份验证,请在配置中设置以下内容
[api]
auth_backends = airflow.api.auth.backend.basic_auth
用户名和密码需要进行 base64 编码,并通过 Authorization
HTTP 标头以下列格式发送
Authorization: Basic Base64(username:password)
以下是一个示例 curl 命令,您可以使用它来验证设置
ENDPOINT_URL="http://localhost:8080/"
curl -X GET \
--user "username:password" \
"${ENDPOINT_URL}/api/v1/pools"
请注意,即使 Airflow Web 服务器可能使用其他身份验证方法,您仍然可以启用此设置以允许通过用户名密码凭据访问 API。在此设置下,只有通过 LDAP 或 airflow users create
命令创建的用户才能通过 API 身份验证。
推出您自己的 API 身份验证¶
每个身份验证后端都定义为一个新的 Python 模块。它必须有 2 个已定义的方法
init_app(app: Flask)
- 在创建 Flask 应用程序时调用的函数,它允许您添加一个新视图。requires_authentication(fn: Callable)
- 一个装饰器,它允许在视图函数之前和之后或代替视图函数执行任意代码。
并且可能具有以下内容之一,以支持 CLI 的远程模式 使用的 API 客户端授权
函数
create_client_session() -> requests.Session
属性
CLIENT_AUTH: tuple[str, str] | requests.auth.AuthBase | None
在编写后端模块后,在 airflow.cfg
的 [api]
部分中的 auth_backends
键中提供完全限定的模块名称。
可以在 airflow.cfg
中将其他选项配置为您的身份验证后端,作为新选项。