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