Python function + AWS S3 Connection: 403 "HeadersNotSigned: host" - same call works from Deluge invokeurl

Python function + AWS S3 Connection: 403 "HeadersNotSigned: host" - same call works from Deluge invokeurl

Summary
Calling AWS S3 through an existing Connection from a Python function always fails with HTTP 403. AWS reports the host header is present in the request but not included in the SigV4 signature. The identical URL and Connection work from Deluge invokeurl.

Environment
Zoho One Enterprise, US DC. Function language: Python 3.12.5 (new multi-language Functions UI). Connection: service "AWS S3", region us-east-1, link name awss3useast1.

Repro (Python, using the documented ZRC pattern)

from zrc import ZRC, RequestConfig

def runner(context, basicIO):
cfg = RequestConfig()
cfg.setConnection("awss3useast1")
resp = ZRC.get("https://s3.us-east-1.amazonaws.com/walkthruphoto.com/data/products.json", cfg)
basicIO.write(resp.getData())

Result: ConnectionError: Connection Error: 403 with body:

<Error><Code>AccessDenied</Code>
<Message>There were headers present in the request which were not signed</Message>
<HeadersNotSigned>host</HeadersNotSigned></Error>

Same call from Deluge - works (200)

resp = invokeurl
[
url :"https://s3.us-east-1.amazonaws.com/walkthruphoto.com/data/products.json"
type :GET
connection:"awss3useast1"
detailed:true
];

Also tried, same 403

  • context.getConnection("awss3useast1").makeRequest(url, "GET") (low-level connector)
  • Passing Host and x-amz-content-sha256 headers explicitly
  • Bare service root https://s3.us-east-1.amazonaws.com/

Expected
A Python/Java/Node function using a Connection should produce the same signed request that Deluge invokeurl does - i.e. host included in SignedHeaders.

Impact
S3 reads/writes cannot be moved from Deluge to Python functions until this is fixed. CRM API calls via ZRC.get("/crm/v8/...") work fine - the problem is only with external Connections (at least AWS S3).