클라우드 모니터링, 서버 모니터링, DB 모니터링, 네트워크 관리, 웹 애플리케이션 성능 모니터링, 통합로그관리, ITSM을 단일 플랫폼에서 관리, 브레인즈컴퍼니의 소식을 전합니다.
AWS KMS(Key Management Service)는 데이터 암호화에 사용되는 키를 생성하고 안전하게 관리할 수 있도록 지원하는 AWS의 관리형 서비스입니다. 클라우드 환경에서는 데이터가 외부 인프라에 저장되기 때문에 온프레미스와 달리 직접적인 통제가 어렵고, 그만큼 보안의 중요성이 커집니다. 암호화는 민감한 정보가 노출되는 것을 막는 가장 기본적인 보호 방식이지만, 암호화에 사용된 키가 유출되면 암호화 자체가 무력화되어 심각한 보안 위협으로 이어질 수 있습니다.
AWS KMS는 이러한 위험을 줄이기 위해 암호화 키의 생성, 보관, 사용을 AWS가 책임지고 관리하는 보안 중심의 관리형 서비스를 제공합니다. 이를 통해 암호화 키 자체의 안전성을 확보하며, 서비스 전반의 기밀성과 안정성을 강화할 수 있습니다.
그렇다면 AWS KMS의 주요 특징과 장점, 그리고 기본 암호화 활용 방법을 구체적인 예시를 통해 살펴보겠습니다.
AWS KMS는 데이터를 암호화하는 key를 암호화하여 보안 인증 장치인 HSM(물리적 공간)에 보관합니다. AWS KMS를 통해서만 HSM 내부에 저장된 Root Key에 접근 가능합니다. 이를 통해 키 구성요소를 안전하게 보호하고, 키가 물리적으로 격리되어 평문 형태로 외부로 유출되는 것을 원천적으로 차단합니다.
또한 AWS KMS는 키 정책을 활용해 암·복호화 권한을 세밀하게 제어할 수 있다는 장점이 있습니다. 동일한 키라 하더라도 사용자나 역할별로 서로 다른 권한을 부여할 수 있으며, 감사 로그를 통해 키 사용 이력을 추적하여 보안 관점에서의 모니터링과 통제가 가능합니다.
AWS KMS 키는 관리 주체에 따라 AWS 관리형 키와 고객 관리형 키로 구분됩니다. AWS 관리형 키는 AWS 서비스가 자동으로 생성·관리하며, 사용자가 직접 생성하거나 수정·삭제할 수 없습니다. 주로 S3, RDS 등 서비스의 기본 암호화 기능에 사용되어 별도 설정 없이 간편하게 활용할 수 있습니다.
반면 고객 관리형 키는 사용자가 직접 생성하고 운영하는 키로, 키 정책을 통해 접근 권한과 사용 범위를 세밀하게 제어할 수 있습니다. 보안 요구사항에 따라 권한 설정이나 정책 변경을 자유롭게 구성할 수 있다는 점이 장점입니다
AWS KMS의 주요 특징 중 하나는 키 순환(Key Rotation) 기능입니다. 키 순환은 일정 주기(기본 1년)에 따라 CMK(KMS 키)의 핵심 암호화 구성 요소(Key Material)를 자동으로 교체하여 키 유출 가능성을 낮추고 보안성을 강화하는 기능입니다.
키가 순환되면 이후 암호화 작업에는 새롭게 교체된 키 재료가 사용되지만, 순환 이전에 암호화된 데이터도 그대로 복호화할 수 있습니다. 이는 이전 버전의 Key Material이 KMS 내부에 안전하게 유지되어 복호화 요청 시 자동으로 참조되기 때문입니다.
또한 키 순환 시 ARN, 키 상태, 키 정책 등 키의 기본 정보는 변경되지 않고 암호화 재료만 새로워지므로, 애플리케이션 코드나 비즈니스 로직을 수정하지 않아도 기존과 동일한 방식으로 계속 사용할 수 있다는 장점이 있습니다.
AWS KMS 키 정책을 통해 키 사용 주체, 범위 등을 정하는 방식으로 보안성을 강화합니다.
키 정책을 구성하는 요소는 크게 Version, Id, Statement가 있습니다. 이 요소 중 Statement를 통해 키 사용 규칙을 관리할 수 있습니다.
Statement 구성 요소에 대해 살펴보겠습니다.
Sid : 식별자(키 정책 설명)
Effect : 결과(허용, 거부)
Principal : 주체(누구에게 적용되는지)
Action : 행위(무엇을 할수있는지)
Resource : 대상(어떤 key에 적용되는지)
Condition : 조건(ip, 시간 등 추가 조건)
위 키 정책은 Principal에 등록된 유저에게 해당 키로 Action에 나열된 행위를 허용하는 정책입니다.
추가로 이 키를 사용하기 위해서는 EncryptionContext를 포함해야하고 그 Context 내부에 key:value 형태로 “Purpose” : “KMSTEST” 를 가지고 있어야 합니다
이처럼 AWS KMS 사용자는 하나 이상의 Statement를 만들어 고객 관리형 키 사용 환경을 세부적으로 통제할 수 있습니다.
Java 환경에서 AWS KMS를 활용할 때는 KMS 키를 직접 사용해 암·복호화를 수행하는 방식과, 암호화에 사용할 데이터 키를 별도로 발급받아 사용하는 방식이 있습니다. 각각을 단일 호출 암호화와 봉투 암호화(Envelope Encryption)라고 합니다.
아래 예시는 이미 생성된 KMS 키를 기반으로 두 방식이 어떻게 동작하는지 보여줍니다. 이를 위해 먼저 KMS에 접근하기 위한 인증 정보를 설정하고, 암·복호화 요청을 처리할 KmsClient를 생성합니다.
- accessKeyId: 사용자 액세스 키
- secretAccessKey: 비밀 액세스 키
단일 호출 암호화와 봉투 암호화가 각각 이제 떻게 구현되는지 코드를 통해 살펴보겠습니다.
[1] 단일 호출 암호화
단일 호출 암호화시에는 kmsClient와 KMS 마스터 키를 활용해서 KMS 서비스 제공 Encrypt, Decrypt 객체 생성 후 암,복호화를 진행합니다.
단일 호출 암호화 방식은 크기가 작은 데이터(4KB 미만)를 암호화하는데 사용된다. 이 방식의 장점은 KMS 서비스를 통해 직접 암,복호화 하기 때문에 간단한 코드로 구현이 가능하다는 점입니다. 다만 암,복호화 시 데이터 개수에 따라 비용 및 KMS 통신량 증가 한다는 것이 단점입니다.
단일 호출 암호화 결과를 보면 암,복호화가 정상적으로 이루어진것을 확인할 수 있습니다.
[2] 봉투 암호화
두번째 방식은 봉투 암호화입니다. 봉투 암호화의 핵심은 데이터를 암호화 하기 위해 사용되는 키를 암호화 한다는 것입니다. 봉투 암호화는 평문 암호화 키(encryptKey)를 이용하여 데이터를 암호화합니다. 이때 사용된 평문 암호화 키는 즉시 삭제하고 암호문을 저장합니다. 복호화시에는 암호문을 통해 평문 암호화 키를 조회하고 이 키를 이용하여 데이터를 복호화합니다. 잘못된 방식과 잘된 방식을 비교하여 살펴보겠습니다.
잘못된 방식을 보면 암호화 키(encryptKey)를 활용해 암호화 한 이후 동일한 변수를 이용하여 바로 복호화를 진행하고 있습니다. 이는 암호화 이후 평문 암호화 Key를 폐기하지 않고 재사용하기 때문에 평문 키를 HMS 외부에 보관하지 않는다는 KMS의 핵심 보안 원칙에 어긋납니다.
올바른 봉투 암호화는 복호화시 최초 암호화에 사용된 키(encryptKey)가 아니라 저장된 암호문(cipherTextBlob)을 이용하여 재조회한 평문 키(newPlaintextKey)를 활용하여 복호화합니다. 이를 통해 데이터 암호화에 사용된 평문 키를 외부에 노출시키지 않고 데이터 복호화가 가능합니다.
봉투 암호화 결과는 아래와 같습니다.
결과를 보면 최초 암호화에 사용된 평문키와 재조회한 평문키가 동일한것을 확인할 수 있습니다. 이 평문키는 사용시마다 암호문을 이용해 조회 후 사용하여야하며 사용 후 즉시 폐기하여야합니다.
봉투 암호화 방식은 사용자가 암호화 방식을 직접 정할 수 있어 단일 호출 암호화 방식에 비해 유연한 암호화 처리가 가능합니다. 또한 데이터가 아닌 데이터 암호화 를 암호화 하는 방식이기 때문에 데이터 개수에 영향을 적게 받는다는 장점이 있습니다.
봉투 암호화 과정을 요약 정리하면 아래와 같습니다.
① KMS를 통해 평문 암호화 키(encryptKey) 및 암호문(cipherTextBlob) 조회
② encryptKey를 사용하여 데이터 암호화 후 폐기
③ cipherTextBlob 및 암호화 데이터 저장
④ cipherTextBlob를 사용하여 KMS에서 암호화 키 재조회(newPlaintextKey)
⑤ newPlaintextKey를 사용하여 데이터 복호화
두 방식 핵심 비교
지금까지 AWS KMS 기본 개념과 두가지 활용법에 대해 살펴보았습니다. KMS의 가장 큰 특징은 암호화 키를 안전하게 보호하는 서비스라는 점입니다. AWS KMS는 암호화 과정에서 가장 중요한 요소인 암호화 키를 사용자가 직접 관리하는 부담을 줄여줍니다.
AWS KMS는 암호화 키를 최고 보안 수준으로 보호하기 때문에 사용자는 키 탈취 걱정없이 암호화 로직에 집중할 수 있습니다. 또한 AWS KMS 키 정책을 통해 복잡한 어플리케이션 코드 수정 없이 간편하게 암호화 키 접근 가능 사용자 및 행위를 통제할 수 있다는 장점이 있습니다.
이글을 통해서는 AWS KMS를 살펴보았는데 이 외에도 Google, Azure, NCP 등 여러 회사에서 제공하는 사용중인 KMS 서비스 중 사용중인 환경에 가장 적합한 KMS를 선택하여 활용하시기를 추천드립니다.
지능형 IT 인프라 통합관리 솔루션 Zenius의 개발 및 유지 보수를 담당하고 있습니다.