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

2023-12-24

目前,我有一个应用于测试存储桶的策略,该策略旨在阻止用户使用“公共读取”和“公共读写”ACL 上传 s3object。

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

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

与“public-read-write”结果相同:

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": "*"
    }
]

}

我觉得修复或逻辑非常简单。我就是无法指指点点。


我认为这里发生的情况是 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

最后两个测试尝试做同样的事情(上传一个对象并使其可读),但它们以不同的方式进行,其中一个被您的策略拒绝,而另一个则没有。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

AWS S3 Web 控制台覆盖存储桶策略 的相关文章

随机推荐