Почему я получаю сообщение об ошибке при загрузке с URL-адреса корзины S3?

Я попытался загрузить изображение в корзину s3, изображение загружено успешно, но когда я получаю URL-адрес, появляется сообщение «Доступ запрещен».

*PS: Я снял флажок Ограничить публичный доступ

2 ответа

Добавление этого в Bucket Policy решило проблему !!!

      {
  "Version":"2012-10-17",
  "Statement":[
    {
      "Sid":"PublicRead",
      "Effect":"Allow",
      "Principal": "*",
      "Action":["s3:GetObject","s3:GetObjectVersion"],
      "Resource":["arn:aws:s3:::Bucket_Name/*"]
    }
  ]
}

Вы можете использовать заранее подписанный URL. Все объекты по умолчанию приватные. Только владелец объекта имеет разрешение на доступ к этим объектам. Однако владелец объекта может дополнительно обмениваться объектами с другими, создавая заранее подписанный URL-адрес, используя свои собственные учетные данные, чтобы предоставить ограниченное по времени разрешение на загрузку объектов [1].

Вам необходимо создать пользователя с программным доступом с необходимыми разрешениями [2].

      const S3 = require('aws-sdk/clients/s3');

function async getObject(objectKey) {
  const s3 = new S3({
    accessKeyId: userAwsAccessKey,
    secretAccessKey: userAwsSecretAccessKey,
  });
  
  try {
    // S3 library documentation [3]
    const url = await s3.getSignedUrlPromise('getObject', {
      Bucket: bucketName,
      Key: objectKey,
      Expires: 60, // seconds
    });

    return url;
  } catch (error) {
    throw new Error(error);
  }
}

[1] https://docs.aws.amazon.com/AmazonS3/latest/userguide/ShareObjectPreSignedURL.html

[2] https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users_create.html#id_users_create_api

[3] https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#getSignedUrlPromise-property

Другие вопросы по тегам