A Content Delivery Network (CDN) is a (typically global) network of servers that caches and delivers content to users based on their geographic location.
When we give users a URL to an S3 object, they'll download that object from the S3 service in the region that our bucket lives in (for me, that's us-east-2, near Ohio in the USA).
If a user in Australia tries to download that object, they're going to have to wait for the data to travel from Ohio to Australia... and that's a long way! A CDN, like AWS CloudFront, can help with that. It takes a static asset, like an image or video, and caches it on servers all over the world. When a user requests the asset, they get it from the server closest to them, which is much faster.

In the example above, the "origin" server is an S3 bucket, and the "edge" servers are CloudFront servers. The origin is in the US, and whenever it updates, the edge servers update their caches. Then, when a user connects in Australia, they get the copy of the asset from the edge server in Australia. Much faster!
Let's stand up a CloudFront distribution in front of our S3 bucket.
I'm not going to cover every possible configuration option here, read the AWS documentation if you're interested. My goal is to cover the important stuff from a conceptual standpoint.
Behind the scenes, creating the distribution through the UI also updates the S3 bucket policy to allow the newly created distribution to access files in the bucket. If you want to check the new policy, go back to your S3 bucket, click on the "Permissions" tab, and look for "Bucket Policy".
Run and submit the CLI tests after ensuring that the distribution is fully deployed (you might be able to access the object while CloudFront is still deploying the distribution to all edge locations).