Amazon S3 - Returns 403 错误而不是 404 尽管有 GetObject 允许
Amazon S3 - Returns 403 error instead of 404 despite GetObject allowance
我已将我的 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"
]
}
}
}
]
}
(使用 ListBucket
命令更新,如 Mark B 所指出的那样。)
我在 SO 上发现了几个相关问题(例如 this and this),但他们的解决方案是基于授予 每个人 访问存储桶内容的权限。
而且这种方法行之有效,因为如果我取消我的 IP 过滤器,则会针对丢失的文件给出 404 错误而不是 403。但这违背了 IP 过滤器的目的。
我了解到here:
S3 returns a 403 instead of a 404 when the user doesn't have
permission to list the bucket contents.
但是我找不到让存储桶为丢失的文件生成 404 错误代码的方法而不删除我的 IP 白名单过滤器。这就是包含用于检索对象的 GetObject
命令和用于列出对象的 ListBucket
命令。
我的推理如下:如果允许 IP 地址访问存储桶的内容,那么 S3 不应该为这些 IP 生成 404 错误而不是 403 错误吗?如何在不删除现有过滤器的情况下?
注意您引用的文档:
S3 returns a 403 instead of a 404 when the user doesn't have
permission to list the bucket contents.
您授予的GetObject
权限仅授予获取一个存在的对象的权限,不授予列出存储桶中所有对象的权限。您需要将 ListBucket
权限添加到存储桶策略中。有关 S3 IAM 权限及其涵盖的 S3 操作的完整列表,请参阅 this page。
我已经解决了 S3 发出 403 而不是 404 错误的问题,不是通过更改存储桶策略,而是通过简单地在存储桶设置中添加 'Everyone' 列表策略:
我觉得它不如设置存储桶策略那么优雅,但它至少现在有效。
我的随附存储桶策略现在仍然基于仅将几个 IP 列入白名单:
{
"Version": "2012-10-17",
"Id": "S3PolicyId1",
"Statement": [
{
"Sid": "IPDeny",
"Effect": "Deny",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::website-bucket/*",
"Condition": {
"NotIpAddress": {
"aws:SourceIp": [
"10.1.1.0/22",
"11.1.1.0/22"
]
}
}
}
]
}
我的问题是我的计算机时钟设置不正确。 (由于 DST 问题)
我已将我的 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"
]
}
}
}
]
}
(使用 ListBucket
命令更新,如 Mark B 所指出的那样。)
我在 SO 上发现了几个相关问题(例如 this and this),但他们的解决方案是基于授予 每个人 访问存储桶内容的权限。
而且这种方法行之有效,因为如果我取消我的 IP 过滤器,则会针对丢失的文件给出 404 错误而不是 403。但这违背了 IP 过滤器的目的。
我了解到here:
S3 returns a 403 instead of a 404 when the user doesn't have permission to list the bucket contents.
但是我找不到让存储桶为丢失的文件生成 404 错误代码的方法而不删除我的 IP 白名单过滤器。这就是包含用于检索对象的 GetObject
命令和用于列出对象的 ListBucket
命令。
我的推理如下:如果允许 IP 地址访问存储桶的内容,那么 S3 不应该为这些 IP 生成 404 错误而不是 403 错误吗?如何在不删除现有过滤器的情况下?
注意您引用的文档:
S3 returns a 403 instead of a 404 when the user doesn't have permission to list the bucket contents.
您授予的GetObject
权限仅授予获取一个存在的对象的权限,不授予列出存储桶中所有对象的权限。您需要将 ListBucket
权限添加到存储桶策略中。有关 S3 IAM 权限及其涵盖的 S3 操作的完整列表,请参阅 this page。
我已经解决了 S3 发出 403 而不是 404 错误的问题,不是通过更改存储桶策略,而是通过简单地在存储桶设置中添加 'Everyone' 列表策略:
我觉得它不如设置存储桶策略那么优雅,但它至少现在有效。
我的随附存储桶策略现在仍然基于仅将几个 IP 列入白名单:
{
"Version": "2012-10-17",
"Id": "S3PolicyId1",
"Statement": [
{
"Sid": "IPDeny",
"Effect": "Deny",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::website-bucket/*",
"Condition": {
"NotIpAddress": {
"aws:SourceIp": [
"10.1.1.0/22",
"11.1.1.0/22"
]
}
}
}
]
}
我的问题是我的计算机时钟设置不正确。 (由于 DST 问题)