【问题标题】:AWS S3 Running on the same EC2AWS S3 在同一个 EC2 上运行
【发布时间】:2020-04-07 09:28:22
【问题描述】:

我有一项服务在运行 AWS-S3 的同一实例上运行,在这种情况下,我在将文件推送到 S3 存储桶时无需提供凭据。

这是我的代码,但它显示了这个错误:

message: 'Access Denied',
code: 'AccessDenied',
region: null,
time: 2019-12-13T22:30:56.325Z,
requestId: '3F6AA6FAC6787B36',
extendedRequestId:'yQ4y6uthaTDBr6SuoXbI0g0cLWY40SWleATXrBijKrAbhcmsWTYAL+wCBlZpPM/6ytRc8qbIJP4=',
cfId: undefined,
statusCode: 403,
retryable: false,
retryDelay: 44.582589819600926

代码如下:

public async writeFileToS3(datasetFile: any): Promise<boolean> {
        try {
            this.s3Bucket = new S3({ region: 'us-east-1' });
            const readFile = this.util.promisify(this.fileWriter.readFile);
            const unlinkFile = this.util.promisify(this.fileWriter.unlink);
            const s3BucketName = this.appConfig.get<string>(
                'infra.fileWriter.bucket'
            );
            const data = await readFile(datasetFile.path);
            const params = {
                Bucket: s3BucketName,
                Key: datasetFile.originalname,
                Body: data,
                ACL: 'public-read'
            };

            return await new Promise<boolean>((resolve, reject) => {
                this.s3Bucket.upload(params, function(err: any) {
                    unlinkFile(datasetFile.path);
                    if (err) {
                        console.log('await call: ' + err);
                        reject(err);
                    } else {
                        resolve(true);
                    }
                });
            });
        } catch (err) {
            console.log(err);
            throw new OperationError('Error writing file to S3');
        }

注意:AWS 配置良好,因为我有另一个使用 Python 与 S3 交互的服务,它工作正常,但该服务使用 aws-sdk 进行 Javascript。

【问题讨论】:

  • AWS SDK 函数可以像这样被承诺:upload(params).promise().
  • @jarmod .. 我想这不是问题,问题是告诉 S3 不要使用凭据。
  • 对,这只是一个仅供参考。您只需要深入了解您提供错误凭据的原因,或者 S3 存储桶的策略可能拒绝您访问的原因。顺便说一句,您有一些不理想的奇怪命名约定 - 例如,this.s3Bucket 可能是 SDK 客户端 S3 对象,而不是存储桶。通常,此代码如下所示:const AWS = require('aws-sdk'); const s3 = new AWS.S3(); await s3.upload(params).promise().
  • @basel.ai 是什么让您认为“将文件推送到 S3 存储桶时无需提供凭据”?
  • @JohnRotenstein 因为简单地说,它就是为此而配置的!正如我在问题中提到的那样,我有另一个用 python 编写的服务并且我没有传递任何凭据,但问题在于 nodejs 的 aws-sdk,我需要告诉它不要查找凭据。

标签: node.js typescript amazon-web-services amazon-s3


【解决方案1】:

问题已解决,这是因为提供了regionACL。 只需删除它们即可解决问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-01-22
    • 2016-11-04
    • 2012-09-24
    • 1970-01-01
    • 2020-09-07
    • 2017-12-17
    • 2020-05-30
    • 2021-08-15
    相关资源
    最近更新 更多