2015-04-01 3 views
0

основе: http://s3.amazonaws.com/doc/s3-example-code/post/post_sample.htmlМогу ли я ограничить Amazon S3 на основе браузер загрузок от URL в моем ковше политике

Есть ли способ ограничить загрузку на основе браузера для Amazon S3 таким образом, что она отклоняется, если она не исходит от мой безопасный URL (то есть https://www.someurl.com)?

Спасибо!

+0

Прежде чем отвечать, пожалуйста, ознакомьтесь с методологией POST на основе Brower на основе S3, так как это все клиенты. Вопрос в том, как обеспечить, чтобы почта была только из моего домена. – Krafty

ответ

0

Я думаю, вы неправильно поняли, как аутентифицируется служба S3.

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

Серверы S3 Amazon затем проверяют, что загруженный файл был подписан вашим идентификатором доступа и ключом.

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

В случае загрузки на основе браузера ваша форма должна содержать подпись, которая передается на серверы S3 Amazon и аутентифицирована. Эта подпись генерируется из комбинации политики загрузки, вашего идентификатора доступа и ключа, но она хеширована, поэтому вы не сможете вернуться к секретному ключу.

Как вы упомянули, это может означать, что кто-то сможет загрузить в ваше ведро из-под пределов вашего приложения, просто повторно используя подпись в заголовке X-Amz-Signature.

Это то, что означает заголовок срока действия политики, поскольку он позволяет вам установить достаточно короткий срок действия формы для предотвращения неправильного использования.

Поэтому, когда пользователь переходит на страницу загрузки, ваш сервер должен сгенерировать политику с коротким сроком действия (например, через 5 минут после генерации). Затем он должен создать подпись из этой политики и ваших учетных данных Amazon. Теперь вы можете создать форму, которая будет размещать любые данные в вашем ведре S3 с соответствующей политикой и подписью.

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

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

Более подробная информация доступна в документах AWS о browser based uploads to S3 и how S3 authenticates requests.

Чтобы дополнительно ограничить запросы, которые могут возникнуть, следует изучить возможность разрешений Cross-Origin Resource Sharing (CORS) на ваш ведро S3.

Это позволяет указать, из какого домена (ов) может возникнуть запрос каждого типа запроса.

+0

Привет. Если вы вернетесь и посмотрите на ссылку, опубликованную в начале вопроса, вы увидите, что сервер никогда не затрагивается в этом случае использования. S3 предлагает загрузку на основе браузера, потому что вы создаете безопасную политику загрузки, а в вашей клиентской форме вы зашифровали/хешировали версии своих учетных данных. Они никогда не отображаются, но загрузка/POST определяется политикой. Поэтому я боюсь, что вы неправильно поняли этот вопрос. – Krafty

+0

Добавлена ​​определенная информация о том, как аутентифицируются POST на основе браузера. В основном вы создаете политику и подпись при загрузке страницы загрузки, а затем используете ее для управления временем истечения срока действия. – ydaetskcoR

+0

Спасибо за обновление.Я изучал истекающую подпись, поскольку я использую ее в другом месте, но я был обеспокоен тем, что пользователь мог нанести большой урон даже через 30 секунд, если они могут скопировать и вставить достаточно быстро. Но это было отличное обновление. Я по-прежнему считаю, что правильное решение будет осуществляться с помощью политики ведра для блокировки POST, если только он не будет отправлен из белого списка. - Еще раз спасибо. – Krafty

1

Я хочу абсолютно гарантировать пост приходит с моего сайта

Это невозможно.

Веб-сайт без гражданства и POST Приход «определенного» домена является недействительной концепцией, потому что заголовок Referer: является тривиальным для обмана, и злонамеренный пользователь, скорее всего, это знает. Запуск через сервер EC2 ничего не принесет вам, потому что он не скажет вам ничего нового и значимого.

Документ политики публикации не только истекает, но также может ограничивать ключ объекта префиксом или точным соответствием. Как злоумышленник собирается победить это? Они не могут.

В вашей клиентской форме у вас есть зашифрованные/хешированные версии ваших учетных данных.

Нет, вы этого не сделаете.

У вас есть подпись, подтверждающая ваше разрешение на S3, чтобы почтить сообщение формы. Он не может быть реконструирован с обратной стороны, так что политика может быть изменена, и в этом все дело. Форма должна соответствовать политике, которая не может редактироваться и оставаться в силе.

Вы создаете эту подпись, используя информацию, известную только вам и AWS; в частности, секрет, который сопровождает ваш ключ доступа.

Когда S3 получает запрос, он вычисляет то, что должно было быть подписи. Если это совпадение, то привилегии конкретного пользователя, владеющего этим ключом, проверяются, чтобы проверить, разрешен ли запрос.

Сдерживая ключ объекта в политике, вы запрещаете пользователю загружать (или переписывать) любой объект, кроме определенного, разрешенного политикой. Или конкретный префикс ket объекта, и в этом случае вы запрещаете пользователю причинять вред чему-либо, кроме этого префикса.

Если вы передаете политику, позволяющую перезаписать любой объектный ключ во всем ведре, вы решаете неправильную проблему, пытаясь сдержать сообщения как ближайшие «с» вашего сайта.

0

Вместо того, чтобы пытаться забаррикадировать дверь. Снимите дверь.

Лучшим решением для IMHO было бы предотвращение любых загрузок на всех непосредственно на s3.
Смысл удалить политику загрузки s3, которая позволяет незнакомым пользователям загружать.

  1. Сделайте их загруженными на один из ваших серверов.
  2. Подтвердите загрузку, как вам нравится.
  3. Если это приемлемо, то ваш сервер может переместить файл s3.
Смежные вопросы