AWS

AWS KMS와 S3 서버 측 암호화 방식 정리

heesoohi 2025. 5. 21. 02:52

1. KMS(Key Management Service)란?

AWS Key Management Service(KMS)는 암호화 키의 생성부터 저장, 회전, 삭제까지 전체 수명주기를 관리하고, 실제 암호화 및 복호화 요청도 처리해주는 서비스다. 이 키들은 AWS가 제공하는 FIPS 140-2 인증 하드웨어 보안 모듈(HSM) 내부에서 안전하게 관리되며, 사용자나 AWS 운영자조차 키 내용을 직접 볼 수 없다. 사용자는 키를 보는 것이 아니라, 암호화 또는 복호화를 요청만 하고, 결과만 응답받는 방식이다.

KMS 키는 AWS 콘솔 또는 API를 통해 생성할 수 있고, 각 키에 대한 IAM 권한 설정이나 키 사용 기록 추적도 가능하다. CloudTrail을 통해 어떤 서비스나 사용자가 해당 키를 사용했는지 로그로 확인할 수 있어 감사와 보안 관리에 매우 유리하다.

 

2. KMS 키의 활용처

KMS는 AWS 전반의 다양한 서비스에서 암호화가 필요한 상황에 사용된다.

사용처 예시 설명
S3 SSE-KMS 방식으로 객체 암호화
EBS EC2 인스턴스의 볼륨 암호화
RDS 데이터베이스 내용 암호화
Secrets Manager DB 비밀번호, API 키 등 민감정보 암호화
SSM Parameter Store SecureString 파라미터 암호화
Lambda 환경 변수 암호화
CloudTrail 로그 파일 암호화
기타 커스텀 앱에서 SDK/API로 직접 암호화 요청 가능

 

 

3. SSE-S3 vs SSE-KMS 비교

S3는 서버 측 암호화를 위해 두 가지 주요 방식을 제공한다: SSE-S3와 SSE-KMS. 이 두 방식은 모두 AWS가 키를 관리하지만, 보안 제어 수준, 로그 기록 여부, 비용에서 차이가 있다.

항목 SSE-S3 (S3 기본 키)  SSE-KMS (KMS 키 지정)
암호화 키 관리 S3 내부에서 자동 관리 사용자가 생성한 KMS 키 지정 가능
암호화 방식 AES-256 AWS KMS가 제공하는 키로 암호화
키 접근 제어 불가능 IAM 및 KMS 정책으로 세분화 가능
CloudTrail 로그 추적 불가능 가능 (누가, 언제 키를 썼는지 기록됨)
비용 무료 KMS API 호출 수에 따라 과금 발생
사용 난이도 매우 쉬움 중간 (권한 관리 필요)

 

SSE-S3는 설정이 간편하고 비용이 들지 않기 때문에 기본적인 보안 요구에 적합하지만, 기업 보안 정책이나 감사 추적이 필요한 환경이라면 SSE-KMS가 더 적합하다.

 

4. SSE-C (사용자 제공 키)

SSE-C는 사용자(client)가 직접 생성한 암호화 키를 요청마다 함께 보내 S3에서 암호화를 수행하도록 하는 방식이다. 이 방식은 AWS가 키를 저장하지 않기 때문에, 완전한 키 제어가 가능하다는 장점이 있지만, 매 요청마다 키와 그에 대한 무결성 검증값을 함께 보내야 하므로 관리가 복잡하고 실수 위험도 크다.

사용자는 아래와 같은 헤더를 요청에 포함해야 한다:

  • x-amz-server-side-encryption-customer-algorithm
    : 일반적으로 AES256
  • x-amz-server-side-encryption-customer-key
    : base64로 인코딩된 암호화 키
  • x-amz-server-side-encryption-customer-key-MD5
    : 위 키의 base64 인코딩된 MD5 해시값

SSE-C는 데이터 보안에 극도로 민감하고, 자체적인 키 관리 체계를 갖춘 경우에만 사용하는 것이 좋다. 키가 손실되거나 잘못 전달되면 복구가 불가능하기 때문이다.

 

정리하자면 SSE-S3는 간편하지만 사용자 제어가 거의 없고, SSE-KMS는 보안성과 감사 기능이 뛰어나며 기업 환경에서 선호된다. SSE-C는 최고 수준의 키 제어를 가능하게 하지만 사용 난이도가 높고 실수 시 복구가 어렵다. 따라서 보안 요구 사항과 관리 수준, 비용 등을 종합적으로 고려해 적절한 암호화 방식을 선택하는 것이 중요하다.