在Amazon S3中使用KMS密钥解密文件时出错
我正在尝试将Amazon S3
用作带加密的文件系统。
我已成功使用KMS
加密密钥(服务器端加密)在AWS S3服务器上实现上载文件。 请找到以下工作代码:
对于加密:
private static final String AWS_KMS_KEY = "---KMS Key---" private static final String BUCKET_NAME = "---bucket name---" private static final String keyName = "---display key name---" private static final String filePath = "---File Path---" private static final String ACCESS_KEY_ID = "---aws accesskey---" private static final String SECRET_ACCESS_KEY = "---aws secret key---" AWSCredentials awsCredentials = new BasicAWSCredentials(ACCESS_KEY_ID, SECRET_ACCESS_KEY); AmazonS3 s3Client = AmazonS3ClientBuilder.standard().withCredentials(new AWSStaticCredentialsProvider(awsCredentials)) .withRegion(Regions.US_WEST_2).withForceGlobalBucketAccessEnabled(true).build(); FileInputStream stream = new FileInputStream(filePath); ObjectMetadata objectMetadata = new ObjectMetadata(); objectMetadata.setSSEAlgorithm(SSEAlgorithm.KMS.getAlgorithm()); PutObjectRequest putObjectRequest = new PutObjectRequest(amazonFileUploadLocationOriginal, keyName, stream, objectMetadata); putObjectRequest.withCannedAcl(CannedAccessControlList.PublicRead); putObjectRequest.withSSEAwsKeyManagementParams(new SSEAwsKeyManagementParams(AWS_KMS_KEY)); PutObjectResult result = s3Client.putObject(putObjectRequest);
我在使用服务器端解密的文件重启时遇到问题。 我想直接访问aws url以解密该文件。 请找到以下不起作用的代码:
对象读取:
没有KMS密钥的对象读取:
GetObjectRequest request = new GetObjectRequest(existingBucketName, amazonFileUploadLocationOriginal); s3Client.getUrl(BUCKET_NAME, keyName);
以上代码用于没有kms加密密钥的读取对象,显示以下错误。
代码:InvalidArgument
消息:使用AWS KMS托管密钥指定服务器端加密的请求需要AWS签名版本4。
使用KMS密钥读取对象:
GeneratePresignedUrlRequest genreq = new GeneratePresignedUrlRequest(BUCKET_NAME, keyName, HttpMethod.GET) .withSSEAlgorithm(SSEAlgorithm.KMS) .withKmsCmkId(AWS_KMS_KEY); URL puturl = s3Client.generatePresignedUrl(genreq);
以上代码用于具有kms加密密钥预设URL的读取对象,其显示以下错误。
代码:SignatureDoesNotMatch
消息:我们计算的请求签名与您提供的签名不匹配。 检查您的密钥和签名方法。
这是正确的方法吗? 有什么建议吗? 请帮忙。
- Spring Boot亚马逊AWS S3存储桶文件下载 – 访问被拒绝
- AWS S3无需访问和密钥在Java中上载
- 如何使用REST API和数据库扩展Java应用程序?
- 如何解决’使用构建器创建客户端是不可变的’?
- 与csv文件相比,将mysql表转换为spark数据集的速度非常慢
- 如何在当前日期的1年内设置Amazon S3存储桶预签名URL到期时间
- 如何通过SDK设置S3对象的内容类型?
- 使用AWS Java SDK为现有S3对象设置Expires标头
- S3 Java客户端因“Content-Length delimited message body的过早结束”或“java.net.SocketException Socket closed”而失败了很多