AWS DVA-C02 마스터 노트 시리즈 10편. KMS 봉투 암호화·CMK 종류·키 정책, SSM Parameter Store 무료 vs Advanced·SecureString, Secrets Manager 자동 회전과 RDS 통합, Encryption SDK 클라이언트측 암호화까지 — 시험 보안 도메인의 마지막 핵심을 한 흐름으로.
이 글은 AWS DVA-C02 마스터 노트 시리즈의 열 번째 편입니다. 1편 IAM이 "누가 접근하는가"였다면, 10편은 "데이터를 어떻게 보호하는가" — KMS·SSM Parameter Store·Secrets Manager·Encryption SDK.
시험 도메인 2 (보안) 26%의 두 번째 절반.
KMS — 키 관리
비유 — 회사 금고와 마스터키 보안실. 모든 AWS 서비스의 암호화 키 중앙 관리.
CMK 종류
| 종류 | 설명 | 비용 |
|---|---|---|
| AWS Owned | AWS가 소유, 일반 사용자는 안 보임 | 무료 |
| AWS Managed | 서비스별 자동 (예: aws/s3) | 무료 |
| Customer Managed | 사용자가 만든 키 | $1/월 + 사용량 |
여기서 시험 함정이 하나 있어요. Customer Managed Key 만 키 정책을 직접 설정할 수 있어요. AWS Managed는 정책 변경 X.
대칭 vs 비대칭
| 종류 | 용도 |
|---|---|
| 대칭 (Symmetric) | 일반 데이터 암호화 (AES-256) |
| 비대칭 (Asymmetric) | 디지털 서명·검증 (RSA·ECC) |
대부분 시나리오는 대칭. 비대칭은 외부 시스템 통합·서명 검증 같은 특수 자리.
키 정책 (Key Policy)
키에 직접 붙는 정책. IAM과 별도 평가.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Enable IAM User Permissions",
"Effect": "Allow",
"Principal": { "AWS": "arn:aws:iam::123456789012:root" },
"Action": "kms:*",
"Resource": "*"
},
{
"Sid": "Allow use for encryption",
"Effect": "Allow",
"Principal": { "AWS": "arn:aws:iam::123456789012:user/Alice" },
"Action": ["kms:Encrypt", "kms:Decrypt"],
"Resource": "*"
}
]
}
키 자동 회전
Customer Managed Key — 매년 자동 회전 (활성 시)
AWS Managed Key — 매년 자동 (사용자가 끌 수 없음)
기존 데이터는 옛 키로 복호화 가능 (백워드 호환).
여기서 시험 함정이 하나 있어요. 자동 회전은 매년 1회. 더 자주 회전 필요하면 수동 회전 (새 키 만들고 별칭 이동).
봉투 암호화 (Envelope Encryption)
큰 데이터는 KMS 직접 암호화 X (4KB 한도). 대신:
1. KMS GenerateDataKey → Data Key (DEK) 받음
- 평문 DEK + 암호화된 DEK
2. 평문 DEK로 큰 데이터 암호화
3. 평문 DEK는 메모리에서 폐기
4. 암호화된 데이터 + 암호화된 DEK 함께 저장
복호화:
1. KMS Decrypt(암호화된 DEK) → 평문 DEK
2. 평문 DEK로 데이터 복호화
여기서 정말 중요한 시험 함정 — KMS 직접 호출은 4KB 한도. 이상은 봉투 암호화 패턴. AWS Encryption SDK·S3 SSE-KMS 모두 내부적으로 봉투 암호화 사용.
KMS API
| API | 용도 |
|---|---|
Encrypt |
≤4KB 직접 암호화 |
Decrypt |
복호화 |
GenerateDataKey |
DEK 생성 (봉투 암호화) |
GenerateDataKeyWithoutPlaintext |
암호화된 DEK만 (저장용) |
ReEncrypt |
DEK를 다른 CMK로 재암호화 |
SSM Parameter Store
비유 — 회사 공용 설정 게시판. 환경 변수·설정·일부 비밀을 중앙 관리.
계층 (Tier)
| 계층 | 한도 | 비용 |
|---|---|---|
| Standard | 10,000 파라미터 / 4KB | 무료 |
| Advanced | 100,000 / 8KB | $0.05/파라미터/월 |
타입
| 타입 | 설명 |
|---|---|
| String | 일반 문자열 |
| StringList | 콤마 구분 |
| SecureString | KMS 암호화 (비밀번호·API Key) |
계층 구조
/myapp/dev/db_host
/myapp/dev/db_password (SecureString)
/myapp/prod/db_host
/myapp/prod/db_password (SecureString)
경로별 IAM 권한 관리 가능.
사용 예시
import boto3
ssm = boto3.client('ssm')
# 일반
db_host = ssm.get_parameter(Name='/myapp/prod/db_host')['Parameter']['Value']
# SecureString
db_password = ssm.get_parameter(
Name='/myapp/prod/db_password',
WithDecryption=True
)['Parameter']['Value']
여기서 시험 함정이 하나 있어요. SecureString 조회 시 WithDecryption=True 필수. 안 하면 암호화된 값 그대로.
Parameter Store vs 환경 변수
환경 변수 — 빌드 시 박힘, 변경 = 재배포
Parameter Store — 런타임 조회, 변경 즉시 반영
Secrets Manager — 비밀 관리·자동 회전
비유 — 자동 비밀번호 갱신 금고. DB 비밀번호·API 키 자동 회전.
Parameter Store와의 차이
| 구분 | Parameter Store | Secrets Manager |
|---|---|---|
| 비용 | 무료 (Standard) | $0.40/시크릿/월 + API 호출 |
| 자동 회전 | X | ◯ |
| RDS 통합 | X | ◯ (자동 관리) |
| 최대 크기 | 4KB / 8KB | 64KB |
| 적합 | 설정·일반 비밀 | DB 비밀번호·API Key |
자동 회전
Lambda 함수가 주기적(기본 30일) 새 비밀번호 생성·DB 업데이트.
Day 0: 시크릿 생성, 비밀번호 P1
Day 30: 자동 회전 → P2 (애플리케이션 무중단)
Day 60: P3
여기서 정말 중요한 시험 함정 — DB 비밀번호 자동 회전 = Secrets Manager 표준. Parameter Store로는 자동 회전 X. RDS·Aurora는 Secrets Manager와 자동 통합 가능.
사용 예시
import boto3
import json
secrets = boto3.client('secretsmanager')
response = secrets.get_secret_value(SecretId='myapp/db/credentials')
credentials = json.loads(response['SecretString'])
db_user = credentials['username']
db_pass = credentials['password']
CloudHSM
비유 — 하드웨어 보안 모듈 (HSM) 임대. 규제 산업(금융·의료) 자체 키 관리.
| 구분 | KMS | CloudHSM |
|---|---|---|
| 키 소유 | AWS (공유) | 사용자 (전용 HSM) |
| 비용 | 저렴 | 매우 비쌈 |
| FIPS | 140-2 Level 2 | Level 3 |
| 적합 | 일반 | 규제·컴플라이언스 |
대부분 시나리오는 KMS. CloudHSM은 특수 자리만.
AWS Encryption SDK
클라이언트측 암호화 라이브러리.
import aws_encryption_sdk
from aws_encryption_sdk import CommitmentPolicy
client = aws_encryption_sdk.EncryptionSDKClient(
commitment_policy=CommitmentPolicy.REQUIRE_ENCRYPT_REQUIRE_DECRYPT
)
key_provider = aws_encryption_sdk.StrictAwsKmsMasterKeyProvider(
key_ids=['arn:aws:kms:us-east-1:...:key/abcd-1234-...']
)
# 암호화
ciphertext, header = client.encrypt(
source=b'sensitive data',
key_provider=key_provider
)
# 복호화
plaintext, header = client.decrypt(
source=ciphertext,
key_provider=key_provider
)
특징:
- 봉투 암호화 자동 처리
- 다중 KMS 키 지원 (복원력)
- AWS 외부에도 사용 가능
여기서 시험 함정이 하나 있어요. 클라이언트측 암호화 = AWS는 평문 못 봄. 가장 강한 보안 모드. 단, 키 관리·복호화 로직 사용자 책임.
DynamoDB Encryption Client
DynamoDB 항목 단위 클라이언트측 암호화.
특정 컬럼만 암호화 (PII 필드 등). 평문 검색은 X (인덱스 못 만듦).
ACM (Certificate Manager)
SSL/TLS 인증서 무료 발급·관리. ELB·CloudFront·API Gateway에 자동 배포.
ACM에서 발급 → ALB 리스너에 부착 → HTTPS 자동
자동 갱신. 인증서 만료 걱정 X.
여기서 시험 함정이 하나 있어요. ACM 인증서는 AWS 서비스에만 사용 가능. EC2 직접 부착 X (ELB·CloudFront 통해야).
WAF — Web Application Firewall
XSS·SQL Injection·봇 차단. CloudFront·ALB·API Gateway에 적용.
룰 종류
- IP 차단·허용
- 지리적 위치
- SQL Injection·XSS 패턴
- Rate-based (DDoS)
- 매니지드 룰 (AWS·서드파티)
Shield — DDoS 방어
| 종류 | 설명 |
|---|---|
| Shield Standard | 자동, 모든 AWS 사용자 (무료) |
| Shield Advanced | $3,000/월, 24/7 DDoS Response Team |
대부분 Standard로 충분.
시험 직전 한 번 더 — 자주 헷갈리는 함정 모음
여기까지가 10편의 핵심입니다. 시험 직전 또는 실무에서 헷갈릴 때 다시 펼쳐 볼 수 있게 압축 노트로 마무리할게요.
- KMS CMK 3종 — AWS Owned (무료) / AWS Managed (서비스별) / Customer Managed (정책 직접)
- 대칭 (AES-256) / 비대칭 (RSA·ECC, 서명)
- Key Policy — 키에 직접 붙는 정책, IAM과 별도
- 자동 회전 매년 1회, Customer Managed 활성 시
- 봉투 암호화 — KMS GenerateDataKey → DEK → 큰 데이터 암호화
- KMS 직접 암호화 4KB 한도
- API — Encrypt / Decrypt / GenerateDataKey / GenerateDataKeyWithoutPlaintext / ReEncrypt
- SSM Parameter Store — Standard (무료, 10K, 4KB) / Advanced (100K, 8KB)
- 타입 — String / StringList / SecureString (KMS 암호화)
- 계층 구조 (
/myapp/prod/db_host) — IAM 권한 관리 WithDecryption=True— SecureString 평문 조회- Secrets Manager = DB 비밀번호 / API Key, 자동 회전
- 회전 기본 30일, Lambda로 갱신
- RDS·Aurora 자동 통합
- 비용 $0.40/시크릿/월
- Parameter Store ≠ Secrets Manager — 자동 회전 차이
- CloudHSM = 전용 HSM, FIPS Level 3, 규제·컴플라이언스
- 대부분 KMS로 충분
- Encryption SDK = 클라이언트측 암호화
- AWS는 평문 못 봄 — 가장 강한 보안
- DynamoDB Encryption Client = 항목 단위 (PII 컬럼)
- 인덱스 못 만듦
- ACM = SSL/TLS 무료 발급·자동 갱신
- ELB·CloudFront·API Gateway만 (EC2 직접 X)
- WAF = XSS·SQL Injection·DDoS, CloudFront·ALB·API Gateway
- Rate-based 룰 = DDoS 완화
- Shield Standard (무료, 자동) / Shield Advanced ($3,000/월)
시리즈 다른 편
- 1편 — IAM
- 2편 — 컴퓨팅
- 3편 — 스토리지
- 4편 — 데이터베이스
- 5편 — 네트워킹
- 6편 — 메시징
- 7편 — 서버리스
- 8편 — CI/CD
- 9편 — 모니터링
- 10편 — 보안·암호화 (현재 글)
- 11편 — 컨테이너
- 12편 — 개발자 도구
공식 문서: KMS Developer Guide / Secrets Manager User Guide 에서 더 깊이.
다음 글(11편)에서는 컨테이너 — ECS Cluster·Task Definition, Fargate 서버리스, ECR Image, EKS Kubernetes까지 풀어 갑니다.