气流 2.0 API 响应 403 禁止

Airflow 2.0 API response 403 Forbidden

我正在尝试通过 Airflow 2.0 REST API 触发一个新的 dag 运行。如果我登录到远程计算机上的 Airflow 网络服务器并转到 swagger 文档页面测试 API,则调用成功。如果我注销或者如果 API 调用是通过 Postman 或 curl 发送的,那么我会收到一条 403 禁止消息。无论我是否提供网络服务器用户名密码,在 curl 或邮递员中都会收到相同的 403 错误消息。

curl -X POST --user "admin:blabla" "http://10.0.0.3:7863/api/v1/dags/tutorial_taskflow_api_etl/dagRuns" -H  "accept: application/json" -H  "Content-Type: application/json" -d "{\"conf\":{},\"dag_run_id\":\"string5\"}"
{
  "detail": null,
  "status": 403,
  "title": "Forbidden",
  "type": "https://airflow.apache.org/docs/2.0.0/stable-rest-api-ref.html#section/Errors/PermissionDenied"
}

API 的安全性已更改为默认值,而不是 deny_all (auth_backend = airflow.api.auth.backend.default)。 airflow 的安装是使用 pip 使用 ubuntu 18 bionic 完成的。如果手动或计划触发,Dags 运行ning 没问题。数据库后端是postgres。

还尝试将 cookie 详细信息从 Chrome 复制到 postman 中以解决此问题,但没有成功。

这是上述两个调用在 Web 服务器上的日志。

airflowWebserver_container | 10.0.0.4 - - [05/Jan/2021:06:35:33 +0000] "POST /api/v1/dags/tutorial_taskflow_api_etl/dagRuns HTTP/1.1" 403 170 "http://10.0.0.3:7863/api/v1/ui/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36"
airflowWebserver_container | 10.0.0.4 - - [05/Jan/2021:06:35:07 +0000] "POST /api/v1/dags/tutorial_taskflow_api_etl/dagRuns HTTP/1.1" 409 251 "http://10.0.0.3:7863/api/v1/ui/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36"

@AmitSingh 是正确的。将安全设置为默认值仅适用于实验性 api。我在airflow中修改了相关配置,重启后在api路径中添加了'experimental'。请参阅 https://airflow.apache.org/docs/apache-airflow/stable/rest-api-ref.html

我正在为 Airflow v2.0 使用 basic_auth。 AIRFLOW__API__AUTH_BACKEND 环境变量应设置为 airflow.api.auth.backend.basic_auth。您将必须重新启动网络服务器容器。然后,您应该能够使用带有 --user 选项的 cURL 命令访问所有稳定的 API。

在 Airflow 2.0 中,似乎有一些错误。

如果您在 airflow.cfg 中设置此身份验证配置,则它不起作用。

auth_backend = airflow.api.auth.backend.basic_auth

但是将其设置为环境变量是可行的

AIRFLOW__API__AUTH_BACKEND: "airflow.api.auth.backend.basic_auth"

或许也很高兴知道:

You can only disable authentication for experimental API, not the stable REST API.

参见:https://airflow.apache.org/docs/apache-airflow/stable/security/api.html#disable-authentication