首页 > 解决方案 > AWS S3:无法从具有公共访问权限的存储桶中获取非拥有对象(通过非身份验证方式)

问题描述

所以情况如下:

--> 在 S3 控制台中浏览时,A_2 上传的文件正确地将完全控制权交给了 A_1

但是 - Cloudfront 在 A_2 拥有的文件上获得访问被拒绝(在 A_1 拥有的文件上运行良好) - 使用 S3 Web url,我可以访问 A_1 拥有的文件(存储桶上的公共 ACL)但不是 A_2 拥有

问题:为什么存储桶策略不适用于 A_2 拥有的 A_1 具有 FULL_CONTROL 的文件?

注意 - 我能够通过为我的云端创建访问身份并要求 A_2 专门读取云端规范帐户 ID 来“规避”该问题,但这很麻烦。


桶策略:

{
  "Version": "2012-10-17",
  "Statement": [
    {
        "Sid": "Grant read access to the world",
        "Effect": "Allow",
        "Principal": "*",
        "Action": "s3:GetObject",
        "Resource": "arn:aws:s3:::my_bucket/*"
    },
    {
        "Sid": "Grant write access to other account user",
        "Effect": "Allow",
        "Principal": {
            "AWS": "arn:aws:iam::8566072xxxxx:root"
        },
        "Action": [
            "s3:ListBucket",
            "s3:PutObject"
        ],
        "Resource": [
            "arn:aws:s3:::my_bucket/*",
            "arn:aws:s3:::my_bucket"
        ]
    }
  ]
}

标签: amazon-web-servicesamazon-s3

解决方案


S3 访问权限受制于三组概念上不同的测试——IAM 主体(用户或角色)、存储桶和对象上下文。

如果存储桶和对象所有者相同,则可以在存储桶策略中授予对对象的访问权限,该策略在存储桶上下文中进行评估。如果所有者不同,则对象所有者必须使用对象 ACL 来授予权限。

https://docs.aws.amazon.com/AmazonS3/latest/dev/access-control-auth-workflow-object-operation.html

固定 ACL在bucket-owner-full-control历史上并没有改变实际的对象所有权,它只是让存储桶拥有者能够通过用户和角色策略授予对对象的访问权限,而不是存储桶策略。

在 2020 年,AWS 引入了一项名为S3 对象所有权的新功能,该功能允许配置存储桶,以便bucket-owner-full-control在创建对象期间使用 ACL 时,其行为更直观并自动将对象所有权分配给存储桶所有者。

这个问题是在引入该功能之前提出的,用户策略是可以在控制台中访问对象的原因。

存储桶策略可以明确拒绝对不属于存储桶所有者的对象的访问,但不能授予它们。


推荐阅读