【问题标题】:Using AWS S3 encryption with inputstreams对输入流使用 AWS S3 加密
【发布时间】:2016-07-29 12:07:39
【问题描述】:
我有一项将内容流式传输到 AWS S3 存储桶的休息服务。我想知道将流加密到存储桶的替代方法是什么,我的主要要求是加密密钥是自动管理的(例如 KMS),然后是性能方面的。
是否可以使用 KMS 加密输入流,而无需使用 byte[] 并将整个内容缓存在内存中?
我打算上传一些大于 1GB 的大文件(这就是为什么要使用流媒体来避免 OOM 错误)对此的首选建议是什么,与小于 10MB 的小文件相比有什么显着差异吗?
谢谢
【问题讨论】:
标签:
java
rest
amazon-web-services
encryption
amazon-s3
【解决方案1】:
我假设你使用的是PutObjectRequest 的this 版本,它采用InputStream。
到 S3 的数据传输是通过 SSL 进行的,因此网络传输是加密的。
要使用 KMS 密钥加密存储在 S3 上的数据,您只需指定希望 S3 使用的 KMS 密钥。创建 PutObjectRequest 后,只需在调用 s3Client.putObject() 之前调用:putObjectRequest.withSSEAwsKeyManagementParams(new SSEAwsKeyManagementParams(keyID));
或者,如果您想在客户端进行所有加密,您可以使用 Java AWS SDK 中的 AmazonS3EncryptionClient 和 EncryptedPutObjectRequest 类。