awslabs / awslabs/aws-sdk-rust
Consider adding client-config level `disable_payload_signing` for S3
- Dominant language
- Rust
- Stars
- 3.3k
- Forks
- 290
- Avg merge
- 1d 12h
- Merged PRs (30d)
- 3
Description
### Describe the feature
When sending requests over TLS, customers may choose to [disable payload signing](https://docs.rs/aws-sdk-s3/1.137.0/aws_sdk_s3/client/customize/struct.CustomizableOperation.html#method.disable_payload_signing) to avoid the cost of SigV4 signing.
**Background**
- https://github.com/awslabs/aws-sdk-rust/issues/1087
- https://github.com/smithy-lang/smithy-rs/pull/3583
- https://github.com/smithy-lang/smithy-rs/pull/3915
Since this is an advanced option, it currently only applies to [PutObject and UploadPart](https://github.com/smithy-lang/smithy-rs/blob/6fea2389d80041d95900b35e4df0c56731752fd9/aws/codegen-aws-sdk/src/main/kotlin/software/amazon/smithy/rustsdk/DisablePayloadSigningDecorator.kt#L22-L23) for S3, and requires per-operation customization:
```rust
client
.put_object()
// ... other configs
.customize()
.disable_payload_signing()
.send()
.await;
```
**Ask**
Make `disable_payload_signing` available on the S3 client config builder, so customers don't need to customize each operation call individually.
**Notes**
For `PutObject` and `UploadPart` with a streaming body, calling `disable_payload_signing` is unnecessary; aws-chunked encoding kicks in by default, which already disables payload signing under the hood.
### Use Case
With the request implemented, no per-operation customization needed:
```
let config = aws_sdk_s3::Config::builder()
.disable_payload_signing()
// ... other configs
.build();
let client = aws_sdk_s3::Client::from_conf(config);
client
.put_object()
.bucket("my-bucket")
.key("my-key")
.body(body)
.send()
.await?;
```
### Proposed Solution
_No response_
### Other Information
_No response_
### Acknowledgements
- [ ] I may be able to implement this feature request
- [ ] This feature might incur a breaking change
### A note for the community
### Community Note
* Please vote on this issue by adding a 👍 [reaction](https://blog.github.com/2016-03-10-add-reactions-to-pull-requests-issues-and-comments/) to the original issue to help the community and maintainers prioritize this request
* Please do not leave "+1" or "me too" comments, they generate extra noise for issue followers and do not help prioritize the request
* If you are interested in working on this issue, please leave a comment
Contributor guide
Research direction
Start with aws/codegen-aws-sdk/src/main/kotlin/software/amazon/smithy/rustsdk/DisablePayloadSigningDecorator.kt and the linked smithy-rs pull requests to understand the existing operation-level option. Trace how S3 client configuration reaches PutObject and UploadPart, then verify that the builder option applies without per-operation customization and preserves the streaming-body behavior described in the issue.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- kotlin, rust
- Domain
- backend-api-design, cloud
- Issue type
- Feature
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 58/100