Я думаю, вы неправильно поняли, как аутентифицируется служба 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.
Это позволяет указать, из какого домена (ов) может возникнуть запрос каждого типа запроса.
Прежде чем отвечать, пожалуйста, ознакомьтесь с методологией POST на основе Brower на основе S3, так как это все клиенты. Вопрос в том, как обеспечить, чтобы почта была только из моего домена. – Krafty