在AWS SQS中使用s3时,如何实现s3服务器端加密?

时间:2017-07-07 15:24:21

标签: amazon-web-services amazon-sqs

我们有一个用例,我们必须使用S3 here来管理SQS消息。在这种情况下,我们如何实现发送到S3的消息的服务器端加密(SSE)?在页面中,它表示要创建AmazonS3Client并使用它来创建AmazonSQSExtendedClient。但我没有看到任何选项,我们可以指定我们需要使用SSE对S3中的消息进行加密。

link讨论了使用S3客户端加密在S3中加密SQS消息有效负载。但是有可能在S3中实现SQS消息有效负载的服务器端加密吗?

1 个答案:

答案 0 :(得分:1)

目前,AmazonSQSExtendedClient不支持S3服务器端加密。

查看扩展客户端Source Code。在代码中构造S3的方法放置了对象请求,

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链接。