将 s3 与 AWS SQS 一起使用时,如何实现 s3 服务器端加密?
How to achieve s3 server side encryption, when using s3 with AWS SQS?
我们有一个用例,我们必须按照 here 所述使用 S3 管理 SQS 消息。在这种情况下,我们如何实现发送到 S3 的消息的服务器端加密 (SSE)?。在页面中它说创建一个 AmazonS3Client 并使用它来创建 AmazonSQSExtendedClient。但是我没有看到任何可以指定我们需要使用 SSE 加密 S3 中的消息的选项。
这篇 link 讨论了使用 S3 客户端加密对 S3 中的 SQS 消息负载进行加密。但是是否可以在 S3 中实现 SQS 消息有效负载的服务器端加密?
目前 AmazonSQSExtendedClient 不支持 S3 服务器端加密。
查看扩展客户端 Source Code。代码中构造S3 put对象请求的方法,
private void storeTextInS3(String s3Key, String messageContentStr, Long messageContentSize) {
InputStream messageContentStream = new ByteArrayInputStream(messageContentStr.getBytes(StandardCharsets.UTF_8));
ObjectMetadata messageContentStreamMetadata = new ObjectMetadata();
messageContentStreamMetadata.setContentLength(messageContentSize);
PutObjectRequest putObjectRequest = new PutObjectRequest(clientConfiguration.getS3BucketName(), s3Key,
messageContentStream, messageContentStreamMetadata);
try {
clientConfiguration.getAmazonS3Client().putObject(putObjectRequest);
} catch (AmazonServiceException e) {
String errorMessage = "Failed to store the message content in an S3 object. SQS message was not sent.";
LOG.error(errorMessage, e);
throw new AmazonServiceException(errorMessage, e);
} catch (AmazonClientException e) {
String errorMessage = "Failed to store the message content in an S3 object. SQS message was not sent.";
LOG.error(errorMessage, e);
throw new AmazonClientException(errorMessage, e);
}
}
它不包括用于设置服务器端加密的扩展。如果您打算修改扩展客户端的源代码,您可以包括服务器端加密支持,如下所示。
PutObjectRequest putRequest = new PutObjectRequest(
bucketName, keyName, file);
// Request server-side encryption.
ObjectMetadata objectMetadata = new ObjectMetadata();
objectMetadata.setSSEAlgorithm(ObjectMetadata.AES_256_SERVER_SIDE_ENCRYPTION);
putRequest.setMetadata(objectMetadata);
有关使用 Java SDK 的 S3 服务器端加密的更多详细信息,请查看 this link。
我们有一个用例,我们必须按照 here 所述使用 S3 管理 SQS 消息。在这种情况下,我们如何实现发送到 S3 的消息的服务器端加密 (SSE)?。在页面中它说创建一个 AmazonS3Client 并使用它来创建 AmazonSQSExtendedClient。但是我没有看到任何可以指定我们需要使用 SSE 加密 S3 中的消息的选项。
这篇 link 讨论了使用 S3 客户端加密对 S3 中的 SQS 消息负载进行加密。但是是否可以在 S3 中实现 SQS 消息有效负载的服务器端加密?
目前 AmazonSQSExtendedClient 不支持 S3 服务器端加密。
查看扩展客户端 Source Code。代码中构造S3 put对象请求的方法,
private void storeTextInS3(String s3Key, String messageContentStr, Long messageContentSize) {
InputStream messageContentStream = new ByteArrayInputStream(messageContentStr.getBytes(StandardCharsets.UTF_8));
ObjectMetadata messageContentStreamMetadata = new ObjectMetadata();
messageContentStreamMetadata.setContentLength(messageContentSize);
PutObjectRequest putObjectRequest = new PutObjectRequest(clientConfiguration.getS3BucketName(), s3Key,
messageContentStream, messageContentStreamMetadata);
try {
clientConfiguration.getAmazonS3Client().putObject(putObjectRequest);
} catch (AmazonServiceException e) {
String errorMessage = "Failed to store the message content in an S3 object. SQS message was not sent.";
LOG.error(errorMessage, e);
throw new AmazonServiceException(errorMessage, e);
} catch (AmazonClientException e) {
String errorMessage = "Failed to store the message content in an S3 object. SQS message was not sent.";
LOG.error(errorMessage, e);
throw new AmazonClientException(errorMessage, e);
}
}
它不包括用于设置服务器端加密的扩展。如果您打算修改扩展客户端的源代码,您可以包括服务器端加密支持,如下所示。
PutObjectRequest putRequest = new PutObjectRequest(
bucketName, keyName, file);
// Request server-side encryption.
ObjectMetadata objectMetadata = new ObjectMetadata();
objectMetadata.setSSEAlgorithm(ObjectMetadata.AES_256_SERVER_SIDE_ENCRYPTION);
putRequest.setMetadata(objectMetadata);
有关使用 Java SDK 的 S3 服务器端加密的更多详细信息,请查看 this link。