You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Java AWS SDK创建带KMS加密的S3存储桶?

当然有对应的实现方法!不管你用的是AWS SDK for Java的V1还是现在官方更推荐的V2版本,都能完成创建带KMS加密的S3存储桶操作。我之前做过类似需求,下面分版本给你详细说明:

AWS SDK for Java V2(推荐使用)

首先确保项目里引入了S3相关的V2依赖,然后通过CreateBucketRequest配置KMS加密规则即可,核心是设置ServerSideEncryptionConfiguration。

示例代码如下:

import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.s3.S3Client;
import software.amazon.awssdk.services.s3.model.CreateBucketRequest;
import software.amazon.awssdk.services.s3.model.ServerSideEncryptionConfiguration;
import software.amazon.awssdk.services.s3.model.ServerSideEncryptionRule;
import software.amazon.awssdk.services.s3.model.ServerSideEncryptionByDefault;

public class CreateEncryptedBucket {
    public static void main(String[] args) {
        String bucketName = "your-custom-bucket-name";
        String kmsKeyId = "your-kms-key-id-or-arn"; // 支持KMS密钥ID、完整ARN或别名(比如alias/my-kms-key)
        Region region = Region.US_EAST_1;

        try (S3Client s3 = S3Client.builder().region(region).build()) {
            // 构建默认加密规则:指定使用KMS密钥
            ServerSideEncryptionByDefault sseByDefault = ServerSideEncryptionByDefault.builder()
                    .sseAlgorithm("aws:kms")
                    .kmsMasterKeyId(kmsKeyId)
                    .build();

            ServerSideEncryptionRule encryptionRule = ServerSideEncryptionRule.builder()
                    .applyServerSideEncryptionByDefault(sseByDefault)
                    .build();

            ServerSideEncryptionConfiguration encryptionConfig = ServerSideEncryptionConfiguration.builder()
                    .rules(encryptionRule)
                    .build();

            // 创建带加密配置的存储桶请求
            CreateBucketRequest bucketRequest = CreateBucketRequest.builder()
                    .bucket(bucketName)
                    .serverSideEncryptionConfiguration(encryptionConfig)
                    .build();

            s3.createBucket(bucketRequest);
            System.out.println("Bucket " + bucketName + " created with KMS encryption enabled successfully");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

几个关键注意点:

  • sseAlgorithm必须指定为aws:kms,这是区别于S3默认SSE-S3加密的核心
  • 要确保你的IAM身份(角色/用户)拥有创建S3桶的权限,以及使用指定KMS密钥的相关权限(比如kms:Encrypt、kms:Decrypt等)
  • 如果不指定kmsMasterKeyId,S3会自动使用AWS管理的默认KMS密钥,但推荐使用自定义密钥提升可控性
AWS SDK for Java V1(旧版本)

如果还在维护基于V1的旧项目,同样可以实现,写法略有不同:

import com.amazonaws.auth.DefaultAWSCredentialsProviderChain;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.CreateBucketRequest;
import com.amazonaws.services.s3.model.ServerSideEncryptionConfiguration;
import com.amazonaws.services.s3.model.ServerSideEncryptionRule;
import com.amazonaws.services.s3.model.ServerSideEncryptionByDefault;

public class CreateEncryptedBucketV1 {
    public static void main(String[] args) {
        String bucketName = "your-custom-bucket-name";
        String kmsKeyId = "your-kms-key-id-or-arn";
        Regions region = Regions.US_EAST_1;

        AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
                .withRegion(region)
                .withCredentials(new DefaultAWSCredentialsProviderChain())
                .build();

        ServerSideEncryptionByDefault sseByDefault = new ServerSideEncryptionByDefault()
                .withSSEAlgorithm("aws:kms")
                .withKMSMasterKeyID(kmsKeyId);

        ServerSideEncryptionRule encryptionRule = new ServerSideEncryptionRule()
                .withApplyServerSideEncryptionByDefault(sseByDefault);

        ServerSideEncryptionConfiguration encryptionConfig = new ServerSideEncryptionConfiguration()
                .withRules(encryptionRule);

        CreateBucketRequest bucketRequest = new CreateBucketRequest(bucketName)
                .withServerSideEncryptionConfiguration(encryptionConfig);

        s3Client.createBucket(bucketRequest);
        System.out.println("Bucket created with KMS encryption successfully");
    }
}
相关文档参考

你可以在AWS官方的Java SDK文档里找到更细节的说明:

  • 对于V2版本,重点查看CreateBucketRequest的API参考,以及S3服务端加密的开发者指南,里面会讲解各种加密配置的参数和使用场景
  • 对于V1版本,对应的CreateBucketRequest类文档和S3加密相关章节也有完整说明

内容的提问来源于stack exchange,提问作者Todd

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 09:10:39