amazon-web-services - 如何在 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 角色?还是有其他方法可以允许这样做?
解决方案
在为您的 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"
}
]
}
推荐阅读
- javascript - 显示相对于时区的时间
- java - 当玩家击中食物时使其消失
- alert - Grafana:定义比率警报
- javascript - 与 React 的外部链接
- java - 初始化二维数组 - 密码表
- html - 在 aspx 文件中无法识别 CSS
- python - assertRaises(AttributeError, ...) 不起作用。模块“myModule”没有属性“main”(Python 单元测试)
- rust - 为大量结构实现特征时如何防止代码重复
- windows - 是否有用于获取桌面上图标位置的 Windows API?
- java - 为什么在使用 listIterator.add() 时会出现 noSuchElementException?