Your crossdomain file needs to be on the server with the flash app that's doing the loading, not with the files its loading in. Then you specify the S3 domain as an allowed domain.
<allow-access-from domain="s3.amazonaws.com" />
Edit: Ok, I'm officially confused.
It appears JB is right in his comment about me having it the wrong way round. From here:
Whenever Flash Player 7 detects an
out-of-domain data-loading request,
the player tries to find a policy file
on the server from which it attempts
to load data. If a policy file exists
and it grants access to the origin
domain of the Flash movie making the
request, then the operation succeeds.
However, we do this exact thing (load images into a flash component from a remote Amazon server) on one of our client web sites, yet our crossdomain.xml
file is in the root of the loading web server—the Amazon buckets don't contain any policy files.
So how does our site work? According to the documentation, it shouldn't!
Edit 2
As per Wouter's comment, what I am doing is a special case which explains why it works for me even though my crossdomain files are in the wrong place...