gpt4 book ai didi

java - 在 Amazon S3 中使用 KMS key 解密文件时出错

转载 作者:行者123 更新时间:2023-12-04 12:01:24 26 4
gpt4 key购买 nike

我正在尝试使用 Amazon S3作为加密的文件系统。
我成功地使用 KMS 在 AWS S3 服务器上实现上传文件加密 key (服务器端加密)。请找到以下工作代码:
对于加密:

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 key 的对象读取:
GetObjectRequest request = new GetObjectRequest(existingBucketName, amazonFileUploadLocationOriginal);
s3Client.getUrl(BUCKET_NAME, keyName);
以上代码用于没有 km​​s 加密 key 的读取对象,显示以下错误。

Code : InvalidArgument

Message : Requests specifying Server Side Encryption with AWS KMS managed keys require AWS Signature Version 4.



使用 KMS key 读取对象:
GeneratePresignedUrlRequest genreq = new GeneratePresignedUrlRequest(BUCKET_NAME, keyName, HttpMethod.GET)
.withSSEAlgorithm(SSEAlgorithm.KMS)
.withKmsCmkId(AWS_KMS_KEY);

URL puturl = s3Client.generatePresignedUrl(genreq);
上面的代码用于读取带有 kms 加密 key 预签名 URL 的对象,显示以下错误。

Code : SignatureDoesNotMatch

Message : The request signature we calculated does not match the signature you provided. Check your key and signing method.


这是正确的做法吗?有什么建议吗?请帮忙。

最佳答案

如果签名不匹配请使用以下代码手动添加
供引用AWS java SDK manually set signature versionSystem.setProperty(SDKGlobalConfiguration.ENABLE_S3_SIGV4_SYSTEM_PROPERTY, "true");我们可以使用下面的代码来获取主持的网址获取

GeneratePresignedUrlRequest genreq = new GeneratePresignedUrlRequest(BUCKET_NAME, keyName, HttpMethod.GET)
.withExpiration(expiration);

URL puturl = s3Client.generatePresignedUrl(genreq);
此 URL 将包含时间和签名的到期时间,如下所示
输出 https://mybucket.s3.amazonaws.com/abc_count.png?AWSAccessKeyId=AKIAJXXXXXXXXXXXXXXX&Expires=1503602631&Signature=ibOGfAovnhIF13DALdAgsdtg2s%3D希望有人对此有所帮助

关于java - 在 Amazon S3 中使用 KMS key 解密文件时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44817540/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com