dev-ops/aws
[AWS] AWS KMS(Key Management Service)
heemang_e
2025. 4. 10. 22:38
CMK (Customer Master Key)
- CMK는 KMS에서 생성되어 HSM 내부에서 관리되는 마스터 키
- CMK의 역할:
- Data Key 생성: GeneratedDataKey API(KMS에서 제공) 호출 시, HSM 내부에서 CMK를 사용해 Plaintext Data Key와 Encrypted Data key를 생성
- Key Rotation: CMK에 대한 키 회전을 자동 또는 수동으로 수향
- CloudTrail 로깅: CMK를 활용한 모든 활동은 로그로 기록됨 (감사 추적용)
- Key 삭제/폐기: 사용하지 않게 된 CMK는 삭제 예약 및 폐기 가능
- GeneratedDataKey API가 호출되면서 2개의 Data Key를 생성한다.
- Plaintext Data Key: 데이터 암호화에 사용되는 키
- Encrypted Data Key: 데이터 복호화에 사용되는 키
- CMK는 HSM 안에서만 사용되므로 외부에 노출되지 않는다.
CMK는 두 종류가 존재한다.
- AWS Managed CMK: AWS가 자동으로 생성 및 관리
- Customer Maanged CMK: 사용자가 직접 생성하고 IAM 정책, 키 회전, 삭제 등 제어 가능
CMK를 사용하여 데이터 암호화
CMK에서 생성되는 Plaintext Data Key를 사용하여 데이터를 암호화할 수 있다. 그리고 암호화된 데이터는 AWS 서비스(ex. S3, EBS, RDS)에 저장된다. 또한, 암호화된 데이터가 저장될 때 메타데이터로 Encrypted Data Key가 같이 저장된다.
암호화 및 복호화 Flow
- GeneratedDataKey API(KMS에서 제공)가 호출되어 KMS 내에 존재하는 CMK가 Data Key를 생성한다.
- Plaintext Data Key, Encrypted Data Key
- Encrypt API(KMS에서 제공)가 호출되어 실제 데이터가 Plaintext Data Key를 사용하여 암호화되고, 암호화에 사용된 Plaintext Data Key는 폐기된다.
- 암호화된 데이터와 Encrypted Data Key를 AWS 서비스에 함께 저장한다.
- 애플리케이션 측에서 데이터 복호화가 필요할 때, Decrypt API(KMS에서 제공)를 호출하여 CMK로 Encrypted Data Key를 전달한다. CMK가 HSM 내부에서 Encrypted Data Key를 복호화하여 Plaintext Data Key를 생성한다. KMS는 이 결과를 애플리케이션에 반환한다.
- 애플리케이션은 이 Plaintext Data key로 데이터를 복호화한다.
API | 목적 | CMK 사용 여부 | 평문 키 반환 | 암호문 반환 |
GenerateDataKey | 암호화 및 복호화에 필요한 Plaintext/Encrypted Data Key 생성 | ✅ | ✅ | ✅ |
Encrypt | 입력한 데이터를 CMK로 직접 암호화 | ✅ | ❌ | ✅ |
Decrypt | Encrypted Data Key나 암호문을 복호화 | ✅ | ✅ | ❌ |
Envelope Encryption (봉투형 암호화)
Envelope Encryption은 CMK를 직접 사용해 데이터를 암호화하는 대신, 일시적인 Data Key(Plaintext, Encrypted)를 생성하여 Plaintext Data Key로 데이터를 암호화하고, Encrypted Data Key는 외부에 저장해두었다가 CMK로 복호화해 데이터를 복원하는 방식이다. ⇒ CMK의 보안성과 성능 확장성 둘 다 만족한다.
- 데이터를 CMK로 직접 암호화하는 것이 아닌, CMK에 의해 일시적으로 생성된 Plaintext Data Key를 사용하여 암호화하는 방식이다.
- CMK는 HSM 내부에 안전하게 보관되어야 하므로, 암호화를 할 때 CMK에 접근해서는 안 된다. 단, 암호화된 데이터를 복호화하기 위해 Encrypted Data Key를 Plaintext Data Key로 복호화할 때는 CMK가 사용된다.
구성 요소 | 설명 |
CMK (Customer Master Key) | HSM에 저장된 마스터 키. Data Key를 암호화/복호화하는 데 사용 → CMK가 Data Key를 암호화한다 = Encrypted Data Key → CMK가 Data Key를 복호화한다 = Encrypted Data Key를 Plaintext Data Key로 복호화 |
Plaintext Data Key | 실제 데이터를 암호화/복호화할 때 사용하는 일시적인 키 |
Encrypted Data Key | CMK로 암호화된 Data Key. 외부 저장소에 안전하게 저장 |
HSM(Hardware Security Module)
HSM의 역할은 CMK를 안전하게 보관하고 사용하는 것
HSM은 암호화 키를 물리적으로 안전하게 보호하기 위한 장치이다. AWS에서는 KSM 내부에 있는 FIPS 140-2 Level 3 인증을 받은 HSM 클러스터가 사용된다.
CMK는 HSM 내부에 존재하고, 이 CMK를 사용하여 Data Key를 생성하거나, Data Key를 암호화/복호화할 때만 사용된다. ⇒ HSM은 단순 저장소가 아닌 암호화 연산을 수행하는 장치
HSM이 물리적으로 안전한 이유
등급 | 설명 |
Level 1 | 소프트웨어 수준 암호 처리 |
Level 2 | 물리적 밀봉 + 역할 기반 인증 |
Level 3 (AWS KMS HSM 수준) | 침입 탐지, 자동 자폭, 키 보호 강화 |
Level 4 | 극한 환경, 물리적 파괴까지 대비 (군사 수준) |
HSM은 격리된 메모리 공간에 암호화된 키를 저장하고 외부에 노출시키지 않으므로 키가 안전하게 보관된다. ⇒ 일반 저장소(RAM, Disk)에 저장되는 것이 아닌, HSM 내부의 격리된 보안 메모리 영역에 저장된다. Volatile Memory(휘발성 메모리)를 사용하여 침입 감지 시 자동으로 삭제된다. ⇒ HSM에 공격이 감지되면 자동으로 메모리를 초기화한다.
보안 요소 | 설명 |
물리적 접근 제한 | HSM은 제한된 장소(데이터센터)에서만 운영되고, 인증된 사용자만 접근 가능 |
침입 탐지 및 자폭 기능 | 장치가 열리거나 조작 시도를 감지하면 자동으로 메모리 삭제 |
내부 암호 연산 전용 회로 | 키는 메모리 외부로 절대 노출되지 않고, 암호 연산만 내부에서 수행 |
Secure Enclave 메모리 구조 | 키는 일반 메모리(RAM, 디스크 등)에 존재하지 않고, 격리된 메모리에서만 존재 |
FIPS 140-2 Level 3 인증 | 미 국립표준기술연구소(NIST)의 국제 보안 기준 충족 (Level 3은 침입 대응 포함) |
무결성 검증 및 접근 로그 | 내부 연산은 무결성 체크와 로그 기록이 동반됨 (KMS는 CloudTrail과 통합됨) |