【问题标题】:Unable to access anonymously uploaded S3 objects when authenticated身份验证后无法访问匿名上传的 S3 对象
【发布时间】: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 用户可以下载的。

【问题讨论】:

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


    【解决方案1】:

    这其实是expectedbehavior

    不可能有一个匿名的 Put 到 S3 和一个私有的 Get。原来匿名用户拥有该对象。

    我犯的错误是假设使用* 主体设置策略意味着“每个人”,而实际上只意味着“匿名用户”。一个用户(包括特殊的匿名用户)“拥有”的对象不能被另一个用户访问(除非你要对我假设的对象本身设置策略)。其他用户可以“看到”该对象,因为它有权“列出”存储桶,但这并不意味着它可以读取其内容。

    【讨论】:

    • +1 用于寻找解决方案。我怀疑* 不限于唯一的匿名用户,但实际上我或其他任何人都可以使用我的凭据上传到您的存储桶,然后我将拥有该对象。如果我没有授予您阅读它的权限,您就不能——您所能做的就是删除它,因为我拥有该对象,但您拥有存储桶。允许匿名上传到 S3 的好案例并不多。
    • 其实我很确定,即使桶上允许匿名上传,但如果经过身份验证,您将无法上传。因为只允许匿名用户。下载时肯定会发生这种情况。
    猜你喜欢
    • 1970-01-01
    • 2017-11-02
    • 1970-01-01
    • 2018-01-06
    • 2018-06-20
    • 2012-10-14
    • 1970-01-01
    • 2019-09-20
    • 2018-12-22
    相关资源
    最近更新 更多