跨账号架构下如何通过Airflow触发AWS ECS任务
跨账号Airflow触发ECS任务的角色配置解决方案
问题核心
你遇到的问题是跨账号角色信任配置不完整,导致账号A的role-a无法扮演账号B的role-b。主要涉及两个关键点:role-b的信任策略配置和role-a的权限策略配置。
正确配置步骤
1. 修正账号B中role-b的信任策略
不需要使用通配符加条件的复杂配置,直接将Principal指定为账号A的role-a的ARN即可,这样既安全又能避免会话后缀变化的问题:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowAccountARoleAToAssume", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::494531898320:role/role-a" }, "Action": "sts:AssumeRole" } ] }
如果需要支持账号A下多个角色,也可以用账号ID作为Principal,再通过条件限制仅允许role-a:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowAccountARoleAToAssume", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::494531898320:root" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "aws:PrincipalArn": "arn:aws:iam::494531898320:role/role-a" } } } ] }
2. 给账号A的role-a添加权限策略
这是你可能遗漏的关键步骤:role-a必须拥有sts:AssumeRole权限才能调用账号B的role-b。添加以下权限策略到role-a:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "arn:aws:iam::<账号B的ID>:role/role-b" } ] }
3. 验证配置
用role-a的身份执行以下命令测试是否能成功扮演role-b:
aws sts assume-role --role-arn arn:aws:iam::<账号B的ID>:role/role-b --role-session-name airflow-test
关键说明
- 不需要在role-b的权限策略中添加
sts:AssumeRole,该权限由信任策略控制,role-b的权限策略只需要保留运行ECS任务、访问ECR等业务所需权限即可。 - 原配置中用
*作为Principal加通配符条件的方式不生效,大概率是因为AWS的信任策略评估逻辑中,Principal的范围过大且条件匹配优先级问题,直接指定角色ARN的方式更可靠。
内容的提问来源于stack exchange,提问作者jyablonski
相关产品推荐
相关产品推荐

