Secrets Manager vs Parameter Store: 어떤 걸 써야 할까?
AWS Secrets Manager와 Parameter Store의 차이점, 비용, 기능을 비교하고 상황별 선택 기준을 제시합니다. SAA-C03 시험 필수 개념.
관련 시험 도메인
- Domain 1: Design Secure Architectures
핵심 요약
자동 로테이션이 필요하면 Secrets Manager, 무료로 간단히 저장하려면 Parameter Store를 선택하세요. Secrets Manager는 RDS 자격 증명 자동 로테이션과 크로스 리전 복제가 강점이고, Parameter Store는 무료 티어와 설정 값 저장에 최적화되어 있습니다.
시험 팁
시험 핵심: "RDS 자격 증명 자동 로테이션" → Secrets Manager. "무료로 설정 값 저장" → Parameter Store (Standard). 두 서비스 모두 KMS로 암호화 가능합니다.
| 구분 | Secrets Manager | Parameter Store |
|---|---|---|
| 주요 용도 | 자격 증명 전체 수명주기 관리 | 설정 값 + 간단한 시크릿 |
| 자동 로테이션 | ✅ 기본 제공 (RDS, Redshift 등) | ❌ 직접 구현 필요 |
| 비용 | $0.40/시크릿/월 + API 호출 | 무료 (Standard), $0.05/Advanced |
| 크로스 리전 복제 | ✅ 기본 제공 | ❌ 직접 구현 필요 |
| 최대 크기 | 64KB | 4KB (Standard), 8KB (Advanced) |
두 서비스는 언제 사용해야 할까?
Secrets Manager를 선택해야 할 때
Secrets Manager 사용 케이스:
├── RDS/Aurora 자격 증명 자동 로테이션
├── Redshift, DocumentDB 자격 증명 관리
├── 크로스 리전 DR을 위한 시크릿 복제
├── API 키의 정기적 로테이션
├── 규정 준수 (HIPAA, PCI-DSS) 요구
└── 시크릿 버전 관리 및 감사 추적
Parameter Store를 선택해야 할 때
Parameter Store 사용 케이스:
├── 환경 변수 및 설정 값 저장 (무료)
├── 로테이션 불필요한 정적 API 키
├── CloudFormation/CDK 파라미터 공유
├── 계층적 설정 관리 (/app/prod/db-host)
├── 비용 최소화가 우선인 경우
└── 비민감 데이터 포함 혼합 저장
선택 플로우차트
시크릿/설정 값을 저장해야 하는가?
│
├── 자동 로테이션이 필요한가?
│ └── YES → Secrets Manager
│
├── RDS/Redshift 자격 증명인가?
│ └── YES → Secrets Manager (네이티브 통합)
│
├── 크로스 리전 복제가 필요한가?
│ └── YES → Secrets Manager
│
├── 비용이 가장 중요한가?
│ └── YES → Parameter Store (무료 티어)
│
└── 설정 값과 시크릿을 함께 관리하고 싶은가?
└── YES → Parameter Store (계층적 구조)
기능 상세 비교
자동 로테이션
| 항목 | Secrets Manager | Parameter Store |
|---|---|---|
| 기본 로테이션 | ✅ AWS 관리형 (RDS, Redshift 등) | ❌ 미지원 |
| 커스텀 로테이션 | ✅ Lambda 함수 연동 | 직접 구현 필요 |
| 로테이션 주기 | 1일 ~ 365일 설정 가능 | N/A |
Secrets Manager 자동 로테이션 흐름:
1. 로테이션 스케줄 설정 (예: 30일마다)
2. AWS가 Lambda 함수 자동 호출
3. 새 자격 증명 생성
4. 데이터베이스에 새 자격 증명 적용
5. 애플리케이션은 자동으로 새 자격 증명 사용
시험 팁
시험 포인트: RDS 마스터 자격 증명 로테이션 시 Aurora는 자동으로 연결 유지, 일반 RDS는 애플리케이션 재연결 필요할 수 있습니다.
비용 구조
| 항목 | Secrets Manager | Parameter Store (Standard) | Parameter Store (Advanced) |
|---|---|---|---|
| 기본 요금 | $0.40/시크릿/월 | 무료 | $0.05/파라미터/월 |
| API 요청 | $0.05/10,000건 | 무료 | $0.05/10,000건 |
| 최대 크기 | 64KB | 4KB | 8KB |
| 최대 개수 | 무제한 | 10,000개 | 100,000개 |
비용 계산 예시 (100개 시크릿, 월 100만 API 호출):
Secrets Manager:
├── 시크릿: 100 × $0.40 = $40
├── API: 100 × $0.05 = $5
└── 총: $45/월
Parameter Store (Standard):
├── 파라미터: 무료
├── API: 무료
└── 총: $0/월
Parameter Store (Advanced):
├── 파라미터: 100 × $0.05 = $5
├── API: 100 × $0.05 = $5
└── 총: $10/월
데이터 크기 및 개수
| 항목 | Secrets Manager | Parameter Store |
|---|---|---|
| 최대 값 크기 | 64KB | 4KB / 8KB (Advanced) |
| 버전 관리 | ✅ (자동) | ✅ (Advanced만) |
| 라벨링 | ✅ (AWSCURRENT, AWSPREVIOUS) | ❌ |
통합 서비스
| 통합 서비스 | Secrets Manager | Parameter Store |
|---|---|---|
| RDS 자동 로테이션 | ✅ 네이티브 | ❌ |
| Redshift | ✅ 네이티브 | ❌ |
| DocumentDB | ✅ 네이티브 | ❌ |
| ECS/EKS | ✅ | ✅ |
| Lambda | ✅ | ✅ |
| CloudFormation | ✅ | ✅ |
| CodeBuild/CodePipeline | ✅ | ✅ |
암호화
KMS 연동
암호화 방식:
Secrets Manager:
├── 기본: AWS 관리형 키 (aws/secretsmanager)
├── 선택: 고객 관리형 CMK
└── 모든 시크릿 자동 암호화
Parameter Store:
├── String: 암호화 없음 (평문)
├── StringList: 암호화 없음 (평문)
└── SecureString: KMS 암호화 (선택)
├── 기본: AWS 관리형 키 (aws/ssm)
└── 선택: 고객 관리형 CMK
시험 팁
시험 포인트: Parameter Store의 SecureString 타입만 암호화됩니다. 일반 String은 평문 저장! Secrets Manager는 모든 시크릿이 자동 암호화됩니다.
실제 사용 예시
Secrets Manager: RDS 자격 증명 관리
# Python (boto3) 예시
import boto3
import json
client = boto3.client('secretsmanager')
# 시크릿 조회
response = client.get_secret_value(SecretId='prod/myapp/rds')
secret = json.loads(response['SecretString'])
# 데이터베이스 연결
db_host = secret['host']
db_user = secret['username']
db_pass = secret['password']
// Secrets Manager에 저장된 시크릿 구조
{
"username": "admin",
"password": "auto-rotated-password-xyz",
"engine": "mysql",
"host": "mydb.cluster-xxx.us-east-1.rds.amazonaws.com",
"port": 3306,
"dbname": "myapp"
}
Parameter Store: 계층적 설정 관리
Parameter Store 계층 구조:
/myapp/
├── /prod/
│ ├── /db-host → "prod-db.example.com"
│ ├── /db-port → "3306"
│ ├── /api-endpoint → "https://api.example.com"
│ └── /db-password → (SecureString) "encrypted..."
└── /dev/
├── /db-host → "dev-db.example.com"
├── /db-port → "3306"
└── /api-endpoint → "https://dev-api.example.com"
# Python 예시
import boto3
ssm = boto3.client('ssm')
# 단일 파라미터 조회
response = ssm.get_parameter(
Name='/myapp/prod/db-host',
WithDecryption=True # SecureString 복호화
)
db_host = response['Parameter']['Value']
# 경로 기반 다중 파라미터 조회
response = ssm.get_parameters_by_path(
Path='/myapp/prod/',
WithDecryption=True
)
for param in response['Parameters']:
print(f"{param['Name']}: {param['Value']}")
크로스 리전 복제
Secrets Manager 복제
Secrets Manager 복제 설정:
1. 기본 시크릿 생성 (us-east-1)
2. 복제 리전 추가 (eu-west-1)
3. AWS가 자동으로 동기화
특징:
├── 기본 리전에서만 값 수정 가능
├── 복제본은 읽기 전용
├── 로테이션 시 자동 복제
└── DR 시나리오에 적합
Parameter Store (직접 구현 필요)
Parameter Store 크로스 리전:
├── AWS 네이티브 복제 미지원
├── EventBridge + Lambda로 직접 구현 가능
└── CloudFormation StackSets로 배포 가능
시험 팁
시험 포인트: "크로스 리전 시크릿 복제" 요구 사항이 있으면 → Secrets Manager. Parameter Store는 네이티브 복제를 지원하지 않습니다.
ECS/Lambda 연동
ECS Task Definition
// Secrets Manager 연동
{
"containerDefinitions": [{
"secrets": [{
"name": "DB_PASSWORD",
"valueFrom": "arn:aws:secretsmanager:us-east-1:123456789012:secret:prod/db-password"
}]
}]
}
// Parameter Store 연동
{
"containerDefinitions": [{
"secrets": [{
"name": "DB_HOST",
"valueFrom": "arn:aws:ssm:us-east-1:123456789012:parameter/myapp/prod/db-host"
}]
}]
}
Lambda 환경 변수
Lambda 시크릿 참조 방법:
├── 환경 변수에 직접 저장 (❌ 권장하지 않음)
├── Lambda Extensions 사용 (캐싱 지원)
└── 코드에서 직접 API 호출 (캐싱 구현 권장)
시험 출제 포인트
자주 나오는 문제 유형
| 시나리오 | 정답 |
|---|---|
| "RDS 자격 증명 자동 로테이션" | Secrets Manager |
| "무료로 설정 값 저장" | Parameter Store (Standard) |
| "크로스 리전 시크릿 복제" | Secrets Manager |
| "계층적 구조로 환경별 설정 관리" | Parameter Store |
| "30일마다 API 키 자동 교체" | Secrets Manager |
| "CloudFormation 스택 간 값 공유" | Parameter Store |
| "비용 최소화 + 단순 암호 저장" | Parameter Store (SecureString) |
오답 함정
❌ Parameter Store도 자동 로테이션을 지원한다
→ 직접 Lambda로 구현해야 함
❌ Secrets Manager는 무료 티어가 있다
→ 항상 유료 ($0.40/시크릿/월)
❌ Parameter Store의 모든 타입이 암호화된다
→ SecureString만 암호화, String/StringList는 평문
❌ 두 서비스 모두 크로스 리전 복제를 지원한다
→ Secrets Manager만 네이티브 지원
❌ Secrets Manager는 설정 값 저장에 적합하다
→ 비용 효율적이지 않음, Parameter Store 권장
FAQ
Q1: 두 서비스를 함께 사용해도 되나요?
네, 많은 조직에서 두 서비스를 함께 사용합니다.
- Secrets Manager: 데이터베이스 자격 증명, 자동 로테이션 필요한 API 키
- Parameter Store: 환경 설정, 비민감 데이터, 비용 최소화
Q2: Secrets Manager 비용을 줄이는 방법이 있나요?
- 캐싱 사용: SDK에서 제공하는 캐싱 라이브러리 활용
- API 호출 최소화: 애플리케이션 시작 시 한 번만 조회
- 시크릿 통합: 여러 값을 하나의 JSON 시크릿으로 저장
Q3: Parameter Store SecureString도 로테이션할 수 있나요?
직접 구현해야 합니다. EventBridge 스케줄 + Lambda 함수로 주기적으로 값을 업데이트하는 방식입니다. Secrets Manager처럼 AWS 관리형 로테이션은 제공되지 않습니다.
Q4: 어떤 서비스가 더 안전한가요?
둘 다 안전합니다. 두 서비스 모두 KMS 암호화, IAM 정책, VPC Endpoint를 지원합니다. 차이점은 Secrets Manager가 로테이션, 감사 추적 등 엔터프라이즈 보안 기능에 더 특화되어 있다는 것입니다.
Q5: 마이그레이션은 어떻게 하나요?
Parameter Store → Secrets Manager:
1. Secrets Manager에 새 시크릿 생성
2. 애플리케이션 코드 수정 (API 호출 변경)
3. 테스트 후 Parameter Store 파라미터 삭제
Secrets Manager → Parameter Store:
1. Parameter Store에 SecureString 파라미터 생성
2. 애플리케이션 코드 수정
3. 로테이션 로직 직접 구현 (필요 시)
4. 테스트 후 시크릿 삭제
마무리
Secrets Manager와 Parameter Store는 각자의 강점이 있습니다:
| 기준 | 선택 |
|---|---|
| 자동 로테이션 | Secrets Manager |
| 무료 사용 | Parameter Store |
| RDS 통합 | Secrets Manager |
| 설정 값 관리 | Parameter Store |
| 크로스 리전 | Secrets Manager |
시험에서는 자동 로테이션 = Secrets Manager, 무료/설정 값 = Parameter Store로 기억하면 대부분의 문제를 해결할 수 있습니다.
다음으로 KMS 키 관리와 IAM 역할 vs 사용자를 학습하면 보안 관련 내용을 완성할 수 있습니다.