SAABlog
보안초급

Secrets Manager vs Parameter Store: 어떤 걸 써야 할까?

AWS Secrets Manager와 Parameter Store의 차이점, 비용, 기능을 비교하고 상황별 선택 기준을 제시합니다. SAA-C03 시험 필수 개념.

PHILOLAMB-
Secrets ManagerParameter Store시크릿비밀번호보안

관련 시험 도메인

  • Domain 1: Design Secure Architectures

핵심 요약

자동 로테이션이 필요하면 Secrets Manager, 무료로 간단히 저장하려면 Parameter Store를 선택하세요. Secrets Manager는 RDS 자격 증명 자동 로테이션과 크로스 리전 복제가 강점이고, Parameter Store는 무료 티어와 설정 값 저장에 최적화되어 있습니다.

시험 팁

시험 핵심: "RDS 자격 증명 자동 로테이션" → Secrets Manager. "무료로 설정 값 저장" → Parameter Store (Standard). 두 서비스 모두 KMS로 암호화 가능합니다.

구분Secrets ManagerParameter Store
주요 용도자격 증명 전체 수명주기 관리설정 값 + 간단한 시크릿
자동 로테이션✅ 기본 제공 (RDS, Redshift 등)❌ 직접 구현 필요
비용$0.40/시크릿/월 + API 호출무료 (Standard), $0.05/Advanced
크로스 리전 복제✅ 기본 제공❌ 직접 구현 필요
최대 크기64KB4KB (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 ManagerParameter Store
기본 로테이션✅ AWS 관리형 (RDS, Redshift 등)❌ 미지원
커스텀 로테이션✅ Lambda 함수 연동직접 구현 필요
로테이션 주기1일 ~ 365일 설정 가능N/A
Secrets Manager 자동 로테이션 흐름:
1. 로테이션 스케줄 설정 (예: 30일마다)
2. AWS가 Lambda 함수 자동 호출
3. 새 자격 증명 생성
4. 데이터베이스에 새 자격 증명 적용
5. 애플리케이션은 자동으로 새 자격 증명 사용

시험 팁

시험 포인트: RDS 마스터 자격 증명 로테이션 시 Aurora는 자동으로 연결 유지, 일반 RDS는 애플리케이션 재연결 필요할 수 있습니다.

비용 구조

항목Secrets ManagerParameter Store (Standard)Parameter Store (Advanced)
기본 요금$0.40/시크릿/월무료$0.05/파라미터/월
API 요청$0.05/10,000건무료$0.05/10,000건
최대 크기64KB4KB8KB
최대 개수무제한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 ManagerParameter Store
최대 값 크기64KB4KB / 8KB (Advanced)
버전 관리✅ (자동)✅ (Advanced만)
라벨링✅ (AWSCURRENT, AWSPREVIOUS)

통합 서비스

통합 서비스Secrets ManagerParameter 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 비용을 줄이는 방법이 있나요?

  1. 캐싱 사용: SDK에서 제공하는 캐싱 라이브러리 활용
  2. API 호출 최소화: 애플리케이션 시작 시 한 번만 조회
  3. 시크릿 통합: 여러 값을 하나의 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 사용자를 학습하면 보안 관련 내용을 완성할 수 있습니다.