Start off with: https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/private-content-restricting-access-to-s3.html
That'll allow you to stick to "private" files in S3 by default, but with CloudFront being able to access them (best practice).
Then: https://django-storages.readthedocs.io/en/latest/backends/amazon-S3.html#cloudfront-signed-urls
Links to the right places if you do really want private media files rather than fully public URLs.