03/10 — 데이터·키·비밀값 보호
이 구간은 데이터, 암호화 키, 비밀값 수명주기, 제공 경로를 제어면별로 연결하게 해준다.
1. 단순 정의
- 저장 암호화(at rest): 저장된 데이터를 보호한다. S3 새 객체는 SSE-S3가 기본이며, 키 정책·감사·수명주기 통제가 필요하면 SSE-KMS와 customer managed KMS key를 쓴다. S3 암호화
- 전송 암호화(in transit): 이동 중인 데이터를 TLS/HTTPS로 보호한다. ACM은 ALB·CloudFront 같은 통합 서비스의 인증서를 관리한다. ACM
- AWS KMS: 암호화 키의 생성·사용 권한·수명주기를 관리하는 서비스다. KMS key는 data key를 보호하고, data key가 실제 데이터를 암호화하는 봉투 암호화가 기본 관계다. Data keys
- Secrets Manager: DB 자격 증명·API key처럼 교체되는 비밀의 저장·조회·회전을 관리한다. 회전은 대상 시스템의 자격 증명도 함께 갱신한다. Secrets Manager
- Parameter Store: 계층형 구성값을 관리한다. 민감한 정적 값은 KMS로 값만 암호화하는
SecureString에 둔다. Parameter Store - S3 bucket policy: 버킷이 허용할 주체·작업·객체·조건을 정하는 resource-based policy다. OAC는 CloudFront의 원본 접근을, presigned URL은 특정 S3 작업의 임시 위임을 담당한다.
2. 결정 축과 관계
첫 번째 축은 무엇의 수명주기를 관리하는가다. 정적 구성은 Parameter Store, 실제 자격 증명과 자동 회전은 Secrets Manager, 암호화 키와 사용 권한은 KMS로 연결한다. 비밀 회전
두 번째 축은 데이터 권한과 키 권한의 결합이다. SSE-KMS S3 객체 읽기는 s3:GetObject와 kms:Decrypt가 함께 성립해야 한다. KMS key policy가 기본 권한 원천이며, IAM policy는 위임된 범위에서 실제 호출 주체에 키 사용 권한을 부여한다. 교차 계정은 키 소유 계정의 key policy와 호출 주체의 IAM policy를 함께 둔다. KMS key policy
봉투 암호화에서 KMS는 평문·암호화된 data key 쌍을 만든다. 애플리케이션은 평문 키로 데이터를 암호화해 메모리에서 제거하고, 암호화된 키를 암호문과 함께 둔다. 동일 KMS key의 자동·온디맨드 회전은 새 키 재료를 쓰면서 기존 암호문의 복호화를 유지하고, Secrets Manager 회전은 실제 비밀번호·토큰을 교체한다. KMS 회전
세 번째 축은 보호하는 데이터 상태다. SSE-S3·SSE-KMS는 저장 상태, TLS/HTTPS는 전송 상태를 담당하므로 각각 완성한다. S3 기본 암호화는 새 객체의 기본 동작이고, bucket policy는 aws:SecureTransport나 KMS key 조건으로 요청의 수용 기준을 강제한다.
마지막 축은 누구에게 어느 범위로 제공하는가다. CloudFront 전용 비공개 원본은 Block Public Access를 유지한 일반 S3 bucket origin에 OAC를 연결하고, bucket policy의 distribution ARN으로 좁힌다. SSE-KMS라면 KMS key policy에도 이 경계를 둔다. 개별 객체의 임시 GET·PUT은 서명자 권한과 자격 증명 수명 안에서 작동하는 presigned URL로 좁힌다. OAC, Presigned URL
3. 아키텍처 적용
사례 A — 민감한 문서 저장
클라이언트는 HTTPS로 업로드하고 S3는 customer managed KMS key의 SSE-KMS로 저장한다. IAM·bucket policy는 객체 작업을, key policy는 키 사용자를 한정한다.
사례 B — 애플리케이션 설정과 DB 자격 증명
Lambda는 정적 구성을 Parameter Store에서, 회전되는 DB 자격 증명을 Secrets Manager에서 읽는다. 실행 역할에는 해당 값의 조회와 customer managed key의 Decrypt 권한만 둔다. 코드는 값 대신 참조를 가진다.
사례 C — 같은 버킷의 두 제공 경로
Block Public Access를 유지한 일반 S3 원본은 CloudFront + OAC(always sign) + distribution ARN으로 좁힌 bucket policy로 제공한다. 개별 업로드에는 짧은 presigned URL을 발급한다. 전자는 원본 주체를 고정하고, 후자는 한 객체 작업을 잠시 위임한다.
4. 정답 구조
- 키 정책·감사·수명주기를 직접 통제하는 S3 저장 → SSE-KMS + customer managed KMS key → 객체 권한과 키 권한의 결합
- 대용량 데이터 암호화 → data key로 데이터 암호화 + KMS key로 data key 보호 → 봉투 암호화
- 회전되는 DB 암호·API key → Secrets Manager + rotation + workload role → 비밀과 대상 시스템의 수명주기 동기화
- 계층형 정적 구성·민감한 구성값 → Parameter Store String/SecureString + workload role → 경로 단위 구성 조회
- 저장·전송 모두 보호 → 서비스 저장 암호화 + TLS/HTTPS → 서로 독립적인 데이터 상태 보호
- CloudFront만 읽는 비공개 S3 원본 → OAC + distribution 범위 bucket policy → 원본 접근 고정
- 한 객체의 임시 다운로드·업로드 → S3 presigned URL → 서명자 권한 안의 시간 제한 위임
5. 긍정형 암기표
| 요구사항의 중심 | 올바른 연결 |
|---|---|
| S3의 기본 저장 암호화 | SSE-S3 |
| 키 정책·감사·수명주기 통제 | SSE-KMS + customer managed KMS key |
| 데이터 키를 장기 키로 보호 | KMS 봉투 암호화 |
| KMS key의 기본 권한 원천 | KMS key policy |
| 회전되는 자격 증명·토큰 | Secrets Manager |
| 계층형 정적 구성 | Parameter Store |
| 암호화된 정적 구성값 | Parameter Store SecureString |
| 전송 중 데이터 보호 | TLS/HTTPS + ACM 인증서 |
| CloudFront 전용 비공개 S3 원본 | OAC + distribution 범위 bucket policy |
| 특정 S3 객체의 임시 GET·PUT | Presigned URL |
다음: 04/10 — 메시지로 비동기 압력 제어. SQS의 속도 분리, 격리, 재처리, 순서·우선순위를 연결한다.