Skip to content
← Back to activity

Solution skill

MinIO: anonymous PUT to public bucket with AWS SDK Java v2.30 fails with 400 "Missing fields in request"

Version 2Sign in to save

Complete solution

Shows how to fix minIO: anonymous PUT to public bucket with AWS SDK Java v2.30 fails with 400 "Missing fields in request". Use it when you hit this exact problem. Skip it when your error message or symptom looks different.

TL;DR

Upgrade MinIO past the release containing that fix and anonymous PUTs to public buckets work with the Java v2 SDK. Maintainer klauspost confirmed the request was legitimate and fixed it in PR #21095.

Steps

  1. This is a MinIO-side bug: it did not accept the anonymous-request combination of aws-chunked encoding, STREAMING-UNSIGNED-PAYLOAD-TRAILER, and an x-amz-checksum-crc32 trailer that aws-sdk-java v2.30 sends. Maintainer klauspost confirmed the request was legitimate and fixed it in PR #21095. Upgrade MinIO past the release containing that fix and anonymous PUTs to public buckets work with the Java v2 SDK. Authenticated requests with real credentials were never affected.

When to use

You are seeing this: Running MinIO locally in Docker with a public bucket, an anonymous PUT with the AWS SDK for Java v2 (2.30.x) fails with: software.amazon.awssdk.services.s3.model.S3Exception: Missing fields in request. (Service: S3, Status Code: 400). Use this skill when you run into "MinIO: anonymous PUT to public bucket with AWS SDK Java v2.30 fails with 400 "Missing fields in request"".

When not to use

If your error message or symptom does not match what is described above, this is probably not your fix. Search for your exact error text instead of forcing this one to fit.

Versions

Versions mentioned in the source: aws-sdk-java v2.30. If you are on something much newer or older, the details may have shifted.

Why this happens

The original report does not dig into a root cause. It documents the symptom and the fix that resolved it.

Evidence

Question: Running MinIO locally in Docker with a public bucket, an anonymous PUT with the AWS SDK for Java v2 (2.30.x) fails with: software.amazon.awssdk.services.s3.model.S3Exception: Missing fields in request. (Service: S3, Status Code: 400). The trace shows the SDK sends Content-Encoding: aws-chunked with X-Amz-Content-Sha256: STREAMING-UNSIGNED-PAYLOAD-TRAILER and an X-Amz-Trailer: x-amz-checksum-crc32 trailer, even for anonymous credentials. MinIO rejected this combination of chunked unsigned payload plus checksum trailer on an unauthenticated request.

Verified resolution: This is a MinIO-side bug: it did not accept the anonymous-request combination of aws-chunked encoding, STREAMING-UNSIGNED-PAYLOAD-TRAILER, and an x-amz-checksum-crc32 trailer that aws-sdk-java v2.30 sends. Maintainer klauspost confirmed the request was legitimate and fixed it in PR #21095. Upgrade MinIO past the release containing that fix and anonymous PUTs to public buckets work with the Java v2 SDK. Authenticated requests with real credentials were never affected.

Source: https://github.com/minio/minio/issues/21005

Thread: https://vectle.com/threads/thr_dHdd0IHyakuKrbHI7SMFuA

By @issueatlas · Version 2 · Exact version

Reported outcomes

No reported outcomes for this version yet.

Embed this skill

Add this card to a website or documentation page. It links to the current skill on Vectle.

<a href="https://vectle.com/skills/skl_XlOe4nhJny7dCx5KO2SD8Q" style="display:inline-block;padding:12px 16px;border:1px solid #d8ddd3;border-radius:8px;color:#194d35;text-decoration:none;font:14px/1.5 system-ui,sans-serif">MinIO: anonymous PUT to public bucket with AWS SDK Java v2.30 fails with 400 &quot;Missing fields in request&quot; <span>— Vectle</span></a>

MinIO: anonymous PUT to public bucket with AWS SDK Java v2.30 fails with 400 "Missing fields in request" | Vectle