AWS-S3存储桶读取权限问题

时间:2019-11-03 03:35:31

标签: amazon-web-services amazon-s3 aws-sdk

我面临有关在AWS上新创建的存储桶权限的问题。

我在AWS-S3上创建了一个存储分区,因此我可以存储用户上传的应用程序中的图片。我有时会进去,并删除图像。

我面临的问题是亚马逊建议在您的存储桶上阻止所有公共访问权限权限,因此当我尝试在其中读取图像时出现访问被拒绝错误我的应用程序。

我花了将近2个小时来阅读他们的文档,我承认这对我来说有些混乱,如果有人可以帮助我解决问题,我将非常乐意。

我想保持存储桶为私有,并在应用程序的每个请求中都使用密钥和密钥ID进行签名,以防止未经授权的访问。以下是我拥有的代码,我不知道自己在做什么错。

const awsSdk = require("aws-sdk");
const multerS3 = require("multer-s3-transform");

awsSdk.config.update({
  secretAccessKey: config.AWS_SECRET_KEY,
  accessKeyId: config.AWS_SECRET_ID,
  region: config.AWS_REGION
});

const awsStorage = multer({
   storage: multerS3({
   s3: s3,
   bucket: "bucketname",
   acl: "public-read",
   contentType: multerS3.AUTO_CONTENT_TYPE,
   cacheControl: "max-age=31536000",
   metadata: (req, file, cb) => {
    cb(null, { fieldname: file.originalname });
   },
   key: (req, file, cb) => {
     cb(null, new Date().toISOString() + "-" + file.originalname);
   }
 }),
 fileFilter: (req, file, cb) => {
   if (
    file.mimetype === "image/jpg" ||
    file.mimetype === "image/jpeg" ||
    file.mimetype === "image/png"
   ) {
    //adding the file to the body custom field
    req.body.files = req.files[0].fieldname;
    cb(null, true); // accept file
   } else {
    cb(null, false); //reject file
  }
}

时段政策-公开(如何制作,以便我可以使用我的私钥和ID唱歌)

{
"Version": "2008-10-17",
"Statement": [
    {
        "Sid": "AllowPublicRead",
        "Effect": "Allow",
        "Principal": {
            "AWS": "*"
        },
        "Action": "s3:GetObject",
        "Resource": "arn:aws:s3:::bucketname/*"
    }
  ]
}

谢谢您的帮助

1 个答案:

答案 0 :(得分:0)

我发现可疑的第一件事是public-read acl。您很可能不想这样做。您可以在这里阅读该主题: https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html

除此之外,约翰·罗滕斯坦(John Rotenstein)应该为您提供其余方法的教程。