AWS Secrets Manager는 데이터베이스 비밀번호, API Key, OAuth 토큰 등 애플리케이션이 사용하는 민감한 비밀 값(Secret)을 안전하게 저장, 조회, 자동 교체할 수 있는 관리형 서비스입니다. 코드나 설정 파일에 비밀 값을 하드코딩하는 대신, 런타임에 Secrets Manager API를 호출하여 값을 가져오는 방식으로 보안을 강화합니다.
시크릿(Secret): 애플리케이션이 외부 리소스에 접근하기 위해 필요한 민감한 인증 정보 (비밀번호, 토큰, API Key 등).
소스 코드나 환경 변수 파일(.env)에 비밀번호를 저장하면 다음과 같은 문제가 발생합니다.
Secrets Manager는 이 문제를 다음과 같이 해결합니다. 비밀 값을 암호화하여 저장하고, IAM 정책으로 접근을 제어하며, CloudTrail로 모든 조회 이력을 기록합니다.
Secrets Manager에 저장된 값은 AWS KMS로 암호화됩니다. 애플리케이션은 SDK를 통해 런타임에 비밀 값을 조회합니다.
KMS(Key Management Service): AWS에서 암호화 키를 생성·관리하는 서비스. Secrets Manager는 KMS를 사용해 비밀 값을 암호화합니다.
Application
|
| GetSecretValue("prod/myapp/db")
v
Secrets Manager
|
| KMS 복호화
v
{ "username": "admin", "password": "s3cr3t!" }
|
v
Application uses credentials
비밀 값은 JSON 형식으로 저장할 수 있어, 사용자 이름과 비밀번호를 한 번에 묶어 관리하기 편리합니다.
Secrets Manager의 핵심 기능 중 하나는 자동 교체(Rotation)입니다. 일정 주기(예: 30일마다)에 따라 Lambda 함수를 통해 비밀번호를 자동으로 변경합니다. 애플리케이션 재배포 없이 새 비밀번호가 적용됩니다.
AWS는 Amazon RDS, Aurora, Redshift 등 주요 데이터베이스에 대한 자동 교체를 기본 지원합니다. 교체 흐름은 다음과 같습니다.
Rotation Schedule (예: 30일마다)
|
v
Lambda Rotation Function
|
+---> 1. 새 비밀번호 생성
|
+---> 2. DB에 새 비밀번호 적용
|
+---> 3. Secrets Manager에 새 값 저장
|
+---> 4. 검증 (새 비밀번호로 접속 테스트)
|
v
완료 (기존 비밀번호 폐기)
| 항목 | Secrets Manager | Parameter Store |
|---|---|---|
| 주 용도 | 민감한 비밀 값 (비밀번호, API Key) | 설정값, 환경 변수 |
| 자동 교체 | 지원 (Lambda 기반) | 미지원 |
| 암호화 | 기본 제공 (KMS 필수) | SecureString 타입에서만 |
| 비용 | 시크릿당 월 $0.40 + API 호출 | 표준 파라미터는 무료 |
| 버전 관리 | 지원 | 지원 |
| 조회 방식 | SDK / API | SDK / API / 환경 변수 주입(ECS) |
정리하면, 주기적인 교체가 필요한 민감한 인증 정보는 Secrets Manager를, 단순 설정값이나 비용을 절감하고 싶은 경우는 Parameter Store를 사용하는 것이 일반적인 선택입니다. 두 서비스를 혼합하여 목적에 맞게 사용할 수도 있습니다.
Lambda 함수에서 RDS 비밀번호를 Secrets Manager로 조회하는 패턴이 가장 일반적입니다. 함수가 Cold Start될 때 한 번만 비밀 값을 조회하고 메모리에 캐싱하면, 매 요청마다 API를 호출하는 오버헤드를 줄일 수 있습니다. 자동 교체가 활성화된 경우에는 캐시 만료 시간을 짧게 유지하거나, 교체 완료 이벤트를 수신하여 캐시를 갱신하는 방식을 사용합니다.