如何使用java从AWS获取加密文件(KMS服务器端)

时间:2017-09-26 07:54:15

标签: java amazon-web-services amazon-s3 aws-kms

当文件未加密(纯文本)服务器端时,以下代码有效。我尝试从同一个存储桶下载另一个文件,但此文件是通过KMS加密的。

我已经尝试了SSECustomerKey并添加了.withSSECustomerKey(myKey),但没有运气..有关如何修改此代码的任何想法,或者可以指出我正确的方向?

AmazonS3 s3bucket = AmazonS3ClientBuilder.standard().withRegion("us-east-2").build();
    S3Object download = s3bucket.getObject("mybucket-bucket", "secretfile2.txt");

    try 
    {
        download = IOUtils.toString(download.getObjectContent());
    } 
    catch (IOException e1) 
    {
        e1.printStackTrace();
    }

2 个答案:

答案 0 :(得分:1)

首先创建一个关键对象:

SSECustomerKey sseKey = new SSECustomerKey(secretKey);

然后使用该密钥创建请求:

GetObjectRequest getObjectRequest = new GetObjectRequest(bucketName, keyName).withSSECustomerKey(sseKey);

然后你检索对象:

s3client = new AmazonS3Client(...);
S3Object s3Object = s3client.getObject(getObjectRequest);

答案 1 :(得分:0)

如果还是个问题...... 我遇到了同样的问题,并且发现在下载文件时你不应该传递任何密钥,即

GetObjectRequest getObjectRequest = new GetObjectRequest(bucketName, keyName)    
s3client.getObject(getObjectRequest)

由于您使用了服务器端加密,AWS会在发送之前自动解密文件。