ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

Apache Airflow AWS Auth Manager 配置实战:接入 IAM Identity Center 与 Amazon Verified Permissions

2026/9/12 22:03:19 拓冰建站 浏览量
Apache Airflow AWS Auth Manager 配置实战:接入 IAM Identity Center 与 Amazon Verified Permissions Apache Airflow AWS Auth Manager 配置实战接入 IAM Identity Center 与 Amazon Verified Permissions【免费下载链接】airflowApache Airflow - A platform to programmatically author, schedule, and monitor workflows项目地址: https://gitcode.com/GitHub_Trending/ai/airflow导读本指南以 Apache Airflow 官方仓库中 Amazon Provider 的 AWS auth manager 配置文档 为核心讲解如何将 Airflow 的认证与授权体系从默认的 Flask auth manager 切换为由 AWS 托管的 Auth Manager。读完本文你将掌握完整的配置项含义、airflow.cfg与环境变量两种配置方式、配套的 IAM Identity Center / Amazon Verified Permissions 前置依赖以及通过源码确认各配置项真实消费位置的方法可直接用于搭建一套以 AWS 账号体系为中心的 Airflow 环境。前置提醒AWS auth manager 当前仍处于 alpha/experimental 阶段接口与行为可能在后续版本中变化见 auth-manager 总览文档且仅兼容 Airflow 3.0.0 及以上版本源码中init()会显式抛出AirflowOptionalProviderFeatureException校验见 aws_auth_manager.py。AWS auth manager 使用 AWS IAM Identity Center 完成认证登录/登出使用 Amazon Verified Permissions 完成授权决策的架构示意。AWS Auth Manager 是什么在深入了解配置之前先明确 AWS auth manager 在整个 Airflow 中的角色。它实现 Airflow 的BaseAuthManager接口AwsAuthManager(BaseAuthManager[AwsAuthManagerUser])由两个 AWS 服务共同驱动AWS IAM Identity Center负责认证authentication即用户登录与登出。用户、组的定义与维护全部交给 Identity CenterAirflow 环境管理员无需再在 Airflow 内部维护账号Amazon Verified Permissions负责授权authorization即用户能否对某资源执行某操作的判定。所有权限策略以 Cedar 语言写在 AVP 的 policy store 中由 Airflow 环境管理员维护。因此使用 AWS auth manager 后Airflow 自身的用户与权限管理职责被完全外包给 AWS默认的 Flask auth manager 不再参与用户管理参见 环境管理文档。核心配置将 Auth Manager 切换为 AWS 实现要启用 AWS auth manager最核心的配置只有两处均位于 Airflow 配置中详见 config.rst方式一airflow.cfg[core] auth_manager airflow.providers.amazon.aws.auth_manager.aws_auth_manager.AwsAuthManager region_name region_name方式二环境变量export AIRFLOW__CORE__AUTH_MANAGERairflow.providers.amazon.aws.auth_manager.aws_auth_manager.AwsAuthManager export AIRFLOW__AWS_AUTH_MANAGER__REGION_NAMEregion_name配置项逐项说明配置项所属 Section说明代码中的消费位置auth_manager[core]指向AwsAuthManager类的完整模块路径Airflow 据此加载并实例化自定义认证管理器[core] auth_manager是 Airflow 内核级配置region_name[aws_auth_manager]AWS 区域。必须与IAM Identity Center与Amazon Verified Permissions两个服务实际部署的区域一致被VerifiedPermissionsHook与 CLI 客户端读取见 facade.py 与 avp_commands.py注意AIRFLOW__AWS_AUTH_MANAGER__REGION_NAME使用了 Airflow 标准的AIRFLOW__SECTION__KEY环境变量命名约定对应配置 section 名aws_auth_manager。该 section 的常量定义集中在 constants.py包含CONF_SECTION_NAME aws_auth_manager CONF_CONN_ID_KEY conn_id CONF_REGION_NAME_KEY region_name CONF_SAML_METADATA_URL_KEY saml_metadata_url CONF_AVP_POLICY_STORE_ID_KEY avp_policy_store_id关键约束所有组件配置必须一致原文档特别强调配置必须在运行 Airflow 各组件的所有主机/环境间保持一致——包括 Scheduler、Webserver、ECS Task 容器等。因为每个组件都会独立加载认证管理器并消费同一份配置任何一台机器上的差异都可能导致登录、授权行为不一致。这是生产部署中最容易踩坑的点。支撑配置让 AWS Auth Manager 真正跑起来的三类参数仅配置上面两行还不足以完成认证/授权闭环。根据同目录下的配套 setup 文档还需配置以下参数它们在[aws_auth_manager]与[api]section 下1.[api] base_url—— SAML 回调与登录重定向的基础 URL该值必须与 Identity Center 应用创建时填写的base_url一致本地运行示例为localhost:8080。源码中它被多处使用登录成功后重定向回该地址并写入 JWT cookie见 routes/login.py构造 SAML 单点登录发起 URLget_url_login将 base_url 与登录路由拼接见 aws_auth_manager.py。[api] base_url base_url2.[aws_auth_manager] saml_metadata_url—— IAM Identity Center SAML 元数据地址创建 Identity Center 应用时控制台会提供 IAM Identity Center SAML metadata file 的地址需回填到此配置。源码中该值为强制项conf.get_mandatory_value并会被OneLogin_Saml2_IdPMetadataParser.parse_remote远程拉取解析为 IdP 配置见 routes/login.py。[aws_auth_manager] saml_metadata_url saml_metadata_file_url3.[aws_auth_manager] avp_policy_store_id—— Amazon Verified Permissions 策略库 ID用于指定 Airflow 使用的 AVP policy store。该值也是强制项conf.get_mandatory_value见 facade.py所有授权请求都会携带policyStoreId发给 AVP。[aws_auth_manager] avp_policy_store_id avp_policy_store_id4.[aws_auth_manager] conn_id—— AWS 连接 ID可选VerifiedPermissionsHook会读取该配置来构建 AVP 客户端未配置时使用 Hook 默认连接见 facade.py用于控制访问 AVP 所用的 AWS 凭证来源。配置速查表环境变量形式export AIRFLOW__CORE__AUTH_MANAGERairflow.providers.amazon.aws.auth_manager.aws_auth_manager.AwsAuthManager export AIRFLOW__AWS_AUTH_MANAGER__REGION_NAMEregion_name export AIRFLOW__API__BASE_URLbase_url export AIRFLOW__AWS_AUTH_MANAGER__SAML_METADATA_URLsaml_metadata_file_url export AIRFLOW__AWS_AUTH_MANAGER__AVP_POLICY_STORE_IDavp_policy_store_id完整接入流程从 AWS 侧资源到 Airflow 配置配置不是孤立的它依赖 AWS 侧两套资源的就绪。完整接入链路如下各步骤细节分别见配套文档第一步配置 AWS IAM Identity Center认证侧按照 Identity Center 配置文档创建实例AWS auth manager 基于 SAML 2.0 与 Identity Center 交互因此必须使用Organization 级别实例仅该级别实例支持 SAML 2.0 应用创建应用在 IAM Identity Center 控制台的Applications → Customer managed → Add application中选择 I have an application I want to set up应用类型选SAML 2.0显示名建议为Airflow填写应用元数据关键与 Airflow 配置强关联复制IAM Identity Center SAML metadata file地址 → 回填到saml_metadata_urlApplication ACS URLbase_url/auth/login_callback对应 Airflow 的[api] base_urlApplication SAML audienceaws-auth-manager-saml-client与源码中 SP entityId 完全一致见 routes/login.py配置属性映射Attribute mappingsAWS auth manager 需要两个属性id和groups。使用默认 Identity Center 目录时映射如下id←${user:AD_GUID}格式basicgroups←${user:groups}格式basic这两个属性正是登录回调中构造用户对象的字段来源——attributes[id][0]作为 user_id、attributes[groups]作为组列表见 routes/login.py。第二步配置 Amazon Verified Permissions授权侧按照 Verified Permissions 配置文档创建 policy store推荐直接使用随 AWS auth manager 提供的 CLI 命令airflow aws-auth-manager init-avp该命令会幂等地创建 policy store以描述Airflow标识并自动写入最新 schema。若已存在同名 policy store出于安全考虑 CLI不会修改既有策略库而是提示手动更新 schemaSince an existing policy store with description ... has been found in Amazon Verified Permissions, the CLI made no changes to this policy store for security reasons. Any modification to this policy store must be done manually.也可在 AVP 控制台手动创建Create policy store → Empty policy store → 描述填Airflow按需更新 policy store schema仅当手动创建策略库、或既有 schema 与 schema.json 不一致时需要。Airflow 启动时若检测到 schema 版本不符会打印警告见 aws_auth_manager.py 的_check_avp_schema_version。执行airflow aws-auth-manager update-avp-schemaschema 校验逻辑在 facade.py通过get_schema拉取当前策略库 schema与本仓库内schema.json逐字节比对将 policy store ID 填入avp_policy_store_id完成配置。CLI 可用前提需要先将 AWS auth manager 设置为当前 auth manager即完成本文核心配置。CLI 实现位于 avp_commands.py通过AwsAuthManager.get_cli_commands()挂载到 Airflow CLI。配置背后授权请求是如何发起的理解配置项如何被消费有助于排查问题。从源码看每次授权决策都走同一条链路Airflow 各组件调用AwsAuthManager的is_authorized_*系列方法DAG、Connection、Pool、Variable、Asset、Backfill、Team、View 等见 aws_auth_manager.py请求被包装成IsAuthorizedRequest交给AwsAuthManagerAmazonVerifiedPermissionsFacadeFacade 从配置读取policyStoreId调用 AVP 的is_authorized或batch_is_authorized单次最多 30 个请求超过自动分块见 facade.pyAction ID 遵循资源类型.方法约定如Variable.GET当GET不带具体 entity_id 时会被转换为LIST见 entities.py——这也解释了管理策略中为何同时存在Configuration.GET与Configuration.LIST只有返回decision ALLOW才放行否则拒绝。值得一提的细节region_name同时被 Facade 与 CLI 使用若配置的区域与 AVP/IAM Identity Center 实际所在区域不一致授权与策略库管理都会失败——这正是原文档要求显式指定区域的原因。配置完成后的验证与日常管理验证登录配置完成后访问 Airflow UI 或${ENDPOINT_URL}/auth/login会被重定向到 AWS IAM Identity Center 登录页输入 Identity Center 用户凭证后回跳并种下 JWT cookie登录路由实现见 routes/login.py。管理用户与组在 IAM Identity Center 控制台管理用户Users与组Groups并在应用详情页的Assigned users and groups中显式分配可访问 Airflow 的用户/组——注意Identity Center 中定义的用户并不会自动获得 Airflow 访问权必须手动分配详见 环境管理文档。管理权限策略在 AVP 控制台选择 Airflow 的 policy store在Policies下用 Cedar 语言创建静态策略。典型策略示例完整清单见 manage/index.rst// 给特定用户全部权限按 user ID 而非用户名引用 permit( principal Airflow::User::aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee, action, resource ); // 给特定组只读权限等价于 Flask AppBuilder 的 Viewer 角色 permit( principal in Airflow::Group::aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee, action in [ Airflow::Action::Configuration.GET, Airflow::Action::Configuration.LIST, Airflow::Action::Dag.GET, Airflow::Action::Dag.LIST, Airflow::Action::Menu.MENU, Airflow::Action::Pool.GET, Airflow::Action::Pool.LIST, Airflow::Action::Variable.GET, Airflow::Action::Variable.LIST ], resource ); // 禁止特定用户访问敏感 DAGforbid 优先级高于 permit forbid( principal Airflow::User::aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee, action, resource in [Airflow::Dag::secret-dag-1, Airflow::Dag::secret-dag-2] );所有 principal / action / resource 的合法取值都定义在 policy store schema 中可在 AVP 控制台Schema页查看也可直接阅读仓库中的 schema.json。为 Airflow 公共 API 生成 JWT Token若需调用 Airflow 公共 REST API可访问${ENDPOINT_URL}/auth/login/token完成 Identity Center 登录后返回可用于 API 请求的访问令牌详见 token 文档实现上对应login_token路由与LoginResponse(access_tokentoken)分支见 routes/login.py。常见问题速查现象排查方向启动报 AWS auth manager is only compatible with Airflow versions 3.0.0Airflow 版本低于 3.0需升级启动警告 policy store schema 与最新版本不同执行airflow aws-auth-manager update-avp-schema或按文档手动更新 schema登录回调 500 / Failed to authenticate核对 ACS URL 是否等于base_url/auth/login_callback、saml_metadata_url是否可达、base_url是否全局一致授权全部拒绝检查avp_policy_store_id是否正确、用户/组是否已分配到 Airflow 应用、策略是否引用正确的 user/group IDCLI 找不到策略库或区域报错核对region_name与两个 AWS 服务实际区域一致延伸阅读AWS auth manager 总览架构介绍与全部文档索引配置 IAM Identity Center实例、应用与属性映射的完整控制台步骤配置 Amazon Verified Permissions策略库与 schema 管理管理用户与权限Cedar 策略示例全集核心实现aws_auth_manager.py、avp/facade.py、routes/login.py、cli/avp_commands.py【免费下载链接】airflowApache Airflow - A platform to programmatically author, schedule, and monitor workflows项目地址: https://gitcode.com/GitHub_Trending/ai/airflow创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考