awslabs / awslabs/aws-sdk-rust

Consider adding client-config level `disable_payload_signing` for S3

Open
#1,441 1 comment 0 reactions 0 assignees View on GitHub
feature-request
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

Open the contributing 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.