AWS Certified Solutions Architect - Associate (SAA-C03) #3 Domain 1-2 안전한 아키텍처: KMS와 암호화
#2 IAM 깊이에서 “누가 무엇에 접근하는가"를 잡았습니다. 이번에는 한 단계 더 들어가, 접근이 뚫리더라도 데이터 자체를 읽지 못하게 하는 암호화를 다룹니다. SAA에서 암호화 문항은 대부분 “이 데이터를 어떻게 안전하게 저장/전송할 것인가"와 “키를 누가 통제하는가"라는 두 축으로 나옵니다. 그 중심에 KMS가 있습니다.
KMS는 무엇인가 #
AWS Key Management Service(KMS)는 암호화 키를 만들고 관리하는 관리형 서비스입니다. 중요한 전제 두 가지가 있습니다.
- KMS는 리전 서비스입니다. 키는 생성된 리전을 벗어나지 않습니다(멀티 리전 키는 예외).
- KMS는 한 번에 최대 4KB까지만 직접 암호화합니다. 그래서 실제 데이터는 봉투 암호화 방식으로 처리합니다(아래 설명).
키의 종류 #
| 키 종류 | 누가 관리 | 회전 | 비용 | 키 정책 제어 |
|---|---|---|---|---|
| AWS 관리형 키 (AWS managed) | AWS | 자동 (1년) | 무료 | 불가 |
| 고객 관리형 키 (Customer managed, CMK) | 사용자 | 선택 (자동/수동) | 월 $1 + 사용량 | 가능 |
| AWS 소유 키 (AWS owned) | AWS | AWS 재량 | 무료 | 불가 (보이지 않음) |
시험에서 갈리는 지점은 **“키 사용을 감사하거나 통제해야 하는가”**입니다. 키 정책을 직접 제어하고 CloudTrail로 사용 기록을 남겨야 한다면 **고객 관리형 키(CMK)**가 답입니다. 단순히 “암호화만 되면 된다"면 AWS 관리형 키로 충분합니다.
대칭 키 vs 비대칭 키 #
KMS 키는 기본적으로 **대칭 키(256-bit AES)**입니다. 같은 키로 암호화,복호화하며, 키 자료가 KMS 밖으로 나가지 않습니다. **비대칭 키(RSA/ECC)**는 공개 키로 암호화하고 개인 키로 복호화하거나, 서명/검증에 사용합니다. 대부분의 저장 암호화는 대칭 키이며, 비대칭은 외부와 공개 키를 주고받아야 할 때만 씁니다.
봉투 암호화 (Envelope Encryption) #
KMS가 4KB까지만 직접 암호화하는데, 어떻게 수십 GB 파일을 암호화할까요. 답은 봉투 암호화입니다.
- KMS에 데이터 키(Data Key) 생성을 요청합니다(
GenerateDataKey). - KMS는 평문 데이터 키와 암호화된 데이터 키 두 개를 돌려줍니다.
- 평문 데이터 키로 실제 데이터를 암호화한 뒤, 평문 키는 메모리에서 폐기합니다.
- 암호화된 데이터와 암호화된 데이터 키를 함께 저장합니다.
- 복호화 시에는 암호화된 데이터 키를 KMS에 보내 평문 키를 받아, 그 키로 데이터를 풉니다.
핵심은 KMS 키(KEK)는 데이터 키(DEK)만 암호화하고, 실제 데이터는 데이터 키가 암호화한다는 점입니다. 덕분에 큰 데이터도 KMS 호출 한 번으로 처리하고, KMS 마스터 키는 KMS를 떠나지 않습니다. S3 SSE-KMS, EBS, RDS 암호화가 모두 내부적으로 이 방식을 씁니다.
at rest vs in transit #
| 구분 | 의미 | 대표 수단 |
|---|---|---|
| 저장 시 암호화 (at rest) | 디스크/스토리지에 쓰일 때 암호화 | S3 SSE, EBS 암호화, RDS 암호화 |
| 전송 중 암호화 (in transit) | 네트워크를 지날 때 암호화 | TLS/SSL, HTTPS |
시험에서 “데이터를 저장과 전송 양쪽에서 보호하라"는 요구사항이 나오면, 저장은 KMS 기반 암호화, 전송은 TLS라는 두 축으로 답을 구성합니다.
S3 암호화 옵션 #
S3의 저장 암호화는 키를 누가 쥐느냐로 나뉩니다.
| 방식 | 키 관리 | 특징 |
|---|---|---|
| SSE-S3 | AWS가 키 관리 (AES-256) | 가장 간단. 키 통제 불필요할 때 |
| SSE-KMS | KMS 키 사용 | 키 사용 감사,접근 통제 가능 |
| SSE-C | 고객이 키 제공 | 키를 AWS에 맡기지 않음. 매 요청에 키 전달 |
| 클라이언트 측 암호화 | 업로드 전 직접 암호화 | AWS가 평문을 전혀 보지 못함 |
“누가 객체를 복호화했는지 추적해야 한다"면 SSE-KMS, “키 자체를 AWS에 두면 안 된다"는 규제가 있으면 SSE-C 또는 클라이언트 측 암호화가 방향입니다.
EBS와 RDS: 이미 만든 리소스를 암호화하기 #
SAA 단골 함정이 여기 있습니다. EBS 볼륨과 RDS 인스턴스의 암호화는 생성 시점에만 켤 수 있고, 나중에 토글로 바꿀 수 없습니다. 이미 만들어진 비암호화 리소스를 암호화하려면 우회 경로가 필요합니다.
- EBS. 비암호화 볼륨 → 스냅샷 생성 → 스냅샷을 암호화하여 복사 → 그 스냅샷으로 새 볼륨 생성. EBS 암호화는 볼륨,스냅샷,인스턴스와 볼륨 사이 전송까지 함께 보호합니다.
- RDS. 비암호화 인스턴스 → 스냅샷 생성 → 스냅샷을 암호화하여 복사 → 그 스냅샷에서 새 인스턴스로 복원. 기존 인스턴스를 직접 암호화하는 옵션은 없습니다.
키 정책과 교차 계정 공유 #
KMS 키에는 **키 정책(Key Policy)**이라는 리소스 기반 정책이 반드시 붙습니다. 키 접근은 다음 조합으로 결정됩니다.
- 키 정책. 키에 직접 붙는 정책. 기본 키 정책은 루트 계정에 전체 권한을 줍니다.
- IAM 정책. 키 정책이 IAM에 위임을 허용한 경우에만 효력.
- Grant. 일시적,세밀한 권한 위임.
다른 계정이 키를 쓰게 하려면 키 정책에서 그 계정 Principal을 허용하고, 상대 계정에서는 IAM 정책으로 키 사용을 허용합니다. 교차 계정 암호화 데이터(예: 다른 계정과 공유하는 암호화 S3, 암호화 스냅샷)는 이 키 정책 설정이 빠지면 접근이 막힙니다.
KMS vs CloudHSM #
| 항목 | KMS | CloudHSM |
|---|---|---|
| 테넌시 | 멀티 테넌트(공유) | 싱글 테넌트(전용 하드웨어) |
| 키 통제 | AWS와 공유 관리 | 고객이 완전 통제 |
| 표준 | FIPS 140-2 Level 3 검증 모듈 사용 | 전용 HSM, FIPS 140-2 Level 3 |
| 용도 | 대부분의 AWS 통합 암호화 | 규제로 키를 완전 단독 통제해야 할 때 |
“키 자료를 우리만 통제해야 한다”, “전용 하드웨어 보안 모듈이 규제 요건"이라는 단서가 있으면 CloudHSM이 답입니다. 그 외 대부분은 KMS로 충분합니다.
시험 출제 패턴 #
- “저장 데이터를 암호화하되 누가 복호화했는지 감사해야 한다.” → SSE-KMS(고객 관리형 키)
- “키를 AWS에 맡기면 안 된다는 규제가 있다.” → SSE-C / 클라이언트 측 / CloudHSM
- “이미 운영 중인 비암호화 RDS를 암호화하려면?” → 스냅샷 → 암호화 복사 → 복원
- “비암호화 EBS 볼륨을 암호화하려면?” → 스냅샷 → 암호화 복사 → 새 볼륨
- “수십 GB 객체를 KMS로 암호화하는 원리는?” → 봉투 암호화(데이터 키)
- “다른 계정이 우리 암호화 스냅샷을 복원하지 못한다.” → 키 정책에 그 계정 허용 누락
자주 만나는 함정 #
1) KMS가 데이터를 직접 다 암호화한다고 생각 #
KMS는 4KB까지만 직접 처리합니다. 큰 데이터는 봉투 암호화로 데이터 키가 처리합니다.
2) EBS/RDS 암호화를 나중에 켤 수 있다고 오해 #
생성 시점에만 가능합니다. 기존 리소스는 스냅샷 → 암호화 복사 경로를 거칩니다.
3) AWS 관리형 키의 회전을 끌 수 있다고 생각 #
AWS 관리형 키는 1년 주기로 자동 회전되며 끌 수 없습니다. 회전 주기를 제어하려면 고객 관리형 키를 써야 합니다.
4) 교차 계정에서 IAM 정책만 손본다 #
KMS 교차 계정 접근은 키 정책 허용이 먼저입니다. 키 정책에 상대 계정이 없으면 IAM에서 아무리 허용해도 막힙니다.
정리 #
이번 글에서 잡은 것:
- KMS는 리전 서비스, 직접 암호화는 4KB까지. 큰 데이터는 봉투 암호화
- 키 종류. AWS 관리형(통제 불가, 무료) vs 고객 관리형(통제,감사 가능, 월 $1)
- S3. SSE-S3 / SSE-KMS(감사) / SSE-C / 클라이언트 측. 키 통제 요구에 따라 선택
- EBS,RDS는 생성 시에만 암호화. 기존 리소스는 스냅샷 → 암호화 복사
- 교차 계정. 키 정책 허용이 선행, 그다음 IAM
- CloudHSM. 전용 하드웨어로 키를 완전 단독 통제해야 할 때
다음: Domain 1-3 VPC 보안 #
데이터 암호화를 잡았으니, 다음은 네트워크 경계에서의 보안입니다.
#4 Domain 1-3 VPC 보안에서는 보안 그룹(Security Group)과 네트워크 ACL의 차이(stateful vs stateless), VPC Endpoint의 두 종류(Gateway,Interface), PrivateLink로 서비스를 사설로 노출하는 방법, 그리고 VPC Flow Logs와 배스천 호스트까지 정리하겠습니다.