首页 > 解决方案 > 如何在 Fargate 启动类型实例上更新 AWS ECS 容器代理

问题描述

我正在尝试使用带有 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 角色。

根据此处的文档,很明显,当使用 awsvpc 网络模式时,我们需要ECS_AWSVPC_BLOCK_IMDS在代理配置文件中将代理配置变量设置为 true 并重新启动代理,以便我们的实例承担任务 IAM 角色而不是容器实例 IAM 角色。

目前,出于性能测试的目的,我们需要使用 Fargate 启动类型进行部署,并且根据文档,应该为 Fargate 自动安装容器代理:

Amazon ECS 容器代理安装在用于使用 Fargate 启动类型的任务的 AWS 托管基础设施上。如果您仅使用 Fargate 启动类型的任务,则无需额外配置,并且本主题中的内容不适用。

但是,我们仍然需要能够承担我们的任务 IAM 角色。有没有办法更新 AWS 托管代理配置文件中的必要环境变量,以允许承担任务 IAM 角色?还是有其他方法可以允许这样做?

标签: amazon-web-servicesamazon-iamamazon-ecsaws-fargate

解决方案


在为您的 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"
        }
      ]
    }

推荐阅读