背景:
我正在尝试为账户 B 中的 ECS 任务授予访问权限,以从账户 A 中的 DynamoDB 表中提取数据。
理论上,这可以通过以下方式正常工作:(1) 在账户 A 中创建一个允许账户 B 担任的角色(使用配对的外部 ID),然后 (2) 授予该角色对所需 DynamoDB 表的访问权限。
问题:
当 ECS 中运行的进程承担 ECS 角色(账户 B)时,它会创建该角色的唯一实例,该实例显然不能成为账户中主体语句的目标。如果我尝试授予对底层角色的访问权限,那显然没有影响。
我可以强制 ECS 使用我可以作为委托人授予的原始角色,而不是一个显然不能承担其他角色的临时集吗?
我能想到的唯一解决方法是使用编程 API 凭证创建一个新用户,将这些凭证移交给 ECS 任务,然后让 ECS 任务用属于 AWS 密钥对的角色覆盖它自己的角色。不过,据我所知,这绝对是一种反模式,它会带来这些凭据被泄露的风险。
有没有办法在不求助于手动创建的用户和手动传递 AWS 凭据的情况下做到这一点?
附加信息:
- 我可以授予此委托人
arn:aws:iam::AcctB****:role/myrole
,但 ECS 任务在运行时使用此委托人:arn:aws:sts::AcctB****:assumed-role/myrole/45716b8c-40c8-4ca7-b346-1ff4ee94eb53
. - 错误信息是:
An error occurred (AccessDenied) when calling the AssumeRole operation: User: arn:aws:sts::AcctB****:assumed-role/myrole/45716b8c-40c8-4ca7-b346-1ff4ee94eb53 is not authorized to perform: sts:AssumeRole on resource: arn:aws:iam::AcctA****:role/ExternalRole