使用curl的Amazon AWS S3存储桶匿名上传

时间:2017-05-15 18:06:00

标签: amazon-web-services curl post amazon-s3

我尝试设置S3存储桶以接受匿名上传,同时允许存储桶拥有者拥有完全权限并阻止公共读取访问。根据{{​​3}}的代码,我已在下面设置了存储分区政策。我想使用curl上传到存储桶,但我得到的只是

  

拒绝访问

这是一个存储桶政策:

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

卷曲POST:

curl --request PUT --upload-file "thefile.gif" -k https://[mybucket].s3.amazonaws.com/uploads/

1 个答案:

答案 0 :(得分:1)

匿名上传是一个坏主意,但至少这个政策约束要求上传者让你控制对象:

        "Condition": {
            "StringEquals": {
                "s3:x-amz-acl": "bucket-owner-full-control"
            }
        }

它并不直观明显,但拥有一个水桶并不代表你拥有这些物品。如果他们没有使用您帐户的凭据上传,那么您就不会拥有这些凭据。当然,您需要为它们付费,但如果某个对象被另一个帐户或匿名用户上传到您的存储桶中,那么您最终可能会删除该对象的唯一权限是您可以将其删除 - 您最终可以您无法下载或复制的对象,只需删除即可。

有了这个策略,上传必须符合策略,设置对象ACL以便控制:

curl ... -H 'x-amz-acl: bucket-owner-full-control'