首页 文章

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

提问于
浏览
0

我有一个带有此策略的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 回答

  • 3

    这实际上是expected behavior

    不可能有一个匿名的放入S3和一个私人的Get . 原来匿名用户拥有Object .

    我犯的错误是假设使用 * 主体设置策略意味着"everyone",而实际上只是意味着"the anonymous user" . 并且用户(包括特殊匿名用户)的对象"owned"不能被其他用户访问(除非您在我假设的对象本身上设置策略) . 事实上其他用户可以__769315_该对象因为它有权使用该桶并不意味着它可以读取其内容 .

相关问题