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

如何使用java从AWS获取加密文件(KMS服务器端),java,amazon-web-services,amazon-s3,aws-kms,Java,Amazon Web Services,Amazon S3,Aws Kms,以下代码在文件未加密(纯文本)服务器端时有效。我试图从同一个bucket下载另一个文件,但是这个文件是通过KMS加密的 我尝试了SSECustomerKey并添加了。使用了SECCustomerKey(myKey),但没有成功。。有没有关于如何修改此代码的想法,或者可以为我指出正确的方向 AmazonS3 s3bucket = AmazonS3ClientBuilder.standard().withRegion("us-east-2").build(); S3Object downlo

以下代码在文件未加密(纯文本)服务器端时有效。我试图从同一个bucket下载另一个文件,但是这个文件是通过KMS加密的

我尝试了SSECustomerKey并添加了。使用了SECCustomerKey(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();
    }

首先创建一个键对象:

SSECustomerKey sseKey = new SSECustomerKey(secretKey);
然后使用该密钥创建一个请求:

GetObjectRequest getObjectRequest = new GetObjectRequest(bucketName, keyName).withSSECustomerKey(sseKey);
然后检索对象:

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

首先创建一个键对象:

SSECustomerKey sseKey = new SSECustomerKey(secretKey);
然后使用该密钥创建一个请求:

GetObjectRequest getObjectRequest = new GetObjectRequest(bucketName, keyName).withSSECustomerKey(sseKey);
然后检索对象:

s3client = new AmazonS3Client(...);
S3Object s3Object = s3client.getObject(getObjectRequest);
如果这仍然是一个问题。。。 我也遇到了同样的问题,并且发现在下载文件时不应该传递任何密钥,即

GetObjectRequest getObjectRequest = new GetObjectRequest(bucketName, keyName)    
s3client.getObject(getObjectRequest)
由于您使用了服务器端加密,AWS将在发送前自动解密文件。

如果仍然存在问题。。。 我也遇到了同样的问题,并且发现在下载文件时不应该传递任何密钥,即

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

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

这解释了我的逻辑失败的原因。那么keyName=密钥的别名?而secretKey是IAM管理控制台中ARN(密钥后)后的行中读取的内容?不,密钥不会显示在任何位置。特别是对于客户管理的密钥。这就是为什么它被称为秘密钥匙。Amazon没有这些密钥,它们存储在您这边的一些文件/数据库/存储器等中。我得到“{”errorMessage:“加密参数不适用于此对象。(服务:Amazon S3;状态代码:400;错误代码:InvalidRequest“文件是AWS-KMS加密的,我可以在S3中看到。但我仍然得到”加密参数不适用于此对象"如果密钥由KMS管理,那么首先就不应该使用客户的密钥。这两个密钥是互斥的。上传这些文件时您是如何加密的?是在服务器端还是在客户端?您应该真正阅读文档以了解所有S3加密选项之间的差异:这解释了我的逻辑失败的原因。所以密钥Name=密钥别名?而secretKey是IAM管理控制台中ARN(密钥后)后的行中读取的内容?不,密钥不会显示在任何地方。特别是对于客户管理的密钥。这就是为什么它被称为密钥。亚马逊没有这些密钥,它们存储在您这边的某个文件/数据库/存储器等中。我得到“{”errorMessage:“加密参数不适用于此对象。(服务:Amazon S3;状态代码:400;错误代码:InvalidRequest)“文件是AWS-KMS加密的,我可以在S3中看到。但我仍然得到”加密参数不适用于此对象“如果密钥由KMS管理,则首先不应使用客户的密钥。这两个密钥是互斥的。上传这些文件时,您是如何对其进行加密的?是在服务器端还是在客户端?您应该真正阅读文档以了解所有S3加密选项之间的差异: