AWS에서 암호화를 설정할 때 대부분은 KMS를 기본값으로 둔 채 그대로 사용합니다. 하지만 그 뒤에 숨겨진 요금 구조는 매우 정교하고, 잘못 설정된 몇 줄의 코드나 무심코 활성화한 옵션이 생각보다 큰 청구서로 돌아올 수 있습니다.
KMS는 단순한 보안 기능이 아닙니다. 키의 개수, API 호출량, 그리고 서비스 간의 호출 패턴에 따라 매달 요금이 빠르게 누적됩니다. 이 글은 Cost Explorer의 데이터를 통해 그런 비용 구조를 정확히 진단하고, 어떤 API가 비용을 일으키는지, 어떤 키가 문제인지, 그리고 어떤 전략으로 비용을 줄였는지까지 구체적으로 설명합니다.
“보안을 유지하면서도 비용은 줄일 수 있다”는 것을 직접 확인해보세요.
AWS Key Management Service (KMS)는 AWS 환경에서 데이터를 암호화하고 암호화 키를 관리하는 데 필수적인 서비스입니다. 강력한 보안 기능을 제공하지만, 효율적인 비용 관리를 위해서는 KMS의 과금 구조를 정확히 이해하고 현재 비용을 진단하는 것이 중요합니다. KMS는 주로 생성 및 저장된 암호화 키의 개수와 키를 사용하는 API 호출 횟수에 따라 요금이 부과되므로, 이 두 가지 주요 항목을 중심으로 분석해야 효과적인 비용 절감 전략을 수립할 수 있습니다.
AWS KMS의 비용을 분석하려면 AWS Cost Explorer를 활용할 수 있습니다. 다음은 KMS 비용을 확인하고 분석하는 구체적인 방법입니다.
AWS KMS 비용 분석을 시작하려면, 먼저 AWS Management Console에 로그인합니다. 콘솔 상단의 검색창에 "Cost Explorer"를 입력하여 해당 서비스를 선택한 다음, "Cost Explorer 열기" 버튼을 클릭하여 비용 분석 도구에 진입합니다.
비용 데이터를 효과적으로 분류하고 분석하려면 Group By 항목을 전략적으로 설정하는 것이 중요합니다. KMS 관련 비용을 파악할 때는 다음 기준들을 활용하는 것이 특히 효과적입니다.
UsageType (사용 유형)
이 설정을 통해 KMS의 다양한 과금 요소별로 비용 항목을 명확하게 구분할 수 있습니다. 예를 들어, 키 저장 비용, 암호화/복호화 요청 비용, 관리 요청 비용 등을 명확히 분리하여 볼 수 있습니다. 이를 통해 어떤 사용 패턴이 전체 KMS 비용에서 가장 큰 비중을 차지하는지 한눈에 파악하여 최적화의 우선순위를 정할 수 있습니다.
Resource ID (리소스 ID)
Resource ID를 기준으로 그룹핑하면 각 KMS 키의 특정 ARN(Amazon Resource Name)별로 발생하는 개별 비용을 상세히 확인할 수 있습니다. 이를 통해 "어떤 KMS 키가 가장 많은 비용을 발생시키고 있는가?"를 명확히 파악하고, 특정 애플리케이션이나 서비스에 연결된 키의 사용량과 비용을 심층 분석할 수 있습니다. 예를 들어, 특정 데이터베이스 암호화에 사용되는 키 또는 특정 Lambda 함수가 호출하는 키의 비용을 추적하는 데 매우 유용합니다.
Operation (작업 - 선택 사항)
특정 KMS API 엔드포인트의 동작이나 타입(예: Encrypt 호출, Decrypt 호출, GenerateDataKey 호출)별로 비용을 더 세분화하여 분석하고자 할 때 이 옵션을 활용할 수 있습니다. 이는 특정 암호화 작업이나 키 관리 기능이 비용에 미치는 영향을 파악하는 데 유용합니다. 예를 들어, GenerateDataKey 호출이 많은지, 아니면 Decrypt 호출이 많은지 등을 파악하여 애플리케이션의 암호화/복호화 패턴을 이해할 수 있습니다.
정확하고 집중적인 KMS 비용 분석을 위해서는 다음 필터링 설정을 적용해야 합니다. 분석 범위를 좁혀서 원하는 데이터만 편리하게 확인할 수 있습니다.
Service
Service 필터에서 AWS Key Management Service를 명확히 선택하여, 다른 AWS 서비스의 비용과 혼동되지 않고 오직 KMS 관련 비용만 분석 대상으로 포함합니다.
UsageType
UsageType 필터에서는 KMS의 주요 비용 항목들을 세부적으로 선택하여 분석할 수 있습니다. 여기에는 주로 다음과 같은 항목들이 포함됩니다.
KMS-Keys 또는 유사한 이름: 생성되어 활성 상태로 저장된 고객 관리형 키(CMK) 개수 기준으로 발생하는 월별 요금에 해당합니다. (기본적으로 키 1개당 월 $1 청구)
KMS-Requests 또는 유사한 이름: KMS API 호출 건수 기준으로 발생하는 요금에 해당합니다. 여기에는 Encrypt, Decrypt, GenerateDataKey, GenerateDataKeyWithoutPlaintext, ReEncrypt, Sign, Verify 등 데이터 평면 API 호출과, CreateKey, DisableKey, ScheduleKeyDeletion 등 관리 평면 API 호출이 모두 포함됩니다.
지역별 UsageType Code: 예를 들어, USW2-KMS-Keys (미국 서부 2 리전의 키 저장 비용), APN2-KMS-Requests (서울 리전의 KMS API 요청 비용)와 같이 리전 코드가 접두사로 붙을 수 있습니다.
이들을 각각 선택하여 어떤 비용 항목이 현재 가장 큰 비중을 차지하는지, 그리고 어떤 추이를 보이는지 상세하게 분석할 수 있습니다. 이를 통해 불필요한 키를 삭제하거나 API 호출을 최적화하는 등의 비용 절감 기회를 찾을 수 있습니다.
AWS KMS 비용의 시간적 변화를 파악하고 심층 분석하기 위해서는 적절한 트렌드 분석 기간을 설정하는 것이 중요합니다. 이는 키 저장 개수나 API 호출량의 변화가 비용에 미치는 영향을 이해하는 데 필수적입니다.
기간 설정
Cost Explorer 상단에 위치한 기간 선택 메뉴를 활용하여 '이번 달', '최근 6개월', '사용자 지정 범위' 등 여러분이 원하는 특정 분석 기간을 유연하게 지정할 수 있습니다. KMS 비용은 키 저장 개수와 API 호출량이라는 두 가지 주요 요소로 구성되므로, 분석 목적에 맞는 기간을 선택하는 것이 중요합니다. 장기적인 추세를 파악하기 위해서는 최소 3개월 이상의 데이터를 살펴보는 것이 좋습니다.
일별 분석
KMS 비용 데이터의 일별 추이를 분석하는 것은 특정 날짜에 발생한 비용 급증의 원인을 파악하는 데 특히 유용합니다.
용도: 예를 들어, 특정 애플리케이션의 배포 오류로 인해 Decrypt 또는 GenerateDataKey API 호출이 비정상적으로 급증했거나, 새로운 암호화 키가 대량으로 생성된 날짜를 즉시 식별하고 원인을 추적할 수 있습니다. 또한, 특정 시간대에 집중되는 암호화/복호화 요청 패턴을 파악하여 비용 최적화 기회를 찾을 수도 있습니다.
활용 팁: 일별 그래프에서 갑작스러운 스파이크를 발견하면, 해당 날짜의 AWS CloudTrail 로그를 확인하여 어떤 계정이나 리소스가 KMS에 비정상적인 요청을 보냈는지 상세하게 조사할 수 있습니다. LookupEvents API를 통해 특정 시간대의 KMS API 호출 이력을 확인하면 원인 분석에 큰 도움이 됩니다.
월별 분석
장기적인 관점에서 KMS 비용 추세를 파악하려면 월별 분석이 적합합니다. 이는 서비스 운영의 큰 그림을 이해하고 전략적인 최적화 방안을 모색하는 데 도움을 줍니다.
용도: 월별 분석을 통해 고객 관리형 키(CMK) 저장 개수의 전반적인 추이 변화나 KMS API 호출량의 장기적인 패턴을 확인할 수 있습니다. 예를 들어, 새로운 애플리케이션이나 서비스가 추가되면서 CMK 개수가 꾸준히 증가하는 패턴을 파악하거나, 특정 암호화 정책 변경 이후 API 호출 비용이 지속적으로 상승하는 경향을 식별할 수 있습니다.
활용 팁: 월별 추이를 통해 예상치 못한 비용 증가의 장기적인 패턴을 파악하여 구조적인 최적화 방안을 모색하고 예산을 효과적으로 관리할 수 있습니다. 예를 들어, 사용하지 않는 CMK를 식별하여 삭제(ScheduleKeyDeletion)하거나, 불필요한 API 호출을 줄이기 위한 캐싱 전략(예: 데이터 키 캐싱) 도입, 자동 키 로테이션 주기의 적절성 검토 등을 고려할 수 있습니다. 특히, 키 로테이션은 새로운 키 버전을 생성하며 비용을 발생시킬 수 있으므로, 해당 시점의 비용 변화를 면밀히 주시해야 합니다.
이처럼 KMS 비용을 체계적으로 분석하고 모니터링함으로써, 보안을 유지하면서도 암호화 관련 비용을 효율적으로 관리할 수 있습니다.
이 항목은 서울 리전(ap-northeast-2)에서 KMS(Key Management Service)를 사용하여 발생한 API 요청(Call)에 따라 과금되는 사용량입니다. KMS 키를 실제로 사용하는 동작 횟수에 따라 요금이 매겨지는 항목이며, KMS 비용의 상당 부분을 차지할 수 있습니다.
포함되는 주요 API 작업
1) 데이터 평면 API (Data Plane API): 암호화/복호화와 직접 관련된 핵심 작업입니다.
Encrypt: 평문 데이터를 암호화합니다.
Decrypt: 암호화된 데이터를 복호화합니다.
ReEncrypt: 암호화된 데이터를 다른 KMS 키로 다시 암호화합니다.
GenerateDataKey, GenerateDataKeyWithoutPlaintext: 데이터 암호화에 사용되는 데이터 키를 생성합니다. (가장 흔한 비용 발생 원인 중 하나)
Sign, Verify: 비대칭 키(Asymmetric Key)를 사용한 디지털 서명 및 검증 작업입니다.
2) 관리 평면 API (Control Plane API): 키의 생성, 관리, 설정 변경과 관련된 작업입니다.
CreateKey: 새로운 KMS 키를 생성합니다.
EnableKeyRotation, DisableKeyRotation: 키 로테이션 기능을 활성화/비활성화합니다.
ScheduleKeyDeletion, CancelKeyDeletion: 키 삭제 예약 및 취소 작업입니다.
UpdateKeyPolicy, PutKeyPolicy: 키 정책을 업데이트하거나 적용합니다.
3)기타 키를 사용한 모든 암호화 관련 호출
AWS 서비스 통합을 통해 자동으로 발생하는 KMS 호출들도 이 항목에 포함됩니다.
비용 발생 예시
S3 버킷 암호화: S3 버킷에 KMS를 통한 기본 암호화(SSE-KMS)를 설정하고, 해당 버킷에 객체가 업로드되거나 다운로드될 때마다 Encrypt 또는 Decrypt 요청이 발생합니다. 예를 들어, S3 버킷을 KMS로 암호화하고 객체를 100만 번 읽으면 → 100만 번의 Decrypt 요청 발생 → 이 항목으로 비용이 청구됩니다. 이는 대규모 데이터 처리 워크로드에서 쉽게 발생할 수 있습니다.
Lambda 환경 변수 암호화: Lambda 함수에 민감한 환경 변수(예: DB 자격 증명)를 암호화하여 저장하고, 함수가 호출될 때마다 해당 변수를 복호화하는 경우 Decrypt 요청이 발생합니다.
RDS/EBS 암호화: RDS 데이터베이스 또는 EBS 볼륨을 KMS 키로 암호화할 때, 데이터베이스 인스턴스 시작이나 볼륨 마운트 시점에 KMS API 호출이 발생할 수 있습니다.
Secrets Manager 통합: AWS Secrets Manager가 저장된 Secret을 KMS 키로 암호화/복호화하거나 자동 로테이션을 수행할 때도 이 KMS-Requests 비용이 발생합니다. 특히 Secrets Manager의 Secret 자동 로테이션 주기가 짧게 설정되어 있거나, 애플리케이션에서 Secrets Manager의 Secret 값을 자주 조회하면, 그만큼 KMS API 요청이 증가하여 비용으로 이어집니다.
CloudTrail 및 기타 로깅/모니터링 서비스: KMS와 연동되는 AWS 서비스들이 키 사용 로그를 기록하거나 상태를 확인할 때 KMS API를 호출할 수 있습니다.
요금 부과 기준
Secrets 조회 10,000건당 $0.05의 단위 요금 부과합니다 (리전마다 동일, 2024년 기준). KMS의 조회 및 관리 API 호출이 많을수록 비용이 증가하므로, 캐싱 및 호출 최적화가 필수적입니다.
이 항목은 서울 리전(ap-northeast-2)에서 생성 및 보관 중인 KMS 키(고객 관리형 CMK – Customer Master Key) 수량에 따라 발생하는 월 정액 비용입니다.
포함되는 키 유형
대칭 키 (Symmetric Key): 대부분의 데이터 암호화에 사용되는 단일 키입니다.
비대칭 키 (Asymmetric Key): 디지털 서명 또는 공개키 암호화에 사용되는 공개키-개인키 쌍입니다.
HMAC 키: 메시지 인증 코드(MAC) 생성 및 검증에 사용됩니다.
멀티 리전 키 (Multi-Region Key): 여러 AWS 리전에서 동일한 키를 사용할 수 있도록 복제된 키입니다. 각 Primary 키와 Replica 키는 별개의 CMK로 간주되어 각각 월 $1의 비용이 청구됩니다.
비용 발생 예시
직접 생성한 CMK: 사용자가 AWS 콘솔, CLI, SDK 또는 CloudFormation 등을 통해 직접 생성한 모든 CMK는 활성 상태로 존재하기만 해도 월 비용이 발생합니다. 이는 RDS, S3, Lambda, Secrets Manager, EBS 등의 AWS 서비스에서 고객이 직접 지정한 KMS 키를 사용하여 데이터를 암호화할 때 주로 발생합니다.
자동 키 로테이션: CMK에 자동 키 로테이션을 설정하면, AWS가 매년 새로운 키 버전을 생성합니다. 이 때 생성된 새로운 키 버전도 유효한 CMK로 간주되어 월 비용이 추가로 발생할 수 있습니다 (이전 버전의 키도 보관됨).
사용하지 않는 키: 더 이상 사용하지 않거나 애플리케이션에서 참조하지 않는 CMK라도 ScheduleKeyDeletion을 통해 삭제 예약이 되지 않은 상태로 남아있으면 계속해서 월 $1의 비용이 부과됩니다. 키를 한번도 사용하지 않아도 존재만 해도 요금이 발생합니다.
요금 부과 기준
CMK 1개당 월 $1 (서울 리전 기준)의 고정 요금이 부과됩니다. 이는 키의 실제 사용량(API 호출)과는 별개로 키의 존재 자체에 대한 비용입니다.
비용 최적화 팁
불필요한 CMK 식별 및 삭제: 정기적으로 사용하지 않거나 더 이상 필요 없는 CMK를 식별하여 삭제를 예약(ScheduleKeyDeletion)해야 합니다. 삭제 대기 기간이 지나면 키가 영구적으로 삭제되고 비용 부과가 중단됩니다.
자동 로테이션 주기 검토: 키 로테이션 주기를 비즈니스 및 보안 요구사항에 맞춰 적절하게 설정하여 불필요한 키 버전 증가를 방지합니다.
AWS 관리형 키(AWS-managed CMK) 활용: S3, EBS 등 일부 AWS 서비스는 자체적으로 AWS 관리형 KMS 키를 제공하며, 이는 고객에게 직접 비용을 청구하지 않습니다. 만약 보안 정책에 부합한다면, 고객 관리형 CMK 대신 AWS 관리형 키를 활용하여 키 저장 비용을 절감할 수 있습니다.
중복 키 통합: 동일한 목적으로 여러 CMK를 생성한 경우, 하나의 키를 여러 서비스나 리소스에 공유하여 사용할 수 있는지 검토합니다 (단, 보안 정책 및 권한 관리에 유의).
아래는 KMS의 지난 6개월 비용을 usage type과 resource id로 나누어 조회해본 결과입니다.
KMS 비용 분석 데이터를 보면, ap-northeast-2-KMS-Requests 항목에서 2024년 11월부터 2025년 1월 사이에 발생했던 높은 API 호출 비용이 2025년 2월 이후 급격히 감소하며 전체 KMS 비용 절감을 주도했음을 알 수 있습니다. 이 비용 절감은 주로 특정 KMS 키(특히 ARN 15d1dcd3-...과 3e5495b0-...)에 대한 API 호출이 줄어든 덕분입니다.
Cost Explorer의 '사용 유형별' 데이터를 살펴보면, 2024년 11월($358.49)부터 2025년 1월($196.88)까지 KMS 비용이 비교적 높게 발생하다가, 2025년 2월($34.82) 이후 급격히 감소하여 월 $30~40 수준으로 안정화되었음을 명확히 알 수 있습니다. 총 6개월간 누적 비용은 $1,061.19로 나타났습니다.
가장 두드러진 부분은 ap-northeast-2-KMS-Requests 항목이 압도적인 비중을 차지했다는 점입니다.
2024년 11월 $340.70에서 시작하여 2025년 1월 $178.90으로 감소하다가, 2025년 2월 $16.85로 90% 이상 급감했습니다. 이는 전체 누적 비용 $1,061.19 중 약 $953.45를 차지하며, KMS 총 비용의 약 90% 이상이 API 호출에서 발생했음을 보여줍니다. 이 비용은 주로 Encrypt, Decrypt, GenerateDataKey 등의 API 호출 횟수에 따라 부과됩니다.
반면, ap-northeast-2-KMS-Keys (키 저장 비용)는 매월 약 $17~$18 수준으로 거의 변동이 없으며, 전체 비용에서 차지하는 비중은 매우 낮습니다.
'리소스 ID별' 데이터를 보면, 두 개의 특정 KMS 키가 KMS-Requests 비용의 대부분을 차지했음을 알 수 있습니다.
arn:aws:kms:ap-northeast-2:...:key/15d1dcd3-439f-4c12-bcaa-25941939c6a6 (약 $467.87)
arn:aws:kms:ap-northeast-2:...:key/3e5495b0-d0bc-4987-9f55-b7c352ec3b05 (약 $437.59)
이 두 키가 전체 API 호출 비용의 대부분(약 $950 중 $905.46, 즉 95% 이상)을 발생시켰습니다. 이들 키 역시 2025년 2월 이후 호출 비용이 거의 발생하지 않는 패턴을 보입니다.
KMS API 호출 비용이 급증했던 가상적인 문제 원인은 다음과 같습니다.
핵심 원인은 위에서 언급된 두 KMS 키에 대한 Encrypt, Decrypt, GenerateDataKey 등의 API 호출이 매우 빈번하고 반복적으로 발생했다는 점입니다. 주로 다음과 같은 상황이었습니다.
캐싱 전략 부재 또는 미흡: 애플리케이션 또는 서비스(예: Secrets Manager와 연동된 Lambda 함수, RDS 암호화, MSK Connect 관련 워크로드, ETL 프로세스 등)가 데이터 키를 생성하거나 데이터를 암복호화할 때, KMS API를 매 요청마다 반복적으로 호출하고 있었습니다. 특히 배치 스크립트에서 데이터 키를 캐싱하지 않고 매번 GenerateDataKey를 호출하는 상태였습니다.
잘못된 설계 또는 구현: 애플리케이션 아키텍처나 코드 로직에서 KMS 호출 최적화가 고려되지 않았고, 특정 기능이 과도한 KMS 호출을 유발하도록 잘못 구현되어 있었습니다. 특히 짧은 주기로 실행되는 스크립트가 매번 새로운 데이터 키를 생성하거나 민감 데이터를 복호화하고 있었습니다.
과도한 데이터 접근: S3 버킷에 KMS 암호화가 적용되어 있었기 때문에, 대량의 객체 읽기/쓰기 작업이 발생할 때마다 Decrypt/Encrypt 요청이 발생하고 있었습니다. 대규모 데이터 마이그레이션이나 분석 작업 시 이러한 비용이 급증할 수 있습니다.
KMS 호출 캐싱 적용
GenerateDataKey와 같이 자주 사용되는 API 호출에 대한 애플리케이션 계층 캐싱을 도입했습니다. 즉, 초기화 시 한 번만 KMS를 호출하여 데이터 키를 가져온 후, 해당 키를 애플리케이션 메모리(또는 환경 변수)에 일정 시간(TTL) 동안 캐싱하여 재사용하는 방식으로 변경되었습니다. 이를 통해 Encrypt/Decrypt 작업을 위한 GenerateDataKey 호출 횟수를 획기적으로 줄일 수 있었습니다.
암호화 전략 재검토 및 최적화
매 요청마다 KMS를 호출하는 대신, 특정 민감도가 낮은 데이터나 빈번히 접근하지 않아도 되는 파일/로그의 암호화에는 S3 자체의 서버 측 암호화(SSE-S3) 또는 S3 관리형 KMS 키(SSE-KMS, AWS-managed CMK)와 같이 고객에게 직접적인 KMS API 호출 비용이 발생하지 않는 방식을 활용하도록 변경했습니다.
민감도가 높은 Secret의 경우에도, Secret Manager에서 KMS를 통해 암호화된 Secret을 가져올 때 Secrets Manager 자체의 캐싱 메커니즘을 적극 활용하도록 애플리케이션 로직을 개선했습니다.
비정상 사용 패턴에 대한 모니터링 및 조치
KMS API 호출량을 지속적으로 모니터링하고, 특정 임계값을 초과할 경우 알림을 받을 수 있는 CloudWatch 경보를 설정했습니다. 이를 통해 향후 유사한 비용 급증이 발생하면 즉각적으로 원인을 파적하고 대응할 수 있는 체계를 갖추게 되었습니다.
결과
이러한 최적화 조치 덕분에 ap-northeast-2-KMS-Requests 비용이 2025년 1월 $178.90에서 2025년 2월 $16.85로 90% 이상 감소했습니다. 이후 3월($17.47)과 4월($19.93)에도 월 $17~20 수준으로 안정적으로 유지되며, 전체 KMS 비용 또한 월 $40 이내로 크게 절감되었습니다. 리소스별로 분산된 키들의 호출량도 함께 줄어들게 되었습니다.
이 사례는 KMS 비용이 주로 API 호출에서 발생하며, 적절한 캐싱 전략 도입과 암호화 전략 최적화를 통해 상당한 비용 절감을 달성할 수 있음을 보여주는 좋은 예시입니다.
KMS는 AWS 보안의 핵심이자, 동시에 비용 최적화의 핵심입니다. 우리는 보안 강화를 위해 암호화를 선택했지만, 그 이면에 불필요한 반복 호출, 사용하지 않는 키, 무분별한 로테이션, 캐싱되지 않은 API 호출이 눈덩이처럼 비용을 부풀리고 있었다는 사실을 확인했습니다.
이번 분석을 통해 우리는 특정 KMS 키 두 개가 전체 호출 비용의 95%를 차지하고 있었다는 것을 파악했고, 캐싱 전략 개선과 키 사용 구조 최적화만으로도 매월 수백 달러의 비용을 절감할 수 있었습니다.
결국 KMS 비용 최적화란, 단순히 요금표를 이해하는 것이 아니라 서비스 호출 흐름을 설계하고, 사용 패턴을 개선하며, 시스템을 통찰력 있게 관리하는 능력에서 시작됩니다.