如何在Fargate启动类型实例上更新AWS ECS容器代理

时间:2019-05-10 16:57:52

标签: amazon-web-services amazon-iam amazon-ecs aws-fargate

我正在尝试使用具有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角色?还是有另一种方式允许这样做?

1 个答案:

答案 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"
        }
      ]
    }