首页 > 解决方案 > 允许匿名上传到 S3 但我是文件的所有者

问题描述

我有这种情况,并试图弄清楚一段时间。交易是我有一个 S3 存储桶,任何人都只能匿名上传到存储桶,即无需登录。所以他们只有写权限 - 但不能查看或做任何其他事情。将项目添加到存储桶后,我可以进去查看、下载、编辑等 - 所以完全权限(我是存储桶所有者)。

问题:我设置了允许匿名上传到我的存储桶的策略,然后让我查看 S3 存储桶中的项目 - 但是我无权对文件执行任何操作。

我究竟做错了什么?

{
   "Version": "2012-10-17",
   "Statement": [
       {
           "Sid": "allow-anon-put",
           "Effect": "Allow",
           "Principal": {
               "AWS": "*"
           },
           "Action": "s3:PutObject",
           "Resource": "arn:aws:s3:::testbucket123/*",
           "Condition": {
               "StringEquals": {
                   "s3:x-amz-acl": "bucket-owner-full-control"
               }
           }
       },
       {
           "Sid": "deny-other-actions",
           "Effect": "Deny",
           "NotPrincipal": {
               "AWS": "arn:aws:iam::123:root"
           },
           "NotAction": [
               "s3:PutObject",
               "s3:PutObjectAcl"
           ],
           "Resource": "arn:aws:s3:::testbucket123/*"
       }
   ]
}

任何帮助或提示将不胜感激......或者是否有更好的方法来编写政策来实现这一目标?

标签: jsonamazon-web-servicesamazon-s3policybucket

解决方案


要澄清@sqlbot 的答案,请使用以下策略:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "allow-anon-put",
            "Effect": "Allow",
            "Principal": {
                "AWS": "*"
            },
            "Action": [
                "s3:PutObject",
                "s3:PutObjectAcl"
            ],
            "Resource": "arn:aws:s3:::testbucket123/*",
            "Condition": {
                "StringEquals": {
                    "s3:x-amz-acl": "bucket-owner-full-control"
                }
            }
        }
    ]
}

这表示:允许任何人将对象放入此存储桶并设置访问控制列表,但前提是他们bucket-owner-full-control在上传对象时已指定。

然后,用户需要在上传命令中包含此标头:

x-amz-acl: bucket-owner-full-control

或者,他们使用AWS 命令​​行界面 (CLI)--acl bucket-owner-full-control将标头设置为上述内容)。

如果它们不包含此标头,则上传将被拒绝。


推荐阅读