尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Apache Airflow 使用 AWS auth manager 生成 JWT Token 调用公共 API 实战指南

Apache Airflow 使用 AWS auth manager 生成 JWT Token 调用公共 API 实战指南 Apache Airflow 使用 AWS auth manager 生成 JWT Token 调用公共 API 实战指南【免费下载链接】airflowApache Airflow - A platform to programmatically author, schedule, and monitor workflows项目地址: https://gitcode.com/GitHub_Trending/ai/airflow本文基于 Apache Airflow 仓库中 providers/amazon/docs/auth-manager/token.rst 编写。该指南适用于已配置AWS auth managerAwsAuthManager的 Airflow 环境当你想以编程方式调用 Airflow 公共 APIPublic API时必须先获取 JWT Token。本文完整讲解通过 AWS IAM Identity Center 登录生成 Token 的两步流程并结合仓库源码剖析其背后的 SAML 2.0 认证与 JWT 签发机制帮助你掌握完整的 Token 获取与 API 调用链路。适用前提你的环境必须启用 AWS auth manager本指南仅适用于已将 Airflow 的认证管理器配置为 AWS auth manager 的环境也就是在 Airflow 配置中设置了[core] auth_manager airflow.providers.amazon.aws.auth_manager.aws_auth_manager.AwsAuthManager或者通过环境变量配置export AIRFLOW__CORE__AUTH_MANAGERairflow.providers.amazon.aws.auth_manager.aws_auth_manager.AwsAuthManager如果当前环境使用的是默认认证管理器或其他认证方式本指南中的/auth/login/token流程不适用。为什么需要 JWT TokenAirflow 公共 APIStable REST API详见 airflow-core/docs/stable-rest-api-ref.rst要求调用方携带有效的 JWT Token 进行身份认证。有了 Token 之后你可以将其放进 API 请求中即可完成 DAG 触发、任务状态查询等编程式操作。核心步骤通过 AWS IAM Identity Center 登录生成 Token第 1 步访问登录端点在浏览器中打开${ENDPOINT_URL}/auth/login/token其中${ENDPOINT_URL}是 Airflow API 的基础地址对应配置项[api] base_url也就是AIRFLOW__API__BASE_URL。访问该地址后Airflow 会返回307 重定向把你带到 AWS IAM Identity Center 的登录页面。第 2 步输入 IAM Identity Center 用户凭证并提交在 AWS IAM Identity Center 登录页输入你的用户凭证并提交。认证成功后会经过 SAML 断言回跳Assertion Consumer Service最终返回一个可直接用于 Airflow 公共 API 请求的 Token。深入原理登录路由与 JWT 签发链路要理解这两个步骤背后发生了什么可以查看 AWS auth manager 的登录路由实现providers/amazon/src/airflow/providers/amazon/aws/auth_manager/routes/login.py。路由入口GET /auth/login/token在 login.py 中login_token路由负责发起认证并创建 Tokenlogin_router.get(/login/token) def login_token(request: Request) - RedirectResponse: Initiate the authentication to create a token. saml_auth _init_saml_auth(request) callback_url saml_auth.login(login-token) return RedirectResponse(urlcallback_url)其中_init_saml_auth(request)会读取配置[api] base_url作为 Service ProviderSP地址并使用[aws_auth_manager] saml_metadata_url解析 IdPAWS IAM Identity Center的 SAML 元数据saml_auth.login(login-token)生成带RelayStatelogin-token的 SAML 认证请求并返回 IdP 登录页地址最终以RedirectResponseHTTP 307重定向到 AWS IAM Identity Center 登录页面——这与单元测试 providers/amazon/tests/unit/amazon/aws/auth_manager/routes/test_login.py 中断言status_code 307且location指向 IdP 的行为一致。登录路由统一挂载在AUTH_MANAGER_FASTAPI_APP_PREFIX即/api/v1/auth见 airflow-core/src/airflow/api_fastapi/app.py之下因此完整路径为${ENDPOINT_URL}/api/v1/auth/login/token。AwsAuthManager通过 get_fastapi_app() 将login_router注册进 FastAPI 子应用这套登录路由仅在启用 AWS auth manager 时可用。回调与 Token 签发POST /auth/login_callback用户提交 IAM Identity Center 凭证后IdP 通过 HTTP-POST 绑定将SAMLResponse与RelayState回跳到login_callback端点其 URL 在_init_saml_auth中被配置为${base_url}/api/v1/auth/login_callback见 login.py。在 login_callback 中调用saml_auth.process_response()校验 SAML 断言若校验失败is_authenticated()为False则返回 HTTP 500从 SAML 属性中提取用户信息构造AwsAuthManagerUseruser_id、groups、username、email见 providers/amazon/src/airflow/providers/amazon/aws/auth_manager/user.py调用get_auth_manager().generate_jwt(user)签发 JWT底层实现在 airflow-core/src/airflow/api_fastapi/auth/managers/base_auth_manager.py默认过期时间取配置[api_auth] jwt_expiration_time依据RelayState分发结果RelayState login-token返回LoginResponse(access_tokentoken)即本次指南要获取的 Token响应模型见 providers/amazon/src/airflow/providers/amazon/aws/auth_manager/datamodels/login.pyRelayState login-redirect将 JWT 写入_tokenCookie 并 303 重定向回 Airflow UIWeb 登录场景。系统级测试 providers/amazon/tests/system/amazon/aws/tests/test_aws_auth_manager.py 验证了login-token分支返回 200 且响应体包含非空的access_token。Token 的用途携带到 Airflow 公共 API 请求中拿到access_token后在调用 Airflow 公共 API 时将其放入 HTTP 请求头Authorization: Bearer access_tokenAirflow UI 的自动生成客户端同样是使用Bearer ${token}的形式携带凭证见 airflow-core/src/airflow/ui/openapi-gen/requests/core/request.ts。例如使用curl获取 DAG 列表curl -H Authorization: Bearer access_token \ ${ENDPOINT_URL}/api/v1/dags前置配置让 Token 流程跑通的必要条件Token 流程依赖 AWS auth manager 的完整配置缺少任何一项都会导致认证失败。核心配置项包括配置节配置键说明[core]auth_manager必须为airflow.providers.amazon.aws.auth_manager.aws_auth_manager.AwsAuthManager[api]base_urlAirflow UI/API 基础地址如http://localhost:8080用于生成 SP 地址与回调地址[aws_auth_manager]saml_metadata_urlAWS IAM Identity Center 应用页面上复制的 SAML metadata 文件地址[aws_auth_manager]region_nameAWS 区域Identity Center 与 Verified Permissions 所在区域对应环境变量写法export AIRFLOW__API__BASE_URLbase_url export AIRFLOW__AWS_AUTH_MANAGER__SAML_METADATA_URLsaml_metadata_file_url export AIRFLOW__AWS_AUTH_MANAGER__REGION_NAMEregion_name在 AWS IAM Identity Center 控制台创建应用时需要把Application ACS URL设置为base_url/auth/login_callback、Application SAML audience设置为aws-auth-manager-saml-client并配置id与groups两个属性映射详见 providers/amazon/docs/auth-manager/setup/identity-center.rst 与 providers/amazon/docs/auth-manager/setup/config.rst。此外还需安装 SAML 依赖库pip install apache-airflow-providers-amazon[python3-saml]从源码看缺少该依赖时 login.py 会直接抛出 ImportError 并提示安装命令依赖清单定义在 providers/amazon/pyproject.toml。注意事项AWS auth manager 目前处于 alpha/experimental 阶段行为可能随时变化配置项必须在所有运行 Airflow 组件的环境Scheduler、Webserver 等保持一致${ENDPOINT_URL}需要按你的实际部署地址替换本地运行通常是http://localhost:8080。总结在启用 AWS auth manager 的 Airflow 环境中获取 JWT Token 只需两步访问${ENDPOINT_URL}/auth/login/token跳转到 AWS IAM Identity Center 登录提交凭证后即可从响应中拿到access_token。其底层是完整的 SAML 2.0 认证流加 JWT 签发/auth/login/token发起认证并重定向到 IdP/auth/login_callback校验 SAML 断言、构造用户并调用generate_jwt签发 Token。拿到 Token 后以Authorization: Bearer token请求头调用 Airflow 公共 API 即可完成编程式操作。【免费下载链接】airflowApache Airflow - A platform to programmatically author, schedule, and monitor workflows项目地址: https://gitcode.com/GitHub_Trending/ai/airflow创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表