【发布时间】:2012-07-16 09:04:39
【问题描述】:
我希望允许任何人在我的网站上以src 的<video> 标签播放位于我的s3 中的视频,但不允许 允许人们将其用作@987654325 @ 在他们的网站上或通过在浏览器栏中输入网址直接播放视频。
我不希望人们这样做:
我不希望以下 HTML 出现在 http://your-site.com 上,而只出现在 http://my-site.com 上:
<html>
<video src="https://s3.amazonaws.com/my-bucket/my-video.mp4"></video>
</html>
我在这方面看到过一些 SO links,但我想用代码来谈谈,因为我无法让这些解决方案为我工作。
这是我目前不有效的存储桶政策:
{
"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。
【问题讨论】:
-
“我正在考虑对 url 进行哈希处理以使其难以猜测。” — 默默无闻的安全性是一个糟糕的计划。
-
@DC_,谢谢,我不会那样做。您对我应该怎么做有什么建议吗?
-
@tim 不幸的是,我几乎没有使用 AWS 的经验,所以我无法在存储桶策略方面为您提供帮助。我想我有一个想法,我会把它作为答案发布。
-
@timpeterson,对不起,我以为你在谈论 CloudFront -> S3。我的(已删除)评论不适用。
-
@Matthew 我的文件存储在 s3 上,但它们由 CloudFront 交付。所以我的
srcCloudFront 网址目前类似于media.my-site.com/my-video.mp4。这有助于更好地解释吗?我会在我的问题中更清楚地说明这一点。
标签: php amazon-s3 amazon-web-services referrer hotlinking