通过假设角色限制消费者账户中的MWAA实例中的dags

1 投票
1 回答
27 浏览
提问于 2025-04-14 16:16

我在主根账户下有以下位置的dags:

s3://input-read/dags/domainA/*.py  
s3://input-read/dags/domainB/*.py   

而在MWAA实例中传递的dags位置是s3://input-read/dags

当我从主账户打开Airflow界面时,它显示了两个文件夹中的dags,这样是对的。

另外,我在次级账户中有一个IAM用户,我只给了他访问domainA文件夹及其下属对象的权限,通过assume role的方式,这个设置运行得很好。

我还给了这个IAM用户访问主账户的MWAA实例的权限。但是问题是,当我在次级账户的IAM用户中打开Airflow界面时,我仍然能看到所有的dags,这不应该发生,因为我在对象级别上已经限制了对其他文件夹的访问。所以这个IAM用户应该只能看到来自domainA文件夹的dags。

下面是主账户的IAM用户访问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界面中创建了一个角色,详细信息可以在下面的截图中看到:

在此输入图片描述

在此输入图片描述

但是我在IAM用户账户中仍然能看到所有的dags。

那么我该如何解决这个问题呢?任何提示也会有帮助。谢谢!

1 个回答

1

解决这个问题的逐步指南:

  1. 首先,dags的路径在MWAA实例中必须简单,格式为s3://bucket-name/dags。这样可以自动列出所有子文件夹中的dags。目前没有其他路径格式能正常工作。你可以在dags下创建多个子文件夹,比如domainA、domainB等等,但路径中不能使用通配符,这样是没有效果的。
  2. 即使你限制了文件夹路径的访问权限,并且把MWAA实例分享给了IAM用户,Airflow UI仍然会列出所有的dags。即使特定用户无法通过assumed role console link查看s3中的对象,依然会出现这种情况。不太明白为什么在对象级别的限制还需要在Airflow方面做额外的步骤。不知道有没有更好的方法。
  3. Primary account > Airflow UI -> List Roles -> Modified User role,然后去掉该角色对所有dags的读取权限。按照我第一张截图中的方式,为User角色指定自定义权限。你也可以创建一个自定义角色,但你需要知道需要哪些权限,因为如果权限不足,IAM用户将无法打开Airflow UI。由于我对权限不太确定,所以选择修改User角色,去掉对所有dags的读取权限,并将该角色附加到List users部分的assumed-role用户上。

如果你有多个用户,最好的方法是创建多个角色,并将它们附加到特定的assumed-role-user上。

我不太确定是否还有更好的方法来处理这种情况。

撰写回答