我想设置一个S3存储桶策略,以便上传到该存储桶的所有请求都将使用服务器端加密,即使请求标头中未指定。
我看过这篇帖子(Amazon S3 Server Side Encryption Bucket Policy problems),有人设法设置了一个存储桶策略,拒绝所有未指定服务器端加密的put请求,但我不想否认,我想要成功但使用服务器端加密。
我的问题是将输出从EMR流式传输到我的S3存储桶,我不控制发出请求的代码,在我看来,必须根据请求指定服务器端加密。
答案 0 :(得分:10)
恕我直言无法自动告知Amazon S3为每个PUT请求启用SSE。 那么,我将调查以下内容:
编写一个列出您的存储桶的脚本
为每个对象获取元数据
如果未启用SSE,请使用PUT COPY API(http://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectCOPY.html)添加SSE “(...)复制对象时,可以保留大部分元数据(默认)或指定新元数据(...)”
如果PUT操作成功,请使用DELETE对象API删除原始对象
然后根据您的业务需求每小时或每天运行该脚本。 您可以在Python中使用S3 API(http://boto.readthedocs.org/en/latest/ref/s3.html),以便更容易编写脚本。
如果这种“写后更改”解决方案对您来说无效,那么您可以在不同的级别工作(与上面的Julio答案一致)
在您的API客户端和S3 API之间使用代理(如您网站上的反向代理),并将其配置为为每个PUT / POST请求添加SSE HTTP标头。 开发人员必须通过代理,并且无权授权针对S3 API端点发出请求
编写一个包装库以自动添加SSE元数据,并迫使开发人员在SDK上使用您的库。
今天晚些时候是组织中的纪律问题,因为在技术层面强制执行它们并不容易。
的Seb
答案 1 :(得分:6)
亚马逊刚刚发布new features来执行此操作,这非常容易
摘自docs进行设置。
请注意,任何存储桶加密设置之前都会评估任何现有存储桶策略
Amazon S3在应用存储桶之前评估并应用存储桶策略 加密设置。即使您启用了桶加密设置, 没有加密信息的PUT请求将被拒绝 你有桶策略拒绝这样的PUT请求。检查你的 存储桶策略并在需要时进行修改
答案 2 :(得分:1)
S3不会自动执行此操作,您必须创建一个变通方法。我建议通过代理来传递请求,这将会“充实”#34;他们添加了正确的标题。要做到这一点,我尝试(按顺序):
1- Apache Camel Content Enrich
2- NGXINX / HTTPD mod_proxy
3-自定义代码
我打赌也有一个非常聪明的ruby http lib:)
答案 3 :(得分:1)
我使用这个快速bash脚本来加密整个存储桶。
tableView

答案 4 :(得分:0)
您可以使用AWS Lambda为每个通过PUT操作触摸的对象设置服务器端AES256加密。检查https://github.com/eleven41/aws-lambda-encrypt-s3-objects。我没试过,但看起来就像你想要的那样。