암호화 구현과 키 관리

DVA-C02 대비 KMS 키 유형, 봉투 암호화, S3 SSE 옵션(SSE-S3/KMS/C), 클라이언트/서버 측 암호화를 비교 정리합니다.

인터넷에 올린 파일이 중간에 누군가에게 들킨다면 어떻게 될까요? 이를 막기 위해 데이터를 알아볼 수 없는 형태로 바꾸는 것이 바로 암호화입니다. AWS는 KMS라는 서비스로 이 암호화 키를 안전하게 관리해 줍니다.

DVA-C02 시험에서 암호화 문제는 어떤 암호화 방식을 사용해야 하는가와 키를 어떻게 관리하는가를 집중적으로 묻습니다.

 

AWS KMS (Key Management Service)란?

KMS는 암호화 키를 만들고 관리하는 AWS 서비스입니다. 쉽게 말하면 디지털 금고 열쇠 보관소입니다. 여러분의 데이터를 잠그는 열쇠를 안전하게 보관하고, 필요할 때만 꺼내 쓸 수 있게 해줍니다.

 

KMS 키 유형

키를 누가 관리하느냐에 따라 세 가지로 나뉩니다.

AWS 관리형 키: AWS가 알아서 다 해줍니다. 별도 비용 없음. 키 교체도 자동으로 이루어집니다. 대부분의 기본 서비스에 사용됩니다. 고객 관리형 키(CMK): 여러분이 직접 키 정책, 교체 주기, 삭제를 관리합니다. 더 세밀한 접근 제어가 필요할 때 씁니다. 월 $1 + API 호출 비용이 발생합니다. AWS 소유 키: AWS 내부에서만 사용하는 키입니다. 고객에게는 보이지 않습니다.

 

봉투 암호화 (Envelope Encryption)

KMS는 한 번에 4KB 이하의 데이터만 직접 암호화할 수 있습니다. 그런데 실제 데이터는 훨씬 크죠. 이 문제를 해결하는 방법이 봉투 암호화입니다.

봉투 암호화는 편지를 봉투에 넣고, 그 봉투를 금고에 넣는 방식과 같습니다.

GenerateDataKey API를 호출해 데이터 키(편지를 잠그는 열쇠)를 만듭니다. 그 데이터 키로 실제 데이터를 내 컴퓨터에서 암호화합니다. KMS 마스터 키(금고 열쇠)로 데이터 키를 암호화합니다. 암호화된 데이터와 암호화된 데이터 키를 함께 저장합니다.

이렇게 하면 KMS로 직접 전송하는 데이터 양을 최소화하면서도 안전하게 큰 데이터를 암호화할 수 있습니다.

 

S3 서버 측 암호화 (SSE)

S3에 파일을 저장할 때 AWS가 자동으로 암호화해주는 방식입니다. 어떤 키를 사용하느냐에 따라 세 가지 옵션이 있습니다.

| 옵션 | 키 관리 주체 | 특징 | |------|------------|------| | SSE-S3 | S3가 관리 | 기본값. 별도 설정 불필요. 가장 간단함 | | SSE-KMS | KMS가 관리 | 누가 언제 키를 사용했는지 CloudTrail로 추적 가능. 보안 감사가 필요한 경우 | | SSE-C | 여러분이 키 직접 제공 | 자체 키 관리 인프라가 있을 때. 요청마다 키를 헤더에 담아 전송 |

주의할 점: SSE-KMS를 사용하면 S3 요청마다 KMS API가 호출됩니다. 트래픽이 많아지면 KMS 처리량 한도에 걸릴 수 있습니다(쓰로틀링). 이때 S3 Bucket Key를 활성화하면 KMS 호출 수를 대폭 줄여 이 문제를 완화할 수 있습니다.

 

클라이언트 측 암호화 vs 서버 측 암호화

서버 측 암호화: AWS가 암호화와 복호화를 담당합니다. 대부분의 경우에 이 방식을 사용합니다. SSE-S3, SSE-KMS가 여기에 해당합니다. 클라이언트 측 암호화: 여러분의 앱이 데이터를 먼저 암호화한 다음 AWS에 전송합니다. 쉽게 말하면 이미 자물쇠를 채운 채로 금고에 넣는 방식입니다. AWS조차 평문 데이터를 볼 수 없으므로 강력한 보안 규정이 있는 환경에서 사용합니다.

!클라이언트 측 vs 서버 측 암호화

전송 중 암호화

데이터를 인터넷으로 주고받을 때도 암호화가 필요합니다. HTTPS/TLS를 사용하면 전송 도중 데이터가 노출되지 않습니다. S3 버킷 정책에 aws:SecureTransport 조건을 추가하면 HTTP(비암호화)로 접근하는 요청을 아예 거부할 수 있습니다.

 

시험 핵심 정리

"4KB 이상 대용량 데이터 암호화" -- 봉투 암호화 (GenerateDataKey)

"암호화 키 사용 이력 감사 추적 (CloudTrail)" -- SSE-KMS

"기본 S3 암호화, 별도 설정 불필요" -- SSE-S3

"자체 키로 S3 암호화" -- SSE-C

"SSE-KMS 쓰로틀링 완화" -- S3 Bucket Key

"AWS가 평문을 보지 못하게" -- 클라이언트 측 암호화

"HTTP 접근 거부" -- aws:SecureTransport 조건

봉투 암호화의 핵심: 데이터 키로 데이터 암호화, 마스터 키로 데이터 키 암호화

블로그 목록으로 돌아가기