下面是我使用 KMS 服务器端加密将文件上传到 S3 的代码。但是,我收到异常“使用 AWS KMS 托管 key 进行服务器端加密需要 HTTP header x-amz-server-side-encryption : aws:kms”;
不确定将 header 放置在 Java 代码中的何处来保存文件。
private static void saveServerSideEncryptedFileToAWS(String clientRegion, String bucketName, String awsFilePath, File file) {
AmazonS3 s3client = AmazonS3Client.builder()
.withRegion(clientRegion)
.withCredentials(new AWSStaticCredentialsProvider(credentials))
.build();
ObjectMetadata objectMetadata = new ObjectMetadata();
//objectMetadata.setHeader("x-amz-server-side-encryption" , "aws:kms");
objectMetadata.setSSEAlgorithm(ObjectMetadata.AES_256_SERVER_SIDE_ENCRYPTION);
PutObjectRequest putRequest = null;
try {
putRequest = new PutObjectRequest(bucketName,
awsFilePath,
new FileInputStream(file),
objectMetadata).withSSEAwsKeyManagementParams(new SSEAwsKeyManagementParams("arn:aws:kms:<<key>>"));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
// Upload the object and check its encryption status.
PutObjectResult putResult = s3client.putObject(putRequest);
printEncryptionStatus(putResult);
}
最佳答案
通过一些打击和尝试我得到了答案... -- putRequest.putCustomRequestHeader("x-amz-服务器端加密","aws:kms");
关于java - 如何设置请求 header (x-amz-服务器端加密 : aws:kms) while saving file to S3 in Java code?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57170005/