1

我们最近从 AWS SDK 1.x 迁移到 Java 2.x 并且 AWS S3 的 put 操作没有发生。S3 存储桶已启用加密(使用 AWS KMS 密钥)。

下面是我尝试使用的代码,但我收到下面提到的错误

使用 AWS KMS 托管密钥进行服务器端加密需要 HTTP 标头 x-amz-server-side-encryption:aws:kms(服务:S3,状态代码:400,请求 ID:xxx,扩展请求 ID:xxx/rY9ydIzxi3NROPiM=)

更新:我自己想通了。因此,任何想要受益于使用 KMS 密钥和 AWS SDK 2.x for Java 连接到 AWS S3 存储桶的人都可以使用下面的代码,它应该可以工作

Map<String, String> metadata = new HashMap<>();
    metadata.put("x-amz-server-side-encryption", "aws:kms");
    PutObjectRequest request = PutObjectRequest.builder()
            //.bucketKeyEnabled(true)
            .bucket(bucketName)
            .key(Key)
            .metadata(metadata)
            .serverSideEncryption(ServerSideEncryption.AWS_KMS)
            .ssekmsKeyId("arn:aws:kms:xxxxx")
            .build();
    File outputFile = new File("filename");
    try (PrintWriter pw = new PrintWriter(outputFile)) {
        data.stream()
                .forEach(pw::println);
    }
      awsS3Client.putObject(request, RequestBody.fromBytes(String.join(System.lineSeparator(),
            data).getBytes(StandardCharsets.UTF_8)));
4

0 回答 0