通过API触发Airflow DAG返回401 Unauthorized错误该如何处理
核心错误原因
当前请求同时配置了两处鉴权参数,触发了优先级冲突:手动设置的Authorization请求头使用了未替换的占位符内容,优先级高于--user参数,导致服务端接收到的鉴权凭证无效。
具体调整步骤
- 第一步:修正curl请求,删除冗余的手动鉴权头
--user参数会自动对用户名密码进行Base64编码并生成合法的Basic鉴权头,不需要手动配置。修正后的请求如下:
curl -H "Content-type: application/json" -H "Accept: application/json" -X GET --user "${LAMBDA_USER}:${LAMBDA_PWD}" "${ENDPOINT_URL}/api/v1/dags/sns_test/dagRuns"
- 第二步:确认Airflow API鉴权配置开启
Airflow 2.x默认关闭REST API的公开访问,需要登录部署Airflow的EC2实例,修改airflow.cfg配置文件:
[api] # 确认auth_backends配置为basic_auth,而非默认的deny_all auth_backends = airflow.api.auth.backend.basic_auth
配置修改完成后,重启Airflow Webserver服务生效。
- 第三步:验证凭证与变量有效性
- 执行
echo $LAMBDA_USERecho $LAMBDA_PWD确认shell变量已正确赋值,没有拼写错误 - 直接在浏览器访问
${ENDPOINT_URL}/api/v1/dags,输入lambda_user的用户名密码,确认可以正常返回结果,排除用户被锁定、密码错误的问题
- 执行
补充说明
如果调整后返回403错误,属于用户权限不足的问题,可以将用户角色调整为Op或者给当前User角色添加DAG读写的相关权限即可。
内容的提问来源于stack exchange,提问作者Ronak Shah
相关产品推荐
相关产品推荐

