Я думаю, что это ответит на ваш вопрос:
Прокрутите вниз и начните читать ответ Майкла Фишера.
НЕ жестко кодируйте ваш ключ на клиенте. Правильный способ сделать это - (через защищенный канал) доставить предварительно созданный запрос с зашифрованной подписью - эта подпись может быть построена с помощью API, предоставляемого S3.
Вы можете извлечь состав запроса зашифрованной подписи из одного из объектов запроса в классе S3.cs (я имею в виду реализацию C # - не уверен, какой вы используете, но они должны быть довольно схожими). Затем пусть ваш клиент безопасно запросит объект со стороны вашего сервера, и вместо того, чтобы выплюнуть объект обратно, выплюните отформатированный запрос. Я полагаю, что это наиболее безопасный метод, при условии, что вы правильно защитили канал (SSL или любую другую схему).