再问大家一个问题。 大家用 S3 的客户端加密吗?就是加密解密都是在客户端进行。使用这个方法后,如果在 rails app server 缓存解密的文件,这样就不需要每次客户端都要读取在 S3 上的加密的文件,然后解密,这个过程的费时费力,有什么方法把这个解密的文件缓存下来,加快读取速度,谢谢。
#4 楼 @huacnlee 场景是这样。
file-->encryption->S3->decryption->file->send to requesters
S3 有两种加密方法,S3 服务器端,自动加密和解密,这个是在发往 S3 的 header 里边,有个参数就好。另外一个方式,是客户端加密,可以用对称加密,或者非对称加密方法。就是客户端,提供一个密匙,在这个这个文件上传到 S3 前,这个文件会被先加密,然后储存在 S3 端,从 S3 读取的时候,客户端会提供密匙,然后这个文件会被解密,客户端得到解密后的文件。这个加密,解密过程是 AWS-SDK 自动完成的。
原理和示例,看这个代码的 137-164 行:
https://github.com/aws/aws-sdk-ruby/blob/fc7c617199ec69a134cf324c01012f6929c87f84/lib/aws/s3/s3_object.rb
官方的例子:
http://ruby.awsblog.com/post/Tx1OFBULXYZNVTH/Using-Client-Side-Encryption-for-S3-in-the-AWS-SDK-for-Ruby
我现在就是用类似例子的方法,在 rails 里边,每次有客户要下载这个文件,web server 就读取这个上传的 file 的 S3 路径,这个文件就解密了,保存在一个变量里边(如何 cache 这个变量的内容,这个是我想问的),然后用 send_data 把解密后的文件内容发往请求者。因为每次解密都是要去 S3 下载解密,所以我就想怎么把这个解密后的文件给缓存起来。