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.providers.fab.auth_manager.api.auth.backend.basic_auth
Kerberos 身份验证¶
目前,API 支持 Kerberos 身份验证,包括实验性和稳定版本。
要启用 Kerberos 身份验证,请在配置中设置以下内容
[api]
auth_backends = airflow.providers.fab.auth_manager.api.auth.backend.kerberos_auth
[kerberos]
keytab = <KEYTAB>
Airflow Kerberos 服务配置为 airflow/fully.qualified.domainname@REALM
。确保此主体 在 Kerberos 数据库和密钥表文件中都存在。
您必须确保使用 Kerberos 的完整用户名/领域来命名用户才能使其工作。这意味着您的用户名应该是 user_name@REALM
。
kinit user_name@REALM
ENDPOINT_URL="https://127.0.0.1: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 元数据数据库中使用密码创建的用户。
要启用基本身份验证,请在配置中设置以下内容
[api]
auth_backends = airflow.providers.fab.auth_manager.api.auth.backend.basic_auth
用户名和密码需要进行 base64 编码,并通过 Authorization
HTTP 标头以以下格式发送
Authorization: Basic Base64(username:password)
这是一个示例 curl 命令,您可以用来验证设置
ENDPOINT_URL="https://127.0.0.1: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
中配置为新选项。