gpt4 book ai didi

java - 用于 SSE-C 特定加密的 aws 预签名 URL

转载 作者:行者123 更新时间:2023-11-30 08:37:55 25 4
gpt4 key购买 nike

我正在尝试使用客户提供的 key 将文件上传到 Amazon S3。我在这里遵循了本教程: http://java.awsblog.com/post/TxDQ18N7AAB31J/Generating-Amazon-S3-Pre-signed-URLs-with-SSE-C-Part-5-Finale

我的代码:

AWSCredentials credentials = new BasicAWSCredentials("myKey", "mySecretKey");
AmazonS3 s3 = new AmazonS3Client();

try (CloseableHttpClient httpClient = HttpClientFactory.createUploadClient()) {
GeneratePresignedUrlRequest genreq = new GeneratePresignedUrlRequest("bucketName", "test7.pdf", HttpMethod.PUT);
SecretKey secretKey = generateSecretKey();
SSECustomerKey sseKey = new SSECustomerKey(secretKey);
genreq.setSSECustomerKey(sseKey);

URL puturl = s3.generatePresignedUrl(genreq);

HttpPut putreq = new HttpPut(URI.create(puturl.toExternalForm()));

putreq.addHeader(Headers.SERVER_SIDE_ENCRYPTION_CUSTOMER_KEY, sseKey.getKey());
putreq.addHeader(Headers.SERVER_SIDE_ENCRYPTION_CUSTOMER_ALGORITHM, SSEAlgorithm.AES256.getAlgorithm());
putreq.addHeader(Headers.SERVER_SIDE_ENCRYPTION_CUSTOMER_KEY_MD5, sseKey.getMd5());
putreq.setEntity(new FileEntity(new File("filePath")));
HttpResponse resp = httpClient.execute(putreq);
Assert.assertTrue(resp.getStatusLine().getStatusCode() == 200);
} catch (IOException e) {
Assert.fail();
}

生成 URL,然后当我尝试使用时我提供了所需的 header ,但问题是响应是 403 Forbidden。

我错过了什么?

最佳答案

为了使用预签名 URL 的 SSE 客户端特定加密上传工作,您需要启用 SigV4(默认情况下,SigV2 已为我启用)有多种方法可以启用此功能 - 系统属性、存储桶策略等. 但对我来说这有效:

AWSCredentials credentials = new BasicAWSCredentials("accessKey", "secretKey");
s3 = new AmazonS3Client(credentials, new ClientConfiguration().withSignerOverride("AWSS3V4SignerType"));

关于java - 用于 SSE-C 特定加密的 aws 预签名 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36865747/

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