首页 > 解决方案 > ECS Fargate 任务未应用角色

问题描述

我有一个附加角色的 ECS Fargate 任务正在运行。此角色具有 S3FullAccess 策略(以及 AssumeRole 与 ECS 服务的可信合作伙伴关系)。

但是,当尝试将对象放入存储桶时,我收到拒绝访问错误。我已尝试启动 EC2 实例并附加相同的角色,并且可以毫无问题地放入存储桶。

对我来说,这个角色似乎与任务无关。我错过了一个重要的步骤吗?我无法通过 SSH 连接到实例,因为它是 Fargate。

更新: 我提取了在我的本地计算机上设置并使用它们的 AWS_ACCESS_KEY_ID 和 AWS_SECRET_ACCESS_KEY 环境变量。我在那里也遇到了“拒绝访问”问题,这意味着(对我而言)我为该角色设置的任何策略都没有应用于该任务。

任何可以帮助任何事情的人都会受到赞赏!

变通方法: 一个简单的变通方法是创建一个具有编程访问权限的 IAM 用户,并在您的任务定义中设置 AWS_ACCESS_KEY_ID 和 AWS_SECRET_ACCESS_KEY 环境变量。

这有效,但不能解释根本问题。

标签: amazon-web-servicesamazon-ecsaws-fargate

解决方案


我刚刚遇到了类似的问题,我认为这可能是由于您的程序无法访问实例元数据服务公开的角色凭据。

具体来说,有一个名为的环境变量AWS_CONTAINER_CREDENTIALS_RELATIVE_URI,其值是 AWS 开发工具包使用任务角色所需的值。ECS 容器代理在您的任务启动时设置它,并且它暴露给进程 ID 为 1 的容器的主进程。如果您的程序没有这样运行,它可能看不到 env var 并因此解释访问被拒绝错误。

根据您的程序运行方式,将有不同的方式来共享 env var。

我在 ssh 登录 shell 中遇到了问题(顺便说一句,您可以通过运行 sshd ssh 进入 Fargate 任务)所以在我的 Docker 入口点脚本中我插入了某处:

# To share the env var with login shells
echo "export AWS_CONTAINER_CREDENTIALS_RELATIVE_URI=$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI" >> /root/.profile

在其他情况下,添加到 Docker 入口点脚本可能会起作用:

# To export the env var for use by child processes
export AWS_CONTAINER_CREDENTIALS_RELATIVE_URI

参考:


推荐阅读