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 中将其他选项配置为您的身份验证后端,作为新选项。

此条目是否有用?