使用以下存储桶策略时,发现它成功限制了PUT访问,但是GET允许访问已创建的对象,尽管没有任何东西允许此操作。
我可以使用以下curl命令将文件PUT到中,来源IP地址为:
文件上传成功,并在S3控制台中出现。现在,由于某种原因,我可以从互联网任何地方获取文件。
这仅适用于使用以上方法上传的文件。在S3网络控制台上传文件时,我无法使用curl获取文件(访问被拒绝)。因此,我认为这是一个对象级别的权限问题。尽管我不明白为什么Bucket策略不会隐式地拒绝此访问。
在控制台查看对象级别权限时,通过控制台(方法1)上传的文件和从允许的
此外 - 当尝试使用Lambda脚本(boto3
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowPut",
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::<BUCKET>/*",
"Condition": {
"IpAddress": {
"aws:SourceIp": [
"<IP ADDRESS>"
]
}
}
}
]
}
我可以使用以下curl命令将文件PUT到中,来源IP地址为:
curl https://<BUCKET>.s3-<REGION>.amazonaws.com/ --upload-file test.txt
文件上传成功,并在S3控制台中出现。现在,由于某种原因,我可以从互联网任何地方获取文件。
curl https://<BUCKET>.s3-<REGION>.amazonaws.com/test.txt -XGET
这仅适用于使用以上方法上传的文件。在S3网络控制台上传文件时,我无法使用curl获取文件(访问被拒绝)。因此,我认为这是一个对象级别的权限问题。尽管我不明白为什么Bucket策略不会隐式地拒绝此访问。
在控制台查看对象级别权限时,通过控制台(方法1)上传的文件和从允许的
<IP地址>
(方法2)上传的文件之间唯一的区别是方法2中的文件没有“所有者”,权限或元数据,而方法1中的文件具有所有这些内容。此外 - 当尝试使用Lambda脚本(boto3
download_file()
)获取对象时,它对使用方法2上传的对象失败,但对使用方法1上传的对象成功。
s3:DeleteObject
添加到 NotAction 列表中。这里有很多双重否定 - 基本上是说 - 如果用户不是这个用户并且操作不是这些操作,则拒绝该操作。所以即使现在是你的用户,操作是删除,但它不是那些操作之一,所以被拒绝了。这不会授予任何匿名用户权限,其他语句只授予 PutObject 权限(而且仅限于指定的 IP)。 - Chris Simon