[AWS] KMS란?
AWS Key Management Service(AWS KMS)는 데이터를 보호하는 데 사용하는 암호화 키를 쉽게 생성하고 제어할 수 있는 관리형 서비스로 쉽게 말해, Customer Managed Key(CMK) 라고 불리우는 사용자 키를 관리하는 툴이라고 생각하시면 됩니다.
우선, 데이터 암호화는 크게 두가지로 나뉩니다.
- 전송 중인 데이터 암호화
- HTTPS
- 저장되어 있는 데이터 암호화
- Client-side 암호화
- 사용자(개발자)가 직접 암호화 키를 관리
- 필요하다면, AWS KMS를 활용할 수 있음
- Server-side 암호화
- AWS가 알아서 서버에 저장된 데이터를 암호화 시켜놓음
- 암호화 키를 자동으로 관리
- S3, RDS, DynamoDB, Redshift 등은 모두 암호화 기능을 기본으로 갖추고 있음
- 이들은 암호화 키를 관리하기 위해 AWS KMS를 우리가 모르는 사이에 사용함
- Client-side 암호화
이번 글에서 다뤄볼 AWS KMS는 저장되어 있는 데이터베이스 안의 데이터들을 암호화하는 키를 생성하고 관리하는 서비스로, Client-side 즉 사용자가 키를 관리하는데 도움을 주는 서비스라고 생각하시면 됩니다.
AWS KMS의 개념을 간략히 정리해보자면,
- Encryption Key(암호화 키)를 관리해주는 AWS 서비스
- 관리하는 암호화 키를 CMK(Customer Master Key)라고 부름
- CMK를 HSMs(Hardware Security Modules)라는 저장소에 저장함
- HSMs에 있는 CMK를 활용하기 위해 KMS API를 사용
- AWS Cloudtrail로 누가 어떤 Key를 어떻게 사용했는지 로그를 남김
동작 방식
AWS KMS 동작 방식 도식화
- 먼저는 KMS 에 Customer Master key(CMK)를 생성합니다. 이 Master key 는 데이터를 암호화 하기 위해 사용되는 Data key를 생성하는데 사용되고, AWS Console 에서 간단하게 생성 가능합니다.
- Data key는 CMK로 부터 GenerateDataKey라는 작업을 통해 생성되고, 이때 생성되는 Data key는 크게 Plaintext data key와 Encrypted data key로 나뉩니다.
- Plaintext data key는 데이터를 암호화 하는데 사용됩니다. 암호화 과정은 OpenSSL 을 이용하거나 AWS 에서 제공하는 Encryption SDK 를 사용하면 되고. 데이터를 암호화 한 이후에는 보안을 위해 Plaintext data key 폐기합니다. (메모리에서 제거)
- Plaintext data key 를 폐기하면 이제 남은 것은 Encrypted data key 뿐입니다. 해당 key는 데이터를 복호화 할때 사용해야하므로, 암호화된 데이터와 함께 Encrypted data key 또한 안전하게 보관합니다.
- 이렇게, key를 이용하여 암호화 시킨 데이터와 함께 key 또한 암호화 하고, 이것을 암호화된 데이터와 함께 동봉하여 보관하는 방식을 Envelope Encryption 이라고 부릅니다.
- 암호화된 데이터를 복호화 하려면 먼저 평문화된 Plaintext data key 가 필요합니다. 하지만 위 3번 단계에서 데이터를 암호화 한 이후 plaintext data key 를 폐기한 상태이며, 남은 것은 encrypted data key 뿐입니다. 즉, encrypted data key를 다시 plaintext data key 로 변환 하는 과정이 필요하,. 이때 Plaintext data key를 복호화 하는 과정에 CMK 가 다시 사용되며, plaintext 로 변환된 data key를 통해 다시 암호화된 데이터를 복호화 하는 과정을 거치면 됩니다.
정리
데이터베이스를 AWS Private Subnet에 위치시키고, 모든 외부 차단을 NACL과 Security Group으로 막았음에도, 보안이 뚫렸다면, AWS KMS를 이용한 데이터베이스 암호화가 힘을 발휘합니다.
즉, 해커가 네트워크 상 보안을 모두 뚫었어도, 데이터베이스와 복호화 키를 암호화해두면, 데이터베이스의 데이터를 읽지 못하게 됩니다.
AWS KMS를 활용하면, 데이터베이스 암호화와 데이터베이스 복호화키를 암호화함으로써 2중 보안설정이 가능하며, 만약 AWS에서 이미 KMS를 통해 암호화해둔 S3의 데이터를 KMS를 활용해서 암호화하면 3중으로 암호화가 되게 되므로, 보안상 매우 안전해집니다.
References
https://bluese05.tistory.com/71
AWS KMS 어렵지 않아요.
AWS KMS 란 무엇인가 KMS 는 Key Management Service 의 약자로, 데이터를 암호화 할때 사용되는 암호화 Key 를 안전하게 관리하는데 목적을 둔 서비스라고 보면 된다. KMS 는 크게 세가지 방식으로 key 관리
bluese05.tistory.com