使用 Apache Camel 上传到 S3 存储桶,如何使用 S3 托管密钥启用服务器端加密?

问题描述 投票:0回答:2

我使用 Apache Camel 和 aws2-s3 模块来访问 S3 存储桶。我正在使用端点 dsl 来编程我的路线。

我可以连接到存储桶并从中读取数据,但在尝试上传时遇到“访问被拒绝”的情况。

我需要启用SSE-S3。我看到其他帖子指出需要设置 x-amz-server-side-encryption 标头,但我该怎么做?

在 aws-s3 组件的文档中,它指出:

CamelAwsS3ServerSideEncryption
设置使用 AWS 托管密钥加密对象时的服务器端加密算法。例如使用 AES256。

我在文档中找不到任何其他对 AWS 托管密钥的引用,除非它指的是 KMS 或客户密钥。
我已经尝试过

.setHeader(AWS2S3Constants.SERVER_SIDE_ENCRYPTION, constant("AES256"))
,但似乎并没有真正启用 SSE-S3。

我还尝试通过其他方式设置标题:

Map<String,Object> headers = new HashMap<>();
headers.put("x-amz-server-side-encryption", "AES256");
    ...
    .process(exchange -> {
        exchange.getIn().setHeader("x-amz-server-side-encryption", "AES256");
    })
    .setHeader(AWS2S3Constants.SERVER_SIDE_ENCRYPTION, constant("AES256"))
    .setHeader(AWS2S3Constants.METADATA, () -> headers)
    .setHeader("CamelAwsS3Headers", () -> headers)
java amazon-s3 apache-camel
2个回答
2
投票

这应该通过以下方式解决:https://issues.apache.org/jira/browse/CAMEL-18064

在即将发布的 3.17.0 版本中提供。我今天早上修好了。


0
投票

对于那些尝试在使用 Spring Boot 时实现此目的的人,您可以在

isUseSSES3
Camel 组件配置上设置
aws2-s3
标志。 kotlin 中类似以下内容:

@Configuration
class CamelConfiguration {

    @Bean
    fun contextConfiguration(): CamelContextConfiguration {
        return object : CamelContextConfiguration {
            override fun beforeApplicationStart(camelContext: CamelContext) {
                (camelContext.getComponent("aws2-s3") as AWS2S3Component).apply {
                    configuration.isUseSSES3 = true
                }
            }

            override fun afterApplicationStart(camelContext: CamelContext) {
                // do nothing
            }
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.