【发布时间】:2019-02-22 19:29:11
【问题描述】:
使用 AWS Node SDK 的代码似乎无法获得 ECS 任务的角色权限。
如果我在 EC2 ECS 实例上运行代码,代码似乎继承了实例上的角色,而不是任务。
如果我在 Fargate 上运行代码,代码不会获得任何权限。
相比之下,在实例中运行的任何 bash 脚本似乎都具有适当的权限。
确实,the documentation 并没有提到这是 node sdk 的一个选项,只是:
- 从 Amazon EC2 的 IAM 角色加载(如果在 EC2 上运行),
- 从共享凭证文件 (~/.aws/credentials) 加载,
- 从环境变量加载,
- 从磁盘上的 JSON 文件加载,
- 在您的应用程序中硬编码
有没有办法让你的节点代码获得ECS任务的权限?
这似乎是将权限传递给您的代码的合乎逻辑的方式。它与在实例上运行的代码完美配合。
我能想到的唯一解决方法是为每个 ECS 服务创建一个 IAM 用户,并在任务定义中将 API Key/Secret 作为环境变量传递。但是,这似乎不太安全,因为任何有权访问任务定义的人都可以以纯文本形式看到它。
【问题讨论】:
-
你是怎么创建客户端的,你用的是什么功能?
-
@titogeo 只是实例化没有参数的客户端,应该使用凭证链解析器
-
您能否编辑问题以包括任务的
aws ecs describe-task-definition的输出以及您的任务所承担角色的aws iam get-role的输出? AWS SDK 将透明地使用 ECS 任务角色,只要这些角色和您的 ECS 代理配置正确(或者在使用 Fargate 时自动配置),所以我猜这与您的任务或 IAM 角色配置错误/缺失有关。跨度> -
@ydaetskcoR 感谢您对此进行调查。 task definition 和 role 按要求提供。
标签: amazon-web-services amazon-iam amazon-ecs aws-sdk-js