Cri*_*bie 9 amazon-web-services amazon-ecs amazon-iam aws-sdk-js
使用AWS Node SDK的代码似乎无法获得ECS任务的角色权限.
如果我在EC2 ECS实例上运行代码,代码似乎继承了实例上的角色,而不是任务.
如果我在Fargate上运行代码,则代码不会获得任何权限.
相比之下,在实例中运行的任何bash脚本似乎都具有适当的权限.
实际上,文档没有提到这是节点sdk的一个选项,只是:
有没有办法让您的节点代码获得ECS任务的权限?
这似乎是将权限传递给代码的合理方式.它与在实例上运行的代码完美配合.
我能想到的唯一解决方法是为每个ECS服务创建一个IAM用户,并将API Key/Secret作为环境变量传递给任务定义.但是,这似乎不太安全,因为对于有权访问任务定义的任何人来说,它都可以以纯文本形式显示.
您的问题缺少很多有关如何设置 ECS 集群的详细信息,而且我不确定问题是针对 ECS 还是专门针对 Fargate。
确保您使用的是最新版本的 SDK。Javascript 支持 ECS 和 Fargate 任务凭证。
ECS 上的凭据经常会出现混淆。有分配给集群 EC2 实例的 IAM 角色和分配给 ECS 任务的 IAM 角色。
最常见的问题是ECS任务角色上尚未设置“信任关系”。选择您的 IAM 角色,然后选择“信任关系”选项卡并确保其如下所示:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "",
"Effect": "Allow",
"Principal": {
"Service": "ecs-tasks.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
Run Code Online (Sandbox Code Playgroud)
除了运行任务和服务所需的标准 Amazon ECS 权限之外,IAM 用户还需要iam:PassRole使用 IAM 角色执行任务的权限。
接下来验证您是否在任务定义中使用 IAM 角色。ARN在任务角色字段中指定正确的 IAM 角色。请注意,这与任务执行角色(允许容器拉取图像并发布日志)不同。
接下来,确保您的 ECS 实例使用最新版本的 ECS 代理。代理版本列在“ECS 实例”选项卡的右侧“代理版本”列下。当前版本是1.20.3.
您是否使用 ECS 优化的 AMI?如果没有,请添加--net=host到docker run启动代理的命令中。查看此链接以获取更多信息。
| 归档时间: |
|
| 查看次数: |
1163 次 |
| 最近记录: |