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