我将视频文件存储在 s3 存储桶中。
我的文件可以使用名为Video DownloadHelper
的插件下载。它有两个选项下载Using Browser
和下载Using Companion App
。
我通过使用特定的 http 引用器设置存储桶策略来限制 S3 文件的访问。
现在添加此策略后,无法下载Using Browser
但可以下载Using Companion App
。
如何限制使用第二种方法下载文件?我设置的存储桶策略如下所示。任何帮助将不胜感激。谢谢。
{
"Version": "2012-10-17",
"Id": "http referer policy example",
"Statement": [
{
"Sid": "Allow get requests referred by 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/*"]}
}
},
{
"Sid": "Explicit deny to ensure requests are allowed only from specific referer.",
"Effect": "Deny",
"Principal": "*",
"Action": "s3:*",
"Resource": "arn:aws:s3:::examplebucket/*",
"Condition": {
"StringNotLike": {"aws:Referer": ["http://www.example.com/*","http://example.com/*"]}
}
}
]
}
一旦您的文件加载到浏览器中,就可以下载它。 您可以做的是为图像生成一个签名 URL,该 URL 在短时间内有效。
将图像的src
设置为重定向到signed URL generated by the backend
的 API,因此在检查浏览器时,它将signed URL
显示为SRC
但该 URL 不能重复使用。但这只会阻止重复使用图像 URL,或者下载帮助程序正在使用 URL 下载图像。在这里,每当用户刷新页面时,都会生成一个新的URL并发送到浏览器。
例如:
<img src=https://api-url/image/image-id>
并在您的后端执行类似于
response.redirect(signed-url)