airflow通过restapi触发的网络大坑的解决办法

本帖记录airflow通过restapi触发任务遇到的报错,以及对应解决方法。

问题

        先前我测试是利用request模块向webserver发送的post请求(如果环境可以使用postman等测试工具的话会更方便些),方法如下:

url="http://10.*.*.*:8080/api/v1/dags/{}/dagRuns".format(dag_id)
res = request.post(url,data=json.dumps(data_info),auth=(user,password),headers=headers)

        通过百度网上遇到的情况以及相应的解决方法很少,存在遇到403错误的同学。但我这里是报错401,401的报错目前遇到的情况主要是和权限验证有关

解决措施

官方说明:

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的设置只允许设置1个值。在 2.3.0 中,auth_backend被更改为支持多个值的配置。如果要检查当前设置了哪些身份验证后端,可以使用以下示例中的命令。

$ 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 的身份验证。

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 编码,并通过 HTTP 标头发送,格式如下:Authorization

Authorization: Basic Base64(username:password)

下面是可用于验证设置的示例 curl 命令:

ENDPOINT_URL="http://localhost:8080/"
curl -X GET  \--user "username:password" \"${ENDPOINT_URL}/api/v1/pools"

请注意,即使Airflow 网络服务器可能正在使用另一个身份验证方法,但你仍然可以启用此设置以允许通过用户名进行 API 访问密码凭据。在此设置下,只有通过LDAP或通过命令airflow users create创建的用户才能通过 API 身份验证。

具体方法:

        这里我们设置为“基本身份验证”的认证方式,利用创建的用户信息进行API的访问。编辑airflow.cfg配置文件,更新选项auth_backend如下(相应的官方文档的参考说明可参见API — Airflow Documentation (apache.org)):

[api]
# Enables the deprecated experimental API. Please note that these APIs do not have access control.
# The authenticated user has full access.
#
# .. warning::
#
#   This `Experimental REST API <https://airflow.readthedocs.io/en/latest/rest-api-ref.html>`__ is
#   deprecated since version 2.0. Please consider using
#   `the Stable REST API <https://airflow.readthedocs.io/en/latest/stable-rest-api-ref.html>`__.
#   For more information on migration, see
#   `RELEASE_NOTES.rst <https://github.com/apache/airflow/blob/main/RELEASE_NOTES.rst>`_
enable_experimental_api = False# Comma separated list of auth backends to authenticate users of the API. See
# https://airflow.apache.org/docs/apache-airflow/stable/security/api.html for possible values.
# ("airflow.api.auth.backend.default" allows all requests for historic reasons)
# auth_backends = airflow.api.auth.backend.session
auth_backend = airflow.api.auth.backend.basic_auth# Used to set the maximum page limit for API requests
maximum_page_limit = 100# Used to set the default page limit when limit is zero. A default limit
# of 100 is set on OpenApi spec. However, this particular default limit
# only work when limit is set equal to zero(0) from API requests.
# If no limit is supplied, the OpenApi spec default is used.
fallback_page_limit = 100# The intended audience for JWT token credentials used for authorization. This value must match on the client and server sides. If empty, audience will not be tested.
# Example: google_oauth2_audience = project-id-random-value.apps.googleusercontent.com
google_oauth2_audience =# Path to Google Cloud Service Account key file (JSON). If omitted, authorization based on
# `the Application Default Credentials
# <https://cloud.google.com/docs/authentication/production#finding_credentials_automatically>`__ will
# be used.
# Example: google_key_path = /files/service-account-json
google_key_path =# Used in response to a preflight request to indicate which HTTP
# headers can be used when making the actual request. This header is
# the server side response to the browser's
# Access-Control-Request-Headers header.
access_control_allow_headers =# Specifies the method or methods allowed when accessing the resource.
access_control_allow_methods =# Indicates whether the response can be shared with requesting code from the given origins.
# Separate URLs with space.
access_control_allow_origins =

        更新完成后重启airflow webserver的相应服务即可。

参考文献

API — Airflow Documentation (apache.org)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/643638.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

springboot druid数据库配置密码加密

1.使用的druid版本 <!-- 阿里数据库连接池 --> <dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-3-starter</artifactId><version>1.2.21</version> </dependency> 2.配置文件 # Spring配置 …

141:vue+leaflet 利用高德逆地理编码,点击地图标记marker,popup地址信息

第141个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+leaflet中利用高德逆地理编码,点击地图标记marker,popup地址信息 。主要利用高德地图的api将坐标转化为地址,然后在点击的位置,弹出弹窗,在里面显示出地址信息。 直接复制下面的 vue+leaflet源代码,操作2分钟…

<网络安全>《4 网络安全产品之web应用防护系统》

1 基本概念 1.1 WAF Web应用防护系统&#xff08;也称为&#xff1a;网站应用级入侵防御系统。英文&#xff1a;Web Application Firewall&#xff0c;简称&#xff1a;WAF&#xff09;。一般作为网关设备&#xff0c;防护Web、Webmail服务器等。 1.2 本质 WAF的本质是Web应…

性能优化(CPU优化技术)-NEON 介绍

「发表于知乎专栏《移动端算法优化》」 本节主要介绍基本 SIMD 及其他的指令流与数据流的处理方式&#xff0c;NEON 的基本原理、指令以及与其他平台及硬件的对比。 &#x1f3ac;个人简介&#xff1a;一个全栈工程师的升级之路&#xff01; &#x1f4cb;个人专栏&#xff1a;…

Unity之Timeline教程

前言 Unity Timeline是Unity的一种时间轴编辑器工具&#xff0c;用于制作和管理游戏中的动画、剧情以及事件触发。它提供了直观的界面&#xff0c;使得开发者可以通过拖放操作轻松创建和编辑时间轴。 Timeline的使用 创建新的Timeline 在Unity中&#xff0c;选择菜单栏的 Wi…

在Spring Boot中整合MyBatis

第1步&#xff1a;添加依赖&#xff1a; 在pom.xml文件中添加MyBatis和MySQL JDBC驱动的依赖。如果你使用的是Maven&#xff0c;配置如下&#xff1a; <dependencies><!-- Spring Boot Starter Data JPA 可能已经包含了 spring-boot-starter-data-jdbc --><dep…

云计算入门——Linux 命令行入门

云计算入门——Linux 命令行入门 前些天发现了一个人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;最重要的屌图甚多&#xff0c;忍不住分享一下给大家。点击跳转到网站。 介绍 如今&#xff0c;我们许多人都熟悉计算机&#xff08;台式机和笔记本电…

Ant Design Vue详解a-tree-select使用树形选择器,递归渲染数据,点击选项回显,一二级菜单是否可选等问题

后台给的树形数据&#xff1a; {"code": 200,"data": [{"code": "jsd","children": [{"code": "hx","children": [],"name": "航向","id": 8,"libTable…

《WebKit 技术内幕》学习之十一(3):多媒体

3 音频 3.1 音频元素 说完视频之后&#xff0c;接下来就是HTML5中对音频的支持情况。音频支持不仅指对声音的播放&#xff0c;还包括对音频的编辑和合成&#xff0c;以及对乐器数字接口&#xff08;MIDI&#xff09;等的支持&#xff0c;下面逐次介绍并分析它们。 3.1.1 H…

代码随想录算法训练营第36天 |435. 无重叠区间 763.划分字母区间 56. 合并区间

目录 435. 无重叠区间 &#x1f4a1;解题思路 &#x1f4bb;实现代码 763.划分字母区间 &#x1f4a1;解题思路 &#x1f4bb;实现代码 56. 合并区间 &#x1f4a1;解题思路 &#x1f4bb;实现代码 435. 无重叠区间 题目链接&#xff1a;435. 无重叠区间 给定一个…

一文讲透Redis的LRU与LFU算法实现

深入解析Redis的LRU与LFU算法实现 一、前言 Redis是一款基于内存的高性能NoSQL数据库&#xff0c;数据都缓存在内存里&#xff0c; 这使得Redis可以每秒轻松地处理数万的读写请求。 相对于磁盘的容量&#xff0c;内存的空间一般都是有限的&#xff0c;为了避免Redis耗尽宿主…

【Go面试向】Go程序的执行顺序

【Go】Go程序的执行顺序 大家好 我是寸铁&#x1f44a; 总结了一篇Go程序的执行顺序的文章✨ 喜欢的小伙伴可以点点关注 &#x1f49d; Go程序内容 go程序通常包含: 包、常量、变量、init()、main()等元素 下面从这几个方面分别去梳理&#xff01; 包的执行顺序 程序中的包 …

Linux系统常用命令行指令

Linux系统是一种常用于开源项目开发的生产环境&#xff0c;因其免费、开源、安全、稳定的特点被广泛应用于手机、平板电脑、路由器、电视和电子游戏机等嵌入式系统中&#xff0c;能够更加简便地让用户知道系统是怎样工作的。前几日我安装好了Red Hat Enterprise Linux 9.0&…

Linux的常见指令和基本操作演绎【复习篇章一】

文章目录 前言下载安装 XShellXShell 下的复制粘贴热键操作01.ls指令tree 02.cd指令03.touch指令04.mkdir指令&#xff08;重要&#xff09;&#xff1a;05.rmdir指令 && rm 指令&#xff08;重要&#xff09;06.组合07.man指令&#xff08;重要&#xff09;&#xff1…

SpringMVC:企业级解读(二)

目录 八. 构建卓越JavaWeb应用&#xff1a;最佳实践与性能优化 1. 代码组织与规范 2. 全局异常处理与日志记录 3. 性能优化与安全性考虑 4. 分布式应用 5. 提高Spring MVC的开发效率和代码质量 九. 构建卓越用户体验&#xff1a;Themes 与 UI 组件集成 1. 主题与CSS预处…

《WebKit 技术内幕》学习之十一(4):多媒体

4 WebRTC 4.1 历史 相信读者都有过使用Tencent QQ或者FaceTime进行视频通话的经历&#xff0c;这样的应用场景相当典型和流行&#xff0c;但是基本上来说它们都是每个公司推出的私有产品&#xff0c;而且通信等协议也都是保密的&#xff0c;这使得一种产品的用户基本上不可能…

SpringBoot应用开发的jar包,怎样在服务器重启情况下,自启动,从而实现远程无人值守

1.编写启动脚本用于jar # 1、vim创建脚本vim startup.sh# 2、命令行模式下输入i# 3、添加以下内容 #!/bin/bashnohup java -Xms2048m -Xmx2048m -Xmn1024m -Xss1024k -Dfile.encodingUTF-8 -server -XX:HeapDumpOnOutOfMemoryError -jar XXX-api-1.0.0.jar > XXX-api.log 2…

【时间序列篇】基于LSTM的序列分类-Pytorch实现 part3 化为己用

系列文章目录 【时间序列篇】基于LSTM的序列分类-Pytorch实现 part1 案例复现 【时间序列篇】基于LSTM的序列分类-Pytorch实现 part2 自有数据集构建 【时间序列篇】基于LSTM的序列分类-Pytorch实现 part3 化为己用 在一个人体姿态估计的任务中&#xff0c;需要用深度学习模型…

Ubuntu 常用命令、docker 常用命令、unzip常用命令、tar常用命令

ubuntu 常用命令&#xff1a; 进入管理员模式&#xff1a; sudo su退出管理员模式&#xff1a; su <用户名>重启系统&#xff1a; rebootubuntu 复制文件夹下文件到其他文件夹下 cp -r source_folder/* destination_folder/删除文件夹下内容而不删除自身(进入到目录…

天天酷跑-C语言搭建童年游戏(easyx)

游戏索引 游戏名称&#xff1a;天天酷跑 游戏介绍&#xff1a; 本游戏是在B站博主<程序员Rock>的视频指导下完成 想学的更详细的小伙伴可以移步到<程序员Rock>视频 【程序员Rock】C语言项目&#xff1a;手写天天酷跑丨大一课程设计首选项目&#xff0c;手把手带你用…