身份验证后无法访问匿名上传的 S3 对象
Posted
技术标签:
【中文标题】身份验证后无法访问匿名上传的 S3 对象【英文标题】:Unable to access anonymously uploaded S3 objects when authenticated 【发布时间】:2016-01-28 00:04:22 【问题描述】:我有一个采用此策略的 S3 存储桶:
"Version": "2012-10-17",
"Statement": [
"Sid": "",
"Effect": "Allow",
"Principal": "*",
"Action": [
"s3:DeleteObject",
"s3:GetObject",
"s3:PutObject"
],
"Resource": "arn:aws:s3:::my-bucket/*"
,
"Sid": "",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:ListBucket",
"Resource": "arn:aws:s3:::my-bucket"
]
无需任何身份验证即可从任何 Web 客户端上传和删除对象,例如卷曲。
但是,如果我作为 IAM 用户进行身份验证(没有任何策略,甚至没有 AmazonS3ReadOnlyAccess
策略),我在尝试访问 (GET
) 匿名上传的对象时会收到 403 错误.可以访问非匿名(例如通过 S3 控制台)上传的其他对象。发生了什么?
回顾一下:
匿名用户: 可以上传文件到桶中 可以自己或任何其他用户从bucket上传中下载文件 经过身份验证的 IAM 用户: 可以上传文件到桶中 可以自己从bucket上传下载文件 无法下载匿名用户上传的文件PS:根据 IAM Policy Simulator,匿名上传的文件应该是 IAM 用户可以下载的。
【问题讨论】:
【参考方案1】:这其实是expectedbehavior:
不可能有一个匿名的 Put 到 S3 和一个私有的 Get。原来匿名用户拥有该对象。
我犯的错误是假设使用*
主体设置策略意味着“每个人”,而实际上只意味着“匿名用户”。一个用户(包括特殊的匿名用户)“拥有”的对象不能被另一个用户访问(除非你要对我假设的对象本身设置策略)。其他用户可以“看到”该对象,因为它有权“列出”存储桶,但这并不意味着它可以读取其内容。
【讨论】:
+1 用于寻找解决方案。我怀疑*
不限于唯一的匿名用户,但实际上我或其他任何人都可以也使用我的凭据上传到您的存储桶,然后我将拥有该对象。如果我没有授予您阅读它的权限,您就不能——您所能做的就是删除它,因为我拥有该对象,但您拥有存储桶。允许匿名上传到 S3 的好案例并不多。
其实我很确定,即使桶上允许匿名上传,但如果经过身份验证,您将无法上传。因为只允许匿名用户。下载时肯定会发生这种情况。以上是关于身份验证后无法访问匿名上传的 S3 对象的主要内容,如果未能解决你的问题,请参考以下文章
我在服务器上的iis上的身份验证选项中去掉了匿名访问,启用了集成windows身份验证
Spring Security 3.1.4:由于anonymousUser身份验证无法访问目标页面
即使 IAM 策略授予访问权限,Web 应用程序也无法访问私有 s3 文件