通过 Amazon CloudFront 访问文件时如何隐藏实际文件名?

How to hide the actual file name when accessing files through Amazon CloudFront?

有一个 S3 存储桶,里面有数百万个 MP3 文件。每个音乐文件及其预览 MP3 文件都位于该存储桶内的一个文件夹中。例如对于给定的音乐:

/music/123456/file_master.mp3 /music/123456/file_preview.mp3

我想让最终用户能够通过 CloudFront 及其 Web Streaming 功能访问预览文件。所以我已经设置了 Cloud Front,因此用户可以单击指向 CloudFront 上的文件的 link:

http://blahblah.cloudfont.net/music/123456/file_preview.mp3

除了用户可以抓取文件 URL,用 _master 替换 _preview 部分然后收听整个曲目之外,它工作完美。不幸的是,将主文件和预览文件移动到两个不同的位置不是一种选择,因为它们不仅有数百万个,而且摄取系统也在不断发布具有该结构的文件。

有没有办法隐藏文件名and/or文件路径?例如像 http://blahblah.cloudfront.net/music/123456/ABC 这样的东西就完美了。

我认为 CloudFront 不支持您建议的那种 URL 重写,但您可以通过为 CloudFront 分发添加新的行为并使用 "Path Pattern" 在该行为中仅匹配 f.ex。 “*_preview.mp3” 然后使用行为优先级将新行为放在分布的默认行为之前(行为按顺序处理,第一个匹配),最后将默认行为设置为 "Restrict Viewer Access" 设置为 "Yes",而在新行为中将 "Restricted Viewer Access" 设置为 "No",然后仅匹配“*_preview.mp3

有关路径模式的更多信息,请参见http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/distribution-web-values-specify.html#DownloadDistValuesPathPattern