ECS Fargate 任务未应用角色

Dam*_*ien 4 amazon-web-services amazon-ecs aws-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 环境变量。

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

asa*_*voy 5

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

具体来说,有一个环境变量被调用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
Run Code Online (Sandbox Code Playgroud)

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

# To export the env var for use by child processes
export AWS_CONTAINER_CREDENTIALS_RELATIVE_URI
Run Code Online (Sandbox Code Playgroud)

参考: