我在亚马逊S3上存储了音频文件,可以从基于网络的音乐播放器应用程序以及移动应用程序访问。即使是未登录的用户也应该能够访问音乐。但是,我不希望人们使用该链接下载内容。这可以在s3中完成吗?
谢谢
答案 0 :(得分:6)
您可以根据HTTP引荐来限制访问权限。它不是防弹的(推荐人可以欺骗),但它会停止随意下载。
您使用存储分区策略来限制Referrer的可能值。
此页面上有一个示例(向下滚动一点)http://docs.aws.amazon.com/AmazonS3/latest/dev/AccessPolicyLanguage_UseCases_s3_a.html
以下是他们的例子:
{
"Version":"2008-10-17",
"Id":"http referer policy example",
"Statement":[
{
"Sid":"Allow get requests originated from www.example.com and example.com",
"Effect":"Allow",
"Principal":"*",
"Action":"s3:GetObject",
"Resource":"arn:aws:s3:::examplebucket/*",
"Condition":{
"StringLike":{
"aws:Referer":[
"http://www.example.com/*",
"http://example.com/*"
]
}
}
}
]
}
您还可以执行已过期的已签名网址,这会阻止人们从其他网站链接到您的内容。
答案 1 :(得分:1)
想到一个场景:
当您的音乐播放器应用想要播放某些内容时,它必须向您的后端询问MP3的URL。您的后端可以使用" Expires"生成URL。参数[1]将来设置为10秒。
这样,后端返回的URL只能使用10秒,这应该足以让音乐播放器从S3开始下载。
当然,如果用户在10秒窗口中看到某种HTTP嗅探器中的URL并开始下载,则用户可以下载该文件。
但是,没有防弹的方法可以保护用户免受他/她的设备访问内容的影响。如果将内容传送到设备,那么总有一种方法可以让足够技术人员亲自动手。
P.S。如果您的MP3播放器支持搜索(特别是通过发送另一个HTTP范围请求),您只需要一个单挑,您必须重新获得一个新刷新的网址" expires"来自你后端的参数。
[1] http://s3.amazonaws.com/doc/s3-developer-guide/RESTAuthentication.html
答案 2 :(得分:1)
我也遇到了这一要求,并就如何实现这一要求提供了更新的答案。
在存储桶的“权限”标签上,选择“存储桶策略”按钮,并填写以下代码:
{
"Version": "2012-10-17",
"Id": "Policy1542209806458",
"Statement": [
{
"Sid": "Explicit deny to ensure requests are allowed only from specific referer.",
"Effect": "Deny",
"Principal": "*",
"Action": "s3:*",
"Resource": "arn:aws:s3:::your-bucket-arn/*",
"Condition": {
"StringNotLike": {
"aws:Referer": [
"http://yourdomain.com/*"
]
}
}
}
]
}
这将仅允许来自您域的引荐来源的仅请求。请注意,设置您的Resource
字段并更改允许的aws:Referer
列表。
这仍然可以被欺骗,但这是直接链接S3对象的简单障碍。