AWS弹性容器服务(ECS)的ExecutionRole和TaskRole的区别

137

我正在使用AWS的CloudFormation,最近花了不少时间尝试弄清楚为什么我创建的角色并附加策略后无法使ECS任务向简单消息队列服务(SQS)发送消息。

我意识到我错误地将SQS权限策略附加到了执行角色(Execution Role)上,而应该将策略附加到任务角色(Task Role)上。我找不到好的文件来解释这两个角色之间的区别。有关这两个角色的CloudFormation文档在这里:ExecutionRoleTaskRole


3
"我最近花了相当多的时间",这话说得太贴近我的心情了!:-) - Alex Nauda
3个回答

161

参考文档,您可以看到执行角色是 IAM 角色,用于执行 ECS 操作,例如拉取映像并将应用程序日志存储在 CloudWatch 中。

任务角色是任务本身使用的 IAM 角色。例如,如果您的容器想要调用其他 AWS 服务(如 S3、SQS 等),则需要由任务角色来覆盖这些权限。

使用 TaskRole 的功能与在容器实例上的配置文件中使用访问密钥相同。以这种方式使用访问密钥不安全,被认为是非常糟糕的做法。 我在答案中包含此信息是因为很多人已经理解了访问密钥。


10
最佳实践是使用附加的 IAM 角色而不是本地存储的访问密钥。 - Chamin Wickramarathna
2
还有容器实例角色。需要注意的重要事项是,您的容器也可以自动使用这些角色。因此,最佳实践是至少拥有容器实例角色,并通过任务角色进行扩展(如果需要)。 - Marcin
最佳实践是什么,任务角色和任务执行角色应该是同一个角色还是两个不同的角色? - thnee
这是一个关于所描述的差异的良好入门 https://www.youtube.com/watch?v=nKhtSmYRfxs - lony

38

ECS任务执行角色是ECS代理(和容器实例)的功能,例如:

  • 从Amazon ECR拉取容器镜像
  • 使用awslogs日志驱动程序

ECS任务角色是任务本身内部的具体功能,例如:

  • 当您的实际代码运行时

2
执行角色是针对ECS服务的。任务角色是针对任务的。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,