我正在使用 AWS 的 CloudFormation,最近我花了相当多的时间试图弄清楚为什么我创建并附加策略的角色不允许我的 ECS 任务向简单队列服务 (SQS) 队列发送消息。
我意识到,当我应该将 SQS 权限策略附加到
Execution Role
时,我错误地将 SQS 权限策略附加到 Task Role
。我找不到很好的文档来解释这两个角色之间的区别。他们两个的 CloudFormation 文档如下:ExecutionRole 和 TaskRole
参考文档可以看到,执行角色是执行ECS操作的IAM角色,例如拉取镜像以及将应用程序日志存储到cloudwatch中。
TaskRole 是任务本身使用的 IAM 角色。例如,如果您的容器想要调用其他 AWS 服务,例如 S3、SQS 等,那么这些权限需要由 TaskRole 覆盖。
使用 TaskRole 在功能上与使用容器实例上的配置文件中的访问密钥相同。 以这种方式使用访问密钥并不安全,被认为是非常不好的做法。我将其包含在答案中,因为许多阅读本文的人已经了解访问密钥。
ECS任务执行角色是ECS代理(和容器实例)的能力,例如:
ECS 任务角色是任务本身内的特定功能,例如:
执行角色是针对ECS服务的。任务角色是针对任务的。