Как собрать 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

Другие вопросы по тегам