Do you still get the timeout if you build a standalone program that just uses Arrow C++? It might give us some more information if you run your code with S3's log level turned up. So instead of using EnsureS3Initialized, initialize S3 manually like,
S3GlobalOptions options; options.log_level = S3LogLevel::Debug; InitializeS3(options);
