Freezing buckets to something other than a mounted file system requires a custom script specified by the index's coldToFrozenScript parameter. The process is similar for both "classic" and SmartStore indexes:
Splunk provides an example script in $SPLUNK_HOME/bin/coldToFrozenExample.py.
If you're considering S3 and no other lower cost alternative like S3 Glacier, you may want to look at SmartStore (native S3 integration) instead.
There's nearly a decade of prior art on various ways to migrate frozen buckets to S3 but no "best practices" I'm aware of for implementing custom coldToFrozenScript scripts beyond the example provided by Splunk.
In effect, you'll be running an AWS CLI S3 command to copy <bucket>/rawdata/journal.gz to the S3 bucket of your choice.