I've often seen confusion about these two - Amazon S3 vs Cloudfront. People do get confused on what is the best option for them, and I don't blame them. The whole Amazon jungle is a tough one to navigate around! I always find myself writing long emails or having long conversations explaining the difference. We were very recently planning a Joomla 1.5 -> Joomla 3 migration for a news/video site and a part of the plan was of course performance improvements. Eventually, this question did come up. So here's a quick primer on how to decide what's the right thing for you.
From a Joomla perspective, you will need to use an extension like Easysocial or Jomsocial that supports uploading media like photos, avatars to Amazon S3.
Amazon CloudFront (CDN)
Cloudfront is Amazon's CDN service. Now what a CDN does is creates multiple copies of your content and stores them on servers across the globe. When your visitors request any files, they are then served by the CDN server closest to their location. This greatly speeds up load times. Depending on your site and how you have set this up, most dynamic sites can achieve significant improvements in load time. The CDN servers are optimized for speedy loading. When you use a CDN, you still need to host the 'original copy of any file on your site because if any of the CDN servers do not have a copy, it will fetch it from your server. So you don't save on storage costs here unless of course, you use CDN in tandem with S3! I'd highly recommend the CDN plugin from nonumber.nl that should make setting up a CDN for your Joomla site a breeze.
Hope that clears confusion, if there are still any questions - shoot away in the comments below!