You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过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的读取权限:
    1. 在Permissions模块点击Add
    2. 资源类型选择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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 06:22:39