允许匿名上传到S3,但我是文件

时间:2018-05-17 10:22:53

标签: json amazon-web-services amazon-s3 policy bucket

我有这个场景,并且一直试图弄清楚它。这笔交易是我有一个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/*"
       }
   ]
}

任何帮助或提示都会受到赞赏......或者是否有更好的方法来制定政策来实现这一目标?

1 个答案:

答案 0 :(得分:1)

要澄清@ 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 Command-Line Interface (CLI)--acl bucket-owner-full-control(将标题设置为上述内容)。

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