我正在尝试使用AWS ECS在docker容器中运行boto3 python脚本。我的脚本需要访问SQS(获取和删除消息)和Lambda(搜索和运行的权限)。
为了让docker容器在我的本地机器上运行,我可以使用以下docker run命令将我的aws凭据传递到docker容器中。
docker run -v ~/.aws:/root/.aws
最近ECS宣布:
Amazon ECS now supports IAM roles for tasks. When you specify an IAM role for a task, its containers can then use the latest versions of the AWS CLI or SDKs to make API requests to authorized AWS services. Learn More
我将任务IAM角色附加到任务,但在运行任务时出现以下错误:
Unable to run task
ECS was unable to assume the role that was provided for this task. Please verify that the role being passed has the proper trust relationship and permissions and that your IAM user has permissions to pass this role.
任何想法都将不胜感激。
答案 0 :(得分:13)
看起来Boto现在支持IAM任务角色,但无论如何,当Boto客户端尝试发出请求时,这将是一个问题,而不是在尝试启动任务时。
此处的问题在错误消息中定义。之一:
1)您的用户没有为任务角色定义的iam:PassRole权限。这可以通过编辑用户的策略来添加,使其具有类似于以下内容的声明:
{
"Effect": "Allow",
"Action": "iam:PassRole",
"Resource": "arn:aws:iam::<account>:role/<role name>"
}
2)您尝试分配给任务的任务角色没有正确的信任关系。将以下信任策略添加到ECS任务角色,以确保该任务可以承担它。
{
"Version": "2008-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "ecs-tasks.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
答案 1 :(得分:1)
Boto3使用botocore库作为其API函数,并且它允许每个Boto3版本的一系列botocore版本,所以即使你有最新的Boto3版本,你也可能没有最新的botocore。
Botocore支持版本为1.4.37的任务的ECS IAM角色,因此,如果您将环境中的底层botocore更新为至少该版本,则应该能够将ECS IAM角色用于任务功能。 / p>