首页 文章

AWS S3 Web控制台覆盖存储桶策略

提问于
浏览
2

目前,我有一个应用于测试存储区的策略,旨在防止用户使用“公共读取”和“公共读写”ACL上载s3对象 .

当我尝试通过命令行上传时,请求被“拒绝访问”按预期成功阻止:

Write-S3Object -bucketname testbucket -File C:\Users\user\Desktop\DemoFolder\secret_data.txt -cannedACLName public-read

与“公共读写”相同的结果:

Write-S3Object -bucketname testbucket -File C:\Users\user\Desktop\DemoFolder\secret_data.txt -CannedACLName public-read-write

但是当我通过Web控制台GUI访问s3bucket时,我可以上传公共对象 . 同时通过“公开”按钮操纵现有的“私人”对象 .

这是存储桶策略:

{
"Version": "2012-10-17",
"Statement": [
    {
        "Sid": "DenyPublic",
        "Effect": "Deny",
        "Principal": "*",
        "Action": [
            "s3:PutObject",
            "s3:PutObjectAcl"
        ],
        "Resource": "arn:aws:s3:::testbucket/*",
        "Condition": {
            "StringEquals": {
                "s3:x-amz-acl": [
                    "public-read",
                    "public-read-write"
                ]
            }
        }
    }
]

此处还有来自用户的s3访问策略:

{
"Version": "2012-10-17",
"Statement": [
    {
        "Effect": "Allow",
        "Action": "s3:*",
        "Resource": "*"
    }
]

}

我觉得修复或逻辑非常简单 . 我只是不能把手指放在上面 .

1 回答

  • 2

    我认为这里发生的事情是AWS控制台没有触发您的拒绝策略,因为它没有使用预设ACL . 相反,它在上传文件后明确地向AllUsers组授予READ_ACP权限(使用x-amz-grant-read标头) .

    我设置了一个类似的策略并测试了PutObject上的固定ACL方法(它失败了):

    $ aws s3 cp myfile s3://B/K --acl public-read
    Result: Access Denied
    

    然后我测试了非ACL拷贝,然后使用固定ACL方法对对象进行ACL更新(上传成功,但ACL更新失败):

    $ aws s3 cp myfile s3://B/K
    Result: OK
    
    $ aws s3api put-object-acl --bucket B --key K --acl public-read
    Result: Access Denied
    

    然后我尝试了AllUsers组的授权方法(它成功了):

    $ aws s3 cp myfile s3://B/K
    Result: OK
    
    $ aws s3api put-object-acl --bucket B --key K --grant-read uri=http://acs.amazonaws.com/groups/global/AllUsers
    Result: OK
    

    最后两个测试尝试做同样的事情(上传一个对象并使其具有世界可读性),但是他们以不同的方式做到这一点,一个被你的策略拒绝而另一个则没有 .

相关问题