AWS S3 region call step prevening upload

Describe the issue/error/question

I am attempting to use the AWS S3 node to upload some objects. The request fails.

I tried to roll my own node to upload files to S3 and I was successful. Then I went back to investigate the n8n AWS S3 node to understand why it failed.

What is the error message (if any)?

The error message is the following:

NodeApiError: Forbidden - perhaps check your credentials?
    at Object.requestWithAuthentication (/usr/local/lib/node_modules/n8n/node_modules/n8n-core/src/NodeExecuteFunctions.ts:1571:10)
    at processTicksAndRejections (node:internal/process/task_queues:96:5)
    at Object.awsApiRequestSOAP (/usr/local/lib/node_modules/n8n/node_modules/n8n-nodes-base/nodes/Aws/S3/GenericFunctions.ts:85:19)
    at Object.execute (/usr/local/lib/node_modules/n8n/node_modules/n8n-nodes-base/nodes/Aws/S3/AwsS3.node.ts:799:22)
    at Workflow.runNode (/usr/local/lib/node_modules/n8n/node_modules/n8n-workflow/src/Workflow.ts:1270:19)
    at /usr/local/lib/node_modules/n8n/node_modules/n8n-core/src/WorkflowExecute.ts:939:29

Line 799 in the AWS S3 node is a call to define the region of the upload. It seems the way my AWS account is set up (over which I do not have control) is not allowed to make this particular GET request.

However, this call does not seem to be needed as I could upload my file with my custom node that did not have this call.

The region can be taken from the AWS credentials (that’s what I did in my node), so why exactly is there an additional call to define the upload region? Perhaps there is something on AWS side where you restrict the region based on the bucket? I have no use for this function personally, but this check prevents me from doing something that would otherwise work fine.

Although the issue is not in n8n (rather AWS account permissions configuration), might there be a solution that would allow me to use the official n8n AWS S3 node? For example: like many overriding additional fields, make the region call optional upon request, rather than mandatory?

Please share the workflow

Share the output returned by the last node

The output of the last node is the binary of a sample file.

Information on your n8n setup

  • n8n version: 0.212.1
  • Database you’re using: SQLite
  • Running n8n with the execution process: own
  • Running n8n via: Docker