S3 works just fine for me.
Have you set the bucket permissions to allow for public read for GETs and optionally, LISTs?
Once you've done that, there is nothing unusual about their generated urls.
However, If your content must be only accessed by pre-authorized users, you'll need to add code to deal with S3's unique authentication scheme as well.