我想允许任何人在我的网站上播放位于我的 s3 中的视频作为src
标签<video>
,但不允许人们src
在他们的网站上使用它或通过在浏览器栏中输入 url 直接播放视频。
我不希望人们这样做:
我不希望以下 HTML 出现在 http://your-site.com 上,而只出现在http://my-site.com上:
<html>
<video src="https://s3.amazonaws.com/my-bucket/my-video.mp4"></video>
</html>
我已经看到了一些关于此的SO 链接,但我想用代码来谈谈,因为我无法让这些解决方案为我工作。
这是我目前不起作用的存储桶策略:
{
"Version": "2008-10-17",
"Statement": [
{
"Sid": "AllowPublicRead",
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::my-bucket/*",
"Condition": {
"StringLike": {
"aws:Referer": [
"https://my-site.com/*"
]
}
}
}
}
两个问题:
- 为了测试我的存储桶策略,我将上面的 HTML 放在本地主机上的测试文件中,果然我可以通过键入来访问视频
http://localhost/test.html
。为什么我的存储桶策略不能阻止这种情况?(我只希望它从 开始工作http://my-site.com/test.html
) - 为了防止人们将 s3 URL 输入浏览器栏,我想我需要一个与存储桶策略不同的解决方案,因为从 AWS 文档中我不清楚如何防止通过浏览器直接访问。我正在考虑散列网址以使其难以猜测。也许有使用 AWS 存储桶策略或其他解决方案的方法?
更清楚地说,我的文件存储在 s3 上,但它们是由亚马逊的 CloudFront 交付的。所以我的 CloudFront url src 目前是 media.my-site.com/my-video.mp4。CNAME 是 media.my-site.com。