Настройка разрешений для корзины AWS S3
У меня есть ведро 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 программно
Как мне установить эти разрешения? Я попытался отключить указанные выше разрешения, я также щелкнул изображения и действия под заголовком, щелкнул "сделать общедоступным". Затем я пытаюсь загрузить следующее:
$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 ответ
Amazon S3 Block Public Access - это конфигурация на уровне корзины, которая не позволит вам сделать какие-либо объекты в этой корзине общедоступными. Итак, если вы хотите сделать один или несколько объектов общедоступными, напримерimages/*
, то вам нужно отключить S3 Block Public Access для этого сегмента.
Само по себе это, конечно, не сделает ни один из ваших объектов общедоступным. По умолчанию сегменты S3 являются частными. Сделать объекты вimages/
public, вам нужно будет настроить политику корзины S3, например:
{
"Id": "id101",
"Statement": [
{
"Sid": "publicimages",
"Action": "s3:GetObject",
"Effect": "Allow",
"Resource": "arn:aws:s3:::mybucket/images/*",
"Principal": "*"
}
]
}