【问题标题】:AWS file load works on localhost, but doesn't work on EC2 (node, express, react). Get 403 ForbiddenAWS 文件加载适用于本地主机,但不适用于 EC2(节点、快递、反应)。获取 403 禁止
【发布时间】:2020-09-11 05:41:32
【问题描述】:

我在 Node 上有应用程序。用于向 AWS 发送文件的 API 端点包含此部分

const multer = require('multer');
const aws = require('aws-sdk');
const multerS3 = require('multer-s3');

aws.config.update({
  secretAccessKey: require("../config/keys").aws.key,
  accessKeyId: require("../config/keys").aws.id,
  region: 'eu-central-1'
});

const s3 = new aws.S3();

const storage = multerS3({
  s3: s3,
  bucket: require("../config/keys").aws.bucket,
  key: function (req, file, cb) {
    cb(null, Date.now().toString());
  }
});

const upload = multer({ storage: storage });

module.exports = upload;

我在路由中这样称呼它

const upload = require('../../middleware/multer-aws');

router.post("/add", upload.any('file'), (req, res) => {
...

当我在 localhost 上测试加载文件时,它运行良好,但是当我在 EC2 实例上执行相同操作时,我得到 403 Forbidden 响应。

在我的代码中,我没有 403 代码,所以它肯定来自 AWS。

我不知道问题出在哪里以及如何解决。有什么想法吗?

【问题讨论】:

  • 您好,您是否验证了代码库的文件和目录的权限?另外403从哪里返回?您的应用程序还是 AWS CLI?
  • 我没有更改任何代码。刚刚在 EC2 上提取了相同的代码。基本上应用程序运行良好,但这部分没有。我不知道 403 是从哪里来的。正如我从 multer 部分了解的那样,当它尝试在服务器上上传文件时。在我的应用程序中,我没有 403 代码。
  • 您能否验证应用程序中正在检索密钥和密钥?
  • 我做了日志,看看是不是正确

标签: node.js amazon-web-services amazon-s3 amazon-ec2 multer


【解决方案1】:

看起来一些 NACL 问题出站 HTTP 访问可能被 EC2 实例阻止,如果 AWS 访问密钥和密钥在本地实例中完美工作并将文件上传到 S3,它应该可以从 EC2 工作,请检查 NACL

【讨论】:

    【解决方案2】:

    问题已解决。我检查了 pm2 日志,发现有关 InvalidAccessKeyId 的消息。检查 env 变量,发现我在 prod 上弄乱了 key 和 id。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-14
      • 2011-02-16
      • 1970-01-01
      • 1970-01-01
      • 2019-11-14
      • 1970-01-01
      • 2014-08-11
      • 1970-01-01
      相关资源
      最近更新 更多