我正在尝试使用具有IAM角色的awsvpc模式配置AWS ECS,以专门用于任务。我们的ECS实例属于Fargate启动类型。在任务配置中指定任务IAM角色后,我们将ssh插入我们的任务并尝试运行awscli命令并得到以下错误:
Unable to locate credentials. You can configure credentials by running "aws configure".
为了进行故障排除,我们在具有EC2启动类型的容器中运行了相同的docker映像,并且当我们运行相同的awscli命令时,由于假定的角色没有足够的权限而出错。我们注意到这是因为它承担了容器实例的IAM角色,而不是任务IAM角色。
基于文档here,很明显,在使用awsvpc网络模式时,我们需要在代理配置文件中将ECS_AWSVPC_BLOCK_IMDS
代理配置变量设置为true并重新启动代理,以便我们的实例承担任务IAM角色,而不是容器实例IAM角色。
暂时出于性能测试的目的,我们需要使用Fargate启动类型和according to the docs进行部署,应该为Fargate自动安装容器代理:
Amazon ECS容器代理安装在用于使用Fargate启动类型的任务的AWS托管基础架构上。如果仅使用Fargate启动类型的任务,则不需要其他配置,并且本主题中的内容不适用。
但是,我们仍然需要能够承担任务IAM角色。有没有一种方法可以更新AWS管理的代理配置文件中的必要环境变量,以允许承担任务IAM角色?还是有另一种方式允许这样做?
答案 0 :(得分:0)
在为Fargate任务创建任务定义时,是否要分配任务角色ARN?需要两个IAM ARN。执行角色ARN是IAM角色,用于启动Fargate群集中的容器,并使用权限设置CloudWatch日志并可能从ECR中提取映像。任务角色ARN是容器具有的IAM角色。确保任务角色ARN具有ECS信任关系。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "ecs-tasks.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}