经过身份验证后,无法访问匿名上载的S3对象

时间:2016-01-28 00:04:23

标签: amazon-web-services amazon-s3 amazon-iam

我有一个带有此策略的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控制台)。发生了什么事?

回顾一下:

  • 匿名用户:
    • 可以将文件上传到存储桶
    • 可以自行或由任何其他用户下载文件桶上传文件
  • 经过身份验证的IAM用户:
    • 可以将文件上传到存储桶
    • 可以自行下载文件桶中的文件
    • 无法下载匿名用户上传的文件

PS:根据IAM策略模拟器,匿名上传的文件应该可由IAM用户下载。

1 个答案:

答案 0 :(得分:3)

这实际上是expected behavior

  

无法匿名放入S3和私有Get。结果是匿名用户拥有对象。

我犯的错误是假设使用*主体设置策略意味着"每个人",而实际上只是意味着#34;匿名用户"。对象"拥有"用户(包括特殊的匿名用户)无法被其他用户访问(除非您在我假设的对象本身上设置策略)。其他用户可以"看到"该对象,因为它有权列出" list"桶并不意味着它可以读取其内容。