禁止未加密的PUT到S3

时间:2013-04-14 14:07:13

标签: post encryption amazon-s3 policy bucket

我有一个直接浏览器上传表单,可直接将文件从浏览器上传到S3,包括通过上传政策和表单字段for x-amz-server-side-encryption为每次上传启用服务器端加密。

问题在于S3端的存储桶策略对上传的文件强制执行服务器端加密。如果没有存储桶策略,我的文件将完全上传,并启用服务器端加密。添加存储桶策略时,上传将被HTTP 403(AccessDenied)错误拒绝。

以下是我正在使用的完整存储桶策略(取消了亚马逊文档):

{
  "Version": "2008-10-17",
  "Id": "PutObjPolicy",
  "Statement": [
    {
      "Sid": "DenyUnEncryptedObjectUploads",
      "Effect": "Deny",
      "Principal": {
        "AWS": "*"
      },
      "Action": "s3:PutObject",
      "Resource": "arn:aws:s3:::MY-BUCKET-NAME/*",
      "Condition": {
        "StringNotEquals": {
          "s3:x-amz-server-side-encryption": "AES256"
        }
      }
    }
  ]
}

以下是在上传表单中签名和使用的政策(未编码和格式化)的示例:

{
  "expiration": "2013-04-14T14:29:56.000Z",
  "conditions": [
    {
      "bucket": "MY-BUCKET-NAME"
    },
    {
      "acl": "private"
    },
    {
      "x-amz-server-side-encryption": "AES256"
    },
    [
      "starts-with", "$key", "uploads/"
    ],
    {
      "success_action_status": "201"
    }
  ]
}

为简洁起见,我省略了上传表格的详细信息,但足以说明,它为x-amz-server-side-encryption设置了相应的隐藏表单字段。同样,这可以在没有存储桶策略的情况下工作,因此我认为客户端方面的状况良好。我的猜测是在这一点上,也许我应该特别允许某类PUT,但我不确定要添加什么。

有什么想法吗?

0 个答案:

没有答案