In 1.x, both the KinesisConfig (inStream) and S3Config (outStream) have its own setting of aws region. That means you can run the s3-loader in region A to consume data from Kinesis data streaming (region A) and persist raw/enriched events to S3 on region B.
Since 2.x, region is a global setting outside of "input" and "output" sections. The code logic always get the region from here even though I configure the s3 custom endpoint.
AWS client SDK provides the interface to turn on global bucket access. But snowplow-s3-loader has not exposed this setting in its pipeline configuration. Please review it and fix it.