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 中作为新选项进行配置。

此条目有帮助吗?