Проблема с разрешениями на чтение в AWS-S3 - PullRequest
0 голосов
/ 03 ноября 2019

Я столкнулся с проблемой, касающейся разрешений для моего блока, недавно созданного в AWS.

Я создал блок для AWS-S3, чтобы я мог сохранять изображения из своего приложения, загруженного пользователями. Время от времени я заходил и удалял изображения.

Проблема, с которой я сталкиваюсь, заключается в том, что Amazon рекомендует Блокировать все разрешения общего доступа для вашего хранилища, поэтому у меня возникает ошибка Доступ запрещен при попытке прочитать мои изображенияв моем приложении.

Я потратил почти 2 часа на их документацию, которая, как я признаю, немного смущает меня, и я был бы рад, если бы кто-то мог помочь мне решить проблему.

Я хочу сохранить хранилище частным и подписывать каждый запрос моего приложения секретным ключом и секретным идентификатором для предотвращения несанкционированного доступа. Ниже приведен код, который я имею, и я не знаю, что я делаю неправильно.

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
  }
}

Политика Bucket - общедоступна (как сделать так, чтобы я мог петь со своим секретным ключом и идентификатором)

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

Спасибо за вашу помощь

1 Ответ

0 голосов
/ 03 ноября 2019

Первое, что я вижу подозрительным, это public-read acl. Скорее всего, вы не хотите этого делать. Вы можете прочитать по этой теме здесь: https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html

Помимо этого, учебник, который Джон Ротенштейн должен дать вам остальную часть пути.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...