【问题标题】:How to achieve s3 server side encryption, when using s3 with AWS SQS?将 s3 与 AWS SQS 一起使用时,如何实现 s3 服务器端加密?
【发布时间】:2017-07-09 08:38:49
【问题描述】:

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

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

【问题讨论】:

  • 我试过这个。如果我在 SQS 中启用 SSE,并使用 SQSExtendedClient 将有效负载存储在 S3 中,它不会加密 S3 中的消息。

标签: amazon-web-services amazon-sqs


【解决方案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 链接。

【讨论】:

    猜你喜欢
    • 2021-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-07
    • 1970-01-01
    • 1970-01-01
    • 2011-12-02
    • 1970-01-01
    相关资源
    最近更新 更多