암호화를 처음 배우는 개발자가 가장 먼저 부딪히는 벽은 알고리즘이 아니라 키를 어디에 둘 것인가라는 질문이다. AES-256으로 데이터를 암호화하는 코드는 한 줄이면 되지만, 그 256비트 키를 어디 저장할지 정하는 순간 모든 게 복잡해진다. 키를 코드에 박으면 git에 영원히 남고, 환경변수에 두면 프로세스 덤프로 새고, 파일에 두면 그 파일을 또 누가 지키느냐는 무한 후퇴가 시작된다. "암호화의 진짜 문제는 암호화가 아니라 키 관리"라는 보안 업계의 오래된 격언은 정확히 이 지점을 가리킨다. AWS KMS(Key Management Service)는 바로 그 키 관리 문제를 "키를 절대 평문으로 밖에 내보내지 않는다"는 단 하나의 설계 원칙으로 풀어낸 서비스다.
DVA-C02 시험에서 KMS는 단독 주제로도 나오지만, 그보다 S3·EBS·RDS·DynamoDB·Secrets Manager 등 거의 모든 저장 서비스의 암호화 뒤에 KMS가 있기 때문에 더 중요하다. KMS의 동작 모델 — 특히 봉투 암호화(Envelope Encryption)와 키 정책의 3중 권한 구조 — 을 이해하면 시험의 보안 섹션 절반이 풀린다. 이번 글은 KMS가 왜 키를 밖으로 안 내보내도록 설계됐는지, 4KB 한도가 어디서 나온 숫자인지, 그리고 그 한도를 우회하는 봉투 암호화가 실제로 어떻게 동작하는지를 깊이 들여다본다.
KMS의 핵심 설계 결정은 의외로 단순하다