2016-01-26 2 views
5

У меня есть изображение в моем ковше AWS S3. Можно ли включить это изображение на мой сайт, разместив URL-адрес AWS в теге <img>? URL-адрес включает в себя такие параметры, как «Amz-Signature», «Amz-Credential» и «amz-security-token». Могут ли они быть злонамеренно использованы для доступа к другим файлам в моем ведре S3?Можно ли использовать ссылку на изображение в моем ковше AWS S3 на моей веб-странице?

Вот пример URL:.

https://s3.amazonaws.com/MyBucketName/FileName.jpg?X-Amz-Date=20160126T141139Z&X-Amz-Expires=300&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Signature=Lots_of_letters_and_Numbers2&X-Amz-Credential=MYAMAZON_CREDENTIALS/20160126/us-east-1/s3/aws4_request&X-Amz-SignedHeaders=Host&x-amz-security-token=REALLY_LONG_SECURITYTOKEN 

с другой стороны, я могу генерировать экспирации URL из моего C# код с помощью AWS SDK что-то вроде:

var expiryUrlRequest = new GetPreSignedUrlRequest 
{ 
    BucketName = WebConfigurationManager.AppSettings["AWSBucketName"], 
    Key = fileName, 
    Expires = DateTime.Now.AddHours(3) 
}; 

Это дает URL, который имеет "AWSAccessKeyId" в качестве параметра

.

Являются ли эти URL безопасными для использования на моей веб-странице? Какие риски будут связаны с их использованием на моем сайте?

Большое спасибо за ваше время. Пожалуйста, дайте мне знать, если вам нужна дополнительная информация или я неясен.

EDIT: Чтобы предоставить некоторое представление о моем приложении, пользователи загружают файл в ведро S3. Я использую SignalR, чтобы подтвердить, что изображение находится в ведре, показывая изображение с S3 на моей веб-странице, чтобы пользователь мог его видеть.

ответ

5

Не делайте ведро открытым. Если да, то потенциально user1 мог видеть загруженные файлы пользователя2.

Вы можете разрешить пользователям получать отдельные файлы в течение определенного периода времени с использованием предварительно подписанных URL-адресов.

  1. Отметьте ведро S3 как личное.
  2. Используйте GetPreSignedUrlRequest для создания предварительно подписанного URL-файла для файла, который вы хотите загрузить.
  3. Используйте этот URL-адрес в теге <img>.

Используя этот метод является безопасным:

  1. Пользователь может только скачать файл в течение времени, которые вы позволить, до истечения срока годности (который вы установили в качестве части GetPreSignedUrlRequest вызова)
  2. Учетные данные, которые вы видите в URL-адресе, могут быть такими же, как те, которые были использованы для создания URL-адреса. Но они могут показать пользователя.
  3. Пользователь не может загрузить другие файлы из ведра.

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

Если отображение идентификатора ключа доступа является проблемой, вы можете (a) создать пользователя IAM специально для загрузки файлов с S3 или (b) использовать роль IAM в экземпляре EC2 для генерации предварительно подписанный URL.

Ссылки:

+0

Благодарим вас за отзыв. Однако, когда я использую 'GetPreSignedUrlRequest', он возвращает URL-адрес с параметрами' AWSAccessKeyId = 'и' Signature = '. Безопасно ли предоставлять пользователям эту информацию? – user95227

+2

Это способ работы с заранее подписанными URL-адресами, AWSAccessKeyId является временным, а подпись - способ гарантировать, что URL-адрес не может быть изменен. Вы можете обязательно пойти с этим – Tom

+0

Да, это безопасно, как я упоминал в пункте № 2 в разделе «Использование этой техники в безопасности». –

0

Прежде всего, существует два способа ограничения доступа к содержанию ведре:

  • Частные - пользователям нужно учетные данные AWS для доступа к этому файлу (таким же образом, как это показано в вашем ответ)
  • Общественный - каждый может получить доступ к содержимому ведре (https://myBucket.s3.amazonaws.com/myFolder/myFile.jpg)

Если вы хотите, чтобы другие пользователи для доступа изображения (например, указав URL-адрес вашего веб-сайта), вы должны пометить ведро как общедоступное.

НЕ размещайте URL-адрес с вашими учетными данными AWS в любом месте !!!

+0

Полезно знать спасибо за сообщение. Я не хочу, чтобы пользователи имели доступ к другим файлам в ведре. Как вы думаете, достаточно ли шифрования имен файлов, чтобы пользователи не могли получить доступ к другим файлам в ведре, если я сделаю их общедоступными? Я рассмотрю другие способы отображения этого изображения, поскольку это звучит так, что это может быть угрозой безопасности. – user95227

+1

К сожалению, если ведро общедоступно, это означает, что все файлы в нем также являются общедоступными. Вы могли бы иметь временное публичное ведро для обработки функциональности шоу, а затем переместить изображение в другое личное ведро (но, очевидно, изображение) перестать быть видимым пользователем. – Smajl

+0

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

Смежные вопросы