aws-sdk-java-v2-kms 是做什么的?
提供使用 AWS SDK for Java 2.x 的 AWS 密钥管理服务 (KMS) 模式。用于创建/管理加密密钥、加密/解密数据、生成数据密钥、数字签名、密钥轮换,或将加密集成到 Spring Boot 应用程序中。
概述
该技能包提供了一组全面且可复用的模式,用于在 Java 2.x 应用程序中与 AWS KMS 进行交互。每个模式都旨在解决常见的加密挑战,遵循 AWS 最佳实践,并包含清晰的代码示例。
关键能力
- 密钥管理:创建、查看、启用、禁用和计划删除 KMS 密钥。
- 数据加密:使用 KMS 密钥加密和解密小数据块(最大 64 KB)。
- 数据密钥生成:生成用于客户端加密的数据密钥。
- 数字签名:对消息进行签名和验证。
- 密钥轮换:为 KMS 密钥启用和手动触发自动轮换。
- Spring Boot 集成:将 KMS 客户端以 Spring Bean 的方式注入,使用
@Value注入配置,以及使用@Configuration类。
先决条件
- 有效的 AWS 账户,并对 KMS 具有适当权限。
- 配置了 AWS 凭证(环境变量、AWS 配置文件或 IAM 角色)。
- 在项目中添加 AWS SDK for Java 2.x KMS 依赖项。
如何使用
每个模式都提供了一个独立的 Java 代码示例,包含必要的导入、异常处理和清晰的内联注释。这些示例可以直接复制到您的项目中并进一步调整。
示例:创建 KMS 密钥
以下示例演示了如何创建对称的 KMS 密钥:
import software.amazon.awssdk.core.SdkBytes;
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.kms.KmsClient;
import software.amazon.awssdk.services.kms.model.*;
public class CreateKeyExample {
public static void main(String[] args) {
Region region = Region.US_EAST_1;
KmsClient kmsClient = KmsClient.builder().region(region).build();
CreateKeyRequest request = CreateKeyRequest.builder()
.keyUsage(KeyUsageType.ENCRYPT_DECRYPT)
.origin(OriginType.AWS_KMS)
.description("用于加密敏感数据的密钥")
.build();
try {
CreateKeyResponse response = kmsClient.createKey(request);
System.out.println("创建的密钥 ID:" + response.keyMetadata().keyId());
} catch (KmsException e) {
System.err.println(e.getMessage());
System.exit(1);
}
}
}
Spring Boot 集成
为了将 AWS KMS 集成到 Spring Boot 应用程序中,您可以使用以下配置:
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.kms.KmsClient;
@Configuration
public class KmsConfig {
@Bean
public KmsClient kmsClient() {
return KmsClient.builder()
.region(Region.of("${aws.region}"))
.build();
}
}
然后在您的 application.properties 中设置区域:
aws.region=us-east-1
安全注意事项
- 切勿在代码中硬编码 AWS 凭证。使用环境变量、AWS 配置文件或 IAM 角色。
- 遵循最小权限原则,为您的 KMS 操作分配特定的 IAM 权限。
- 启用 CloudTrail 以审计 KMS 密钥的使用。
- 定期轮换您的 KMS 密钥以降低密钥泄露风险。