aws-sdk-java-v2-secrets-manager은(는) 무엇을 하나요?
AWS SDK for Java 2.x용 AWS Secrets Manager 패턴을 제공합니다. 비밀 검색, 캐싱, 로테이션 인식 접근, Spring Boot 통합이 포함됩니다. Java 서비스에서 비밀 정보를 저장하거나 읽을 때, 하드코딩된 자격 증명을 대체할 때, 또는 애플리케이션에 비밀 기반 설정을 연결할 때 사용하세요.
기능
- 비밀 검색:
GetSecretValueRequest를 사용하여 Secrets Manager에서 비밀 값을 검색합니다. - 비밀 캐싱:
CachingSecretsManager를 사용하여 Secrets Manager에 대한 API 호출을 줄이고 성능을 향상시킵니다. - 로테이션 인식 접근:
RotationAwareSecretsManager를 사용하여 비밀 로테이션을 자동으로 감지하고 처리합니다. - Spring Boot 통합:
spring-cloud-starter-aws-secrets-manager-config를 사용하여 Spring Boot 애플리케이션에 비밀 정보를 자동으로 주입합니다.
전제 조건
- AWS 계정 및 Secrets Manager에 저장된 비밀.
- AWS SDK for Java 2.x (
software.amazon.awssdk:secretsmanager) - Java 17+
- (선택 사항) Spring Boot 3.x
설치
Maven
<dependency>
<groupId>software.amazon.awssdk</groupId>
<artifactId>secretsmanager</artifactId>
<version>2.25.0</version>
</dependency>
Gradle
implementation 'software.amazon.awssdk:secretsmanager:2.25.0'
사용법
1. 기본 비밀 검색
import software.amazon.awssdk.services.secretsmanager.SecretsManagerClient;
import software.amazon.awssdk.services.secretsmanager.model.GetSecretValueRequest;
import software.amazon.awssdk.services.secretsmanager.model.GetSecretValueResponse;
SecretsManagerClient client = SecretsManagerClient.create();
GetSecretValueRequest getSecretValueRequest = GetSecretValueRequest.builder()
.secretId("my-secret-name")
.build();
GetSecretValueResponse getSecretValueResponse = client.getSecretValue(getSecretValueRequest);
String secret = getSecretValueResponse.secretString();
System.out.println(secret);
2. 캐싱된 비밀 검색
import com.example.CachingSecretsManager;
CachingSecretsManager cachingManager = new CachingSecretsManager(client);
String cachedSecret = cachingManager.getSecretString("my-secret-name");
// 후속 호출은 캐시에서 제공되어 API 호출을 줄입니다.
3. 로테이션 인식 접근
import com.example.RotationAwareSecretsManager;
RotationAwareSecretsManager rotationManager = new RotationAwareSecretsManager(client);
String secret = rotationManager.getSecretWithRotationAwareness("my-secret-name");
// 로테이션이 감지되면 새 값을 가져오고 캐시를 업데이트합니다.
4. Spring Boot 통합
bootstrap.yml 또는 application.yml에 다음을 추가합니다:
aws:
secretsmanager:
region: us-east-1
secrets:
- secretName: my-db-secret
prefix: /config
비밀 값은 @Value를 사용하여 주입됩니다:
@Value("${/config/my-db-secret.username}")
private String dbUsername;
구성
환경 변수:
AWS_ACCESS_KEY_ID- AWS 액세스 키AWS_SECRET_ACCESS_KEY- AWS 시크릿 액세스 키AWS_REGION- AWS 리전 (예:us-east-1)
Iam 역할에 secretsmanager:GetSecretValue 권한이 있는지 확인하세요.
문제 해결
- AccessDeniedException: IAM 정책에
secretsmanager:GetSecretValue권한이 있는지 확인하세요. - ResourceNotFoundException: Secrets Manager에 비밀이 존재하는지 확인하세요.
- 캐싱 문제:
CachingSecretsManager의 TTL(만료 시간)을 조정하세요.