Настройка разрешений AWS S3 bucket - PullRequest
0 голосов
/ 24 января 2020

У меня есть корзина s3 (например, mybucket), для которой на данный момент установлены разрешения:

Block all public access
On
 |
 |_Block public access to buckets and objects granted through new access control lists (ACLs)
 | On
 |
 |_Block public access to buckets and objects granted through any access control lists (ACLs)
 | On
 |
 |_Block public access to buckets and objects granted through new public bucket or access point policies
 | On
 |
 |_Block public and cross-account access to buckets and objects through any public bucket or access point policies
   On

Внутри этой корзины у меня есть две папки:

 images  (e.g. https://mybucket.s3.us-west-2.amazonaws.com/images/puppy.jpg)
 private (e.g. https://mybucket.s3.us-west-2.amazonaws.com/private/mydoc.doc)

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

Я хочу, чтобы личная папка была ограничена и могла быть доступна только с помощью учетной записи IAM программно

Как мне установить эти разрешения ? Я попытался отключить вышеуказанные разрешения, я также нажал на изображения и нижележащие действия, нажал «make publi c». Затем я пытаюсь загрузить следующее:

   $image = Image::make($file->getRealPath())->resize(360, 180);
   Storage::disk('s3')->put($filePath, $image->stream());

Файл загружен, но когда я пытаюсь отобразить изображение следующим образом, я получаю ошибку 403:

   <img src="{{ Storage::disk('s3')->url($file->path) }}" /> 

И для загрузки личных документов у меня есть следующее:

    $response =  [
        'Content-Type' => $file->mime_type,
        'Content-Length' => $file->size,
        'Content-Description' => 'File Transfer',
        'Content-Disposition' => "attachment; filename={$file->name}",
        'Content-Transfer-Encoding' => 'binary',
    ];


    return Response::make(Storage::disk('s3')->get($file->path), 200, $response);

Как правильно настроить эти разрешения?

Прежде чем кто-то начнет кричать, я новичок в хранилище S3, поэтому, пожалуйста, потерпите меня.

Буду признателен за любую помощь и руководство.

1 Ответ

1 голос
/ 24 января 2020

Amazon S3 Block Publi c Access - это конфигурация уровня сегмента, которая не позволит вам создавать какие-либо объекты в этом блоке публикации c. Итак, если вы хотите сделать один или несколько объектов опубликованными c, например images/*, то вам нужно отключить S3 Block Publi c Доступ для этого сегмента.

То само по себе, разумеется, не сделает ни один из ваших объектов опубликованным. Контейнеры S3 по умолчанию являются закрытыми. Чтобы сделать объекты в images/ publi c, вам необходимо настроить политику сегмента S3, например:

{
  "Id": "id101",
  "Statement": [
    {
      "Sid": "publicimages",
      "Action": "s3:GetObject",
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::mybucket/images/*",
      "Principal": "*"
    }
  ]
}
...