如何将 ECS 凭证与 AWS JS 开发工具包一起使用

Posted

技术标签:

【中文标题】如何将 ECS 凭证与 AWS JS 开发工具包一起使用【英文标题】:How to use ECS credentials with AWS JS SDK 【发布时间】:2018-01-19 22:42:40 【问题描述】:

我正在尝试使用 AWS JS SDK 访问 S3 存储桶,但没有成功。

我有一个任务定义,它使用一个名为Foo任务角色。此任务角色作为附加的策略访问 S3 存储桶:


  "Version": "2012-10-17",
  "Statement": [
    
      "Sid": "",
      "Effect": "Allow",
      "Action": [
        "s3:PutObject",
        "s3:GetObject"
      ],
      "Resource": "arn:aws:s3:::foo-bucket"
    
  ]

它在AWS Documentation about loading credentials from IAM roles for EC2 中说我应该将我的实例配置为使用 IAM 角色。但我在 AWS 文档中找不到任何相关内容。

我尝试使用AWS.ECSCredentials class 定义credentials

const options = 
  apiVersion: '2006-03-01',
  region: bucketSettings.region,
  credentials: new AWS.ECSCredentials(
    httpOptions:  timeout: 5000 , // 5 second timeout
    maxRetries: 10, // retry 10 times
    retryDelayOptions:  base: 200 , // see AWS.Config for information
  )
;

this.s3Instance = new AWS.S3(options);

当我尝试访问 S3 存储桶中的文件时:

const document = await this.s3Instance
  .getObject( Bucket: bucketSettings.name, Key: key )
  .promise();

return document;

我还有一个

访问被拒绝

知道我在那里缺少什么吗?

【问题讨论】:

【参考方案1】:

访问 S3 存储桶的策略出错(注意资源末尾的 /*):


  "Version": "2012-10-17",
  "Statement": [
    
      "Sid": "",
      "Effect": "Allow",
      "Action": [
        "s3:PutObject",
        "s3:GetObject"
      ],
      "Resource": "arn:aws:s3:::foo-bucket/*"
    
  ]

另外,不需要提供给 AWS 开发工具包的 credentials 选项:

const options = 
  apiVersion: '2006-03-01',
  region: bucketSettings.region,
;

this.s3Instance = new AWS.S3(options);

【讨论】:

我正在尝试同样的事情,但是,当我留下凭据时,我收到一条错误消息“缺少凭据”,如果我添加凭据,我会收到错误消息“ECSCredentials 不是构造函数”。有什么建议吗?

以上是关于如何将 ECS 凭证与 AWS JS 开发工具包一起使用的主要内容,如果未能解决你的问题,请参考以下文章

Rails:如何使用容器从 ECS 重用 AWS 凭证

如何在节点 AWS 开发工具包代码中使用 AWS ECS 任务角色

如何使用 AWS 开发工具包进行身份验证

AWS ECS 开发工具包。使用开发工具包为 ECS 集群注册新容器实例 (EC2)

如何将 AWS 凭证与 Jenkins 一起使用以部署到 Elastic Beanstalk?

将 ECS 与 Fargate 一起使用时找不到 s3 的访问凭证