java - 如何在 Java 代码中将文件保存到 S3 时设置请求标头(x-amz-server-side-encryption : aws:kms)?
问题描述
下面是我使用 KMS 服务器端加密将文件上传到 S3 的代码。但是,我收到异常“使用 AWS KMS 托管密钥进行服务器端加密需要 HTTP 标头 x-amz-server-side-encryption : aws:kms”;
不确定将标头放置在 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-server-side-encryption","aws:kms");
推荐阅读
- javascript - 自定义 React Native DateTimePicker
- node.js - 使用 ExpressJS,我如何在客户端使用 NPM 包?
- flutter - Flutter 将 Provider Value 存储在变量中,以便在收听时重用它
- javascript - 某些内置方法通过将同步回调作为参数提供了哪些优势?
- html - 如何使用 GAS 上的 Cheerio 在 Html 页面上获取特定信息?
- css - 范围滑块手柄拇指中心在带有样式组件的边缘上
- python - 如何使用 matplotlib 通过 gdal 打开栅格图
- android - 如何从操作栏中删除菜单名称?
- python - 如何在pygame中从精灵中拍摄精灵
- google-cloud-platform - 谷歌云功能代码