FAB auth manager API 认证¶
注意
本指南仅适用于 FAB auth manager API。
API 的认证由所谓的认证后端处理。默认是检查用户会话
[fab]
auth_backends = airflow.providers.fab.auth_manager.api.auth.backend.session
如果你想检查当前设置的认证后端,可以使用 airflow config get-value fab auth_backends
命令,如下例所示。
$ airflow config get-value fab auth_backends
airflow.providers.fab.auth_manager.api.auth.backend.basic_auth
版本 3.0.0 中的变化: 在 Airflow 中,默认设置使用基于令牌的认证。这种方法独立于使用的 auth_backend
。默认设置是首先使用 Airflow public API 创建一个令牌 (JWT),然后在请求中使用此令牌访问 API。
Kerberos 认证¶
API 目前支持 Kerberos 认证,包括实验性支持和稳定支持。
要启用 Kerberos 认证,请在配置中设置以下内容:
[fab]
auth_backends = airflow.providers.fab.auth_manager.api.auth.backend.kerberos_auth
[kerberos]
keytab = <KEYTAB>
airflow Kerberos 服务配置为 airflow/fully.qualified.domainname@REALM
。请确保此主体存在于 Kerberos 数据库和 keytab 文件中。
你必须确保使用 kerberos 完整用户名/realm 来命名用户,以便其工作。这意味着你的用户名应该是 user_name@REALM
。
kinit user_name@REALM
ENDPOINT_URL="http://localhost:8080/"
curl -X GET \
--negotiate \ # enables Negotiate (SPNEGO) authentication
--service airflow \ # matches the `airflow` service name in the `airflow/fully.qualified.domainname@REALM` principal
--user : \
"${ENDPOINT_URL}/api/v1/pools"
注意
请记住,API 通过认证和访问控制进行保护。这意味着你的用户需要拥有具有必要相关权限的角色,否则你会收到 403 响应。
基本认证¶
API 目前支持基本用户名密码认证。这适用于通过 LDAP 登录或在 Airflow Metadata DB 中使用密码创建的用户。
要启用基本认证,请在配置中设置以下内容:
[fab]
auth_backends = airflow.providers.fab.auth_manager.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 webserver 可能使用另一种认证方法,你仍然可以启用此设置以允许通过用户名密码凭据访问 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
的 [fab]
部分的 auth_backends
键中提供完整的模块名称。
你的认证后端的附加选项可以在 airflow.cfg
中作为新选项进行配置。