Как собрать Amazon S3 Presigned PostPolicy для загрузки файлов в Java SDK 2.0?
Мне нужно сгенерировать подпись AWS Signature v4 для загрузки на s3, например: https://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-post-example.html.
Я пробовал много примеров, но есть ошибка
<Error>
<Code>InvalidAccessKeyId</Code>
<Message>The AWS Access Key Id you provided does not exist in our records.</Message>
<AWSAccessKeyId>ASIA2AKMADUN</AWSAccessKeyId>
<RequestId>E68a1B73B15</RequestId>
<HostId>fIG19S=</HostId>
</Error>
Я пытался построить подпись, используя minio-java
вот так https://github.com/minio/minio-java/blob/master/examples/PresignedPostPolicy.java
Кроме того, я попробовал этот фрагмент кода https://gist.github.com/phstudy/3523576726d74a0410f8
PS Моя настоящая цель - загрузка файлов с клиентов с ограничением размера файла, как там, так и там. Я могу создать presignS3UploadLink, но нет способа установить максимальный размер.
1 ответ
Итак, решение https://github.com/minio/minio-java/blob/master/examples/PresignedPostPolicy.java не сработало из-за отсутствия x-amz-security-token
параметр.
Нам нужно использовать session-token
(который мы получаем от Amazon) для создания POST-политики и для публикации форм - https://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-HTTPPOSTConstructPolicy.html
Пример кода для Minio:
conditions.add(new String[]{"eq", "$x-amz-security-token", sessionToken});
formData.put("x-amz-security-token", sessionToken);
PS x-amz-security-token
требуется из-за использования временных учетных данных безопасности - https://docs.aws.amazon.com/AmazonS3/latest/API/sig-v4-authenticating-requests.html