task/container 中的 AWS cli 使用实例角色策略而不是任务角色

AWS cli within task/container uses instance role policy and not task role

如果我在 ECS 上的容器内使用 aws cli,那么似乎附加到 ECS 实例角色的 IAM 策略应用正常,但根本没有使用任务角色 IAM 策略。

场景:

aws s3 cp local/file s3://remotebucket

s3 PutObject 策略附加到任务角色,而不是实例角色 - 拒绝访问

s3 PutObject 策略附加到实例角色,而不是任务角色 - 成功

我对任务中IAM的理解是容器继承实例角色,还包括来自任务角色的策略?我怎样才能让第一个场景起作用? http://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-iam-roles.html

我为此苦思了一天之后,发现问题是由过时的 AWS CLI 引起的。 http://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-iam-roles.html#task-iam-roles-minimum-sdk

在我的例子中,我安装了 aws-cli 和 apt-get install aws-cli,它安装了版本 1.4.2。此版本不处理获取正确 IAM 所需的 AWS_CONTAINER_CREDENTIALS_RELATIVE_URI 环境变量。所以默认是获取实例的IAM。

解决方案是通过 pip 或捆绑安装来安装 AWS CLI,以确保我拥有最新版本。这同样适用于 AWS SDK - 所需版本在上面的 link 中描述。