developmentseed / developmentseed/multistore
SigV4 authenticated uploads fail with SignatureDoesNotMatch on Cloudflare Workers
- Dominant language
- Rust
- Stars
- 19
- Forks
- 1
- PR merge metrics
- No merged PRs in 30d
Description
Here's a more general GitHub issue:
### What I'm trying to do
I'm trying to use rclone to upload files to a multistore proxy running on Cloudflare Workers. Anonymous reads work fine, but authenticated writes (PUT) and authenticated list operations (GET with credentials) all fail with `403 SignatureDoesNotMatch`.
Has anyone gotten authenticated uploads working with the Cloudflare Workers deployment?
### My setup
**rclone config:**
```ini
[dataforcanada-s3]
type = s3
provider = Other
endpoint = https://s3.dataforcanada.org
no_check_bucket = true
access_key_id =
secret_access_key =
env_auth = false
```
**Upload command:**
```bash
rclone copy . dataforcanada-s3:dataforcanada/d4c-datapkg-orthoimagery/
```
**Wrangler config (sanitized):**
```toml
compatibility_date = "2024-11-11"
main = "build/worker/shim.mjs"
name = "dataforcanada-s3"
[build]
command = "cargo install worker-build && worker-build --release"
[vars]
VIRTUAL_HOST_DOMAIN = "s3.dataforcanada.org"
[[routes]]
pattern = "s3.dataforcanada.org"
custom_domain = true
[vars.PROXY_CONFIG]
[[vars.PROXY_CONFIG.buckets]]
allowed_roles = []
anonymous_access = true
backend_type = "s3"
backend_prefix = "dataforcanada/"
name = "dataforcanada"
[vars.PROXY_CONFIG.buckets.backend_options]
bucket_name = "us-west-2.opendata.source.coop"
endpoint = "https://s3.us-west-2.amazonaws.com"
region = "us-west-2"
access_key_id = ""
secret_access_key = ""
skip_signature = "true"
[[vars.PROXY_CONFIG.credentials]]
access_key_id = ""
created_at = "2025-01-01T00:00:00Z"
enabled = true
principal_name = "dataforcanada-admin"
secret_access_key = ""
[[vars.PROXY_CONFIG.credentials.allowed_scopes]]
actions = [
"get_object",
"head_object",
"put_object",
"delete_object",
"list_bucket",
"create_multipart_upload",
"upload_part",
"complete_multipart_upload",
"abort_multipart_upload",
]
bucket = "dataforcanada"
prefixes = []
[placement]
mode = "smart"
[observability]
enabled = true
```
### What I see
Every authenticated request fails with a SigV4 signature mismatch. From `wrangler tail`:
```
[WARN] multistore::auth::sigv4: SigV4 signature mismatch { access_key_id=, region=us-east-1 }
[WARN] multistore::proxy: request failed { error=signature mismatch, status=403, s3_code=SignatureDoesNotMatch }
```
I can provide more detailed logs if you need them.
### Question
Has anyone successfully used authenticated uploads (PutObject) with the Cloudflare Workers deployment?
Contributor guide
Assessment
This issue has not been assessed yet.