我有一个带有此策略的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错误 anonymously . 可以访问上载的其他对象 non-anonymously (例如,通过S3控制台) . 怎么了?
回顾一下:
-
匿名用户:
-
可以将文件上传到存储桶中
-
可以自己或任何其他用户从桶上传文件中下载文件
-
经过身份验证的IAM用户:
-
可以将文件上传到存储桶中
-
可以自行下载桶上传文件
-
cannot download files uploaded by an anonymous user
PS:根据IAM策略模拟器,匿名上传的文件应该可以由IAM用户下载 .
1 回答
这实际上是expected behavior:
我犯的错误是假设使用
*
主体设置策略意味着"everyone",而实际上只是意味着"the anonymous user" . 并且用户(包括特殊匿名用户)的对象"owned"不能被其他用户访问(除非您在我假设的对象本身上设置策略) . 事实上其他用户可以__769315_该对象因为它有权使用该桶并不意味着它可以读取其内容 .