PHP Amazon S3 доступ к личным файлам через URL

0

Я использую AWS PHP sdk для сохранения изображений на S3. Файлы сохраняются конфиденциально. Затем я показываю миниатюры изображений, используя URL-адрес файла S3 в своем веб-приложении, но поскольку файлы являются частными, поэтому изображения отображаются как поврежденные.

Изображение 174551

Когда пользователь нажимает на имя файла, модальный файл открывается, чтобы показать файл большего размера, но файл отображается как поврежденный из-за той же проблемы.

Изображение 174551

Теперь я знаю, что есть два способа заставить это работать. 1. Сделайте файлы общедоступными. 2. Создайте предварительно подписанные URL-адреса для файлов. Но я не могу использовать ни один из этих двух вариантов из-за требований моего проекта.

Мой вопрос в том, что есть какой-то третий способ решить эту проблему?

  • 0
    сталкивается с той же проблемой. +1 за это
  • 0
    Вы нашли какое-нибудь решение?
Показать ещё 2 комментария
Теги:
amazon-web-services
amazon-s3
aws-sdk

3 ответа

2
Лучший ответ

Я бы очень советовал против этого, но вы могли бы создать script на своем собственном сервере, который вытаскивает изображение через API, кэширует его и обслуживает. Затем вы можете ограничить доступ, как вам нравится, не делая изображения общедоступными.

Пример проходит через script:

$headers = get_headers($realpath); // Real path being where ever the file really is

foreach($headers as $header) {
    header($header);
}
$filename = $version->getFilename();

// These lines if it a download you want to do
// header('Content-Description: File Transfer');
// header("Content-Disposition: attachment; filename={$filename}");

$file = fopen($realpath, 'r');
fpassthru($file);
fclose($file);
exit;

Это будет едва "касаться сторон" и не должно слишком сильно задерживать появление ваших файлов, но все равно нужно взять некоторые ресурсы и пропускную способность.

1

Вам нужно будет получить доступ к файлам через script на вашем сервере. То, что script выполнит некоторую проверку подлинности, чтобы убедиться, что запрос действителен и вы хотите, чтобы они видели файл. Затем извлеките файл из S3, используя действительный профиль IAM, который может обращаться к приватным файлам. Вывести файл

Вместо запроса файла с S3 запросить его из http://www.yourdomain.com/fetchimages.php?key=8498439834

Тогда вот некоторый псевдокод в fetchimages.php

<?php

//if authorized to get this image

$key=$_GET['key'];
//validate key is the proper format

//get s3 url from a database based on the $key

//connect to s3 securely and read the file from s3

//output the file

?>
0

насколько я знаю, вы могли бы попытаться сделать свой ведро S3 "веб-сервером" как это, но тогда вы, вероятно, "сделаете файлы public". Затем, если у вас есть какая-то логика для ограничения доступа, вы можете создать политику ведра

Ещё вопросы

Сообщество Overcoder
Наверх
Меню