Ограничение размера объектов при загрузке на Amazon S3 с использованием предварительно подписанного URL-адреса

Я знаю ограничение размера выгрузки объекта с помощью этого метода: http://doc.s3.amazonaws.com/proposals/post.html#Limiting_Uploaded_Content

Но я хотел бы знать, как это можно сделать, создавая предварительно подписанный url, используя S3 SDK на стороне сервера в качестве пользователя IAM.

Этот URL из SDK не имеет такого параметра в параметрах: http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#putObject-property

Ни в этом: http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#getSignedUrl-property

Обратите внимание: я уже знаю об этом ответе: AWS S3 Предварительно подписанная длина URL-адреса, и это НЕ то, что я ищу.

Ответы

Ответ 1

Возможно, вы не сможете ограничить размер загрузки контента ex-ante, особенно учитывая POST и Multi-Part uploads. Вы можете использовать AWS Lambda для создания решения ex-post. Вы можете настроить функцию Lambda для получения уведомлений из ведра S3, проверить функцию размера объекта и удалить функцию или выполнить другое действие.

Вот некоторые документы по Обработка событий Amazon S3 с использованием AWS Lambda.

Ответ 2

Протокол подписания V4 предлагает возможность включать произвольные заголовки в подпись. Видеть: http://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-query-string-auth.html Итак, если вы заранее знаете точный Content-Length, вы можете включить это в подписанный URL. Основываясь на некоторых экспериментах с CURL, S3 будет обрезать файл, если вы отправляете больше, чем указано в заголовке Content-Length. Вот пример подписи V4 с несколькими заголовками в подписи http://docs.aws.amazon.com/general/latest/gr/sigv4-add-signature-to-request.html