【发布时间】:2021-06-29 08:29:05
【问题描述】:
我正在使用与 S3 兼容的存储(数字海洋空间)来托管来自我的 Web 应用程序的图像。 为了防止盗链并尽量减少直接下载,我应用了这个策略:
{
"Id": ip referer policy example",
"Statement": [
{
"Sid": "Allow get requests originating from my server.",
"Effect": "Deny",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::bucket-name/*",
"Condition": {
"NotIpAddress": {
"aws:SourceIp": "server-ip-address"
}
}
}
]
}
这个技巧似乎奏效了,我现在无法直接访问这些文件,但是,我的 Web 应用程序也不能。我是不是做错了什么?
有没有办法调试引荐来源网址或其他东西?
【问题讨论】:
-
是否正在检索内容以供 Web 应用程序本身使用,或者您是否在 HTML 页面中提供链接/引用?
-
@JohnRotenstein 网络应用程序具有 API 访问权限并获取未签名的 URL(在我应用策略之前它确实有效)
-
“未签名的 URL”是什么意思?它是对 Digital Ocean Spaces 进行 API 调用,还是对存储桶的公共 URL 进行 HTTP/S 调用?
-
对不起,我的意思是“签名的 url”。 API 生成的用于查看私有文件的临时 URL。我想我现在明白了我的误解来自哪里......我正在调用存储桶 API 生成的 URL(临时 URL)。我实际上并没有打电话给
GetObject(它应该下载文件内容,对吧?) -
如果“最终用户”正在使用预签名 URL 在他们的浏览器中查看文件,那么请求将来自他们的浏览器和他们的 IP 地址,而不是服务器。该政策正在阻止此类访问。
标签: amazon-web-services amazon-s3 policy