如何通过Assume Role限制次级账户IAM用户仅查看MWAA指定DAG
MWAA Airflow UI DAG权限限制问题解决方法
问题背景
主账户S3存储中,DAG文件分别存放在s3://input-read/dags/domainA/*.py和s3://input-read/dags/domainB/*.py,MWAA实例的DAG路径配置为s3://input-read/dags,主账户登录Airflow UI可正常查看所有DAG。
次级账户的IAM用户已通过Assume Role获得仅访问domainA文件夹及对象的权限,且被授权访问主账户的MWAA实例,但该用户登录Airflow UI仍能看到全部DAG。已配置的Airflow访问策略如下:
{ "Sid": "AllowAirflow", "Effect": "Allow", "Action": [ "airflow:ListEnvironments", "airflow:GetEnvironment", "airflow:ListTagsForResource" ], "Resource": "*" }, { "Effect": "Allow", "Action": "airflow:CreateWebLoginToken", "Resource": [ "arn:aws:airflow:us-east-1:[account-id]:role/MyAirflowEnvironment/User" ] }
同时已在Airflow UI中创建对应角色,但问题仍存在。
解决方法及提示
核心原因说明
MWAA的Airflow UI展示的DAG列表由托管调度器控制,调度器拥有访问全部配置DAG路径的权限,用户自身的S3权限仅影响操作DAG时的底层资源访问(如查看日志、触发DAG的S3操作),不直接控制DAG的可见性。这是导致次级用户能看到所有DAG的根本原因。
方案1:使用Airflow RBAC精细权限控制
这是最直接的解决方式,通过Airflow内置的角色权限系统限制DAG可见范围:
- 进入Airflow UI的
Security > Roles页面,找到为次级用户创建的角色 - 撤销该角色的全局
DAG: Read权限,改为仅添加针对domainA下DAG的读取权限:- 在
Permissions模块点击Add - 资源类型选择
DAG,资源名称填写domainA.*(匹配domainA下所有DAG),权限选择can_read
- 在
- 确保该角色未继承任何包含全局DAG读取权限的父角色
方案2:拆分MWAA实例或DAG路径
如果RBAC控制无法满足需求,可从资源隔离角度解决:
- 为domainA和domainB分别创建独立的MWAA实例,各自配置对应的DAG路径(
s3://input-read/dags/domainA和s3://input-read/dags/domainB) - 次级账户仅被授权访问domainA对应的MWAA实例,从根源上限制可见的DAG范围
补充检查项
- 核实次级用户Assume的Role是否确实无
s3://input-read/dags/domainB/*的访问权限,避免IAM配置疏漏 - 确认Airflow UI中次级用户仅关联了目标权限角色,未被添加到其他拥有全局DAG权限的角色组
- 若使用Airflow 2.x及以上版本,确保已开启
Fine-grained Access Control,这是实现DAG级权限控制的前提
内容的提问来源于stack exchange,提问作者whatsinthename
相关产品推荐
相关产品推荐

