亚马逊服务器端加密与邮件请求

时间:2015-07-26 12:48:02

标签: amazon-web-services encryption amazon-s3

我正在尝试使用并强制执行亚马逊s3服务器端加密。 我按照他们的文档,我已经创建了以下存储桶策略:

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

我正在使用python boto包,当我添加x-amz-server-side-encryption标题时,它就像魅力一样。

问题是应用程序中有几个地方正在使用HTML表单中的post请求将文件上传到s3。

我已设法添加x-amz-server-side-encryption标头并上传文件。但是,在亚马逊后端控制台检查时,我可以看到这些文件 加密

有人知道我做错了什么吗?我还尝试将x-amz-server-side-encryption作为表单字段传递,但它没有帮助。 有趣的是,当我删除x-amz-server-side-encryption标头时,请求因“访问拒绝”原因而失败。

1 个答案:

答案 0 :(得分:1)

解决方案是将x-amz-server-side-encryption添加到策略对象。

例如:

POLICY = """{'expiration': '2016-01-01T00:00:00Z',
'conditions': [
   {'bucket': 'my_bucket'},
   ['starts-with', '$key', '%s/'],
   {'acl': 'public-read'},
   ['starts-with', '$Content-Type', ''],
   ['content-length-range', 0, 314572800],
  {'x-amz-server-side-encryption': 'AES256'}
]
}"""

并添加“x-amz-server-side-encryption”表单字段,其中包含“AES256”值。在这种情况下,无需将其添加为标题