【发布时间】:2016-10-09 01:11:49
【问题描述】:
我已将我的 S3 存储桶设置为 this tutorial,以仅接受来自特定 IP 地址的请求。但即使这些 IP 被允许执行GetObject,对于任何丢失的文件,它们都会得到 403 错误而不是 404。
我更新的存储桶策略是(使用虚构的 IP 地址):
{
"Version": "2012-10-17",
"Id": "S3PolicyId1",
"Statement": [
{
"Sid": "IPDeny",
"Effect": "Deny",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::www.bucketname.com/*",
"Condition": {
"NotIpAddress": {
"aws:SourceIp": [
"100.100.100.0/22",
"101.101.101.0/22"
]
}
}
},
{
"Sid": "ListItems",
"Effect": "Deny",
"Principal": "*",
"Action": "s3:ListBucket",
"Resource": "arn:aws:s3:::www.bucketname.com",
"Condition": {
"NotIpAddress": {
"aws:SourceIp": [
"100.100.100.0/22",
"101.101.101.0/22"
]
}
}
}
]
}
(如 Mark B 所指出的,已使用 ListBucket 命令更新。)
我在 SO 上发现了几个相关的问题(例如 this 和 this),但他们的解决方案是基于授予每个人访问存储桶内容的权限。
这种方法很有效,因为如果我解除 IP 过滤器,则会为丢失的文件而不是 403 给出 404 错误。但这违背了 IP 过滤器的目的。
我了解到here:
当用户没有时,S3 返回 403 而不是 404 列出存储桶内容的权限。
但我找不到方法让存储桶为丢失的文件生成 404 错误代码删除我的 IP 白名单过滤器。这就是包含用于检索对象的GetObject 命令和用于列出对象的ListBucket。
我的推理如下:如果允许 IP 地址访问存储桶的内容,那么 S3 不应该为这些 IP 生成 404 错误而不是 403 吗?我该如何在不删除现有过滤器的情况下做到这一点?
【问题讨论】:
标签: amazon-s3 http-status-code-404 http-status-code-403