◇ 공부 기록용으로 작성하였으니 틀린점, 피드백 주시면 감사하겠습니다 ◇
Key Management Service
AWS KMS
KMS는 AWS의 애플리케이션에서 사용하는 데이터의 암호화/복호화를 위한 키를 생성/관리하는 서비스이다.
암호화/복호화를 위한 키는 KMS Key라고 불리며 생성, 보관, 사용, 무효화, 삭제가 가능하다.
일반적으로 Amazon S3, EBS, Redshift 등 암호화 대상 서비스와 연동하여 사용된다.
또한, KMS는 CloudTrail과 연동되어 키의 사용 로그(언제, 어떤 서비스에서 키가 사용되었는지)가 기록되므로, 키의 사용 상황을 확인할 수 있다.
데이터 암호화가 필요한 이유?
제 3자가 훔칠 수 있기 때문에 데이터를 전송하거나 보관하는데 암호화를 해야지 안전하다.
암호화 | 특징 |
Client-side | 클라이언트가 데이터를 암호화하고 키를 관리한다. 필요하면 KSM를 사용해라. |
Server-side | AWS가 데이터를 암호화하고 키를 관리한다. 대부분의 AWS 서비스 (ex. S3, EBS, Redshift)는 KMS를 사용해서 Server-side 암호화를 제공한다. |
서버 사이드 암호화와 클라이언트 사이드 암호화
Server-Side Encryption & Client-Side Encryption
데이터의 암호화 및 복호화는 서버 또는 클라이언트 중 하나에서 수행된다.
- Server-Side Encryption (SSE)
- AWS에서 암호화가 이루어지는 경우는 대부분 SSE이다.
- Client-Side Encryption (CSE)
- CSE는 통신 경로의 보안에 우려가 있는 경우 등 사용자(클라이언트)가 자발적으로 암호화하고 싶을 때 사용된다.
- CSE는 암호화 및 복호화를 사용자 측에서 수행하므로, 키 사용 상황의 확인이나 감사 등도 사용자가 직접 해야 한다.
- CSE를 하려면 AWS SDK(소프트웨어 개발 키트)를 사용한다.
서버 사이드 암호화 (Server-Side Encryption: SSE)
AWS 스토리지(예: S3)에 데이터가 저장할 때 서버가 암호화를 수행하며, 사용자가 데이터를 꺼낼 때 서버가 복호화한다. S3의 데이터의 서버 사이드 암호화(SSE)에는 다음의 3가지 방법이 있다.
- SSE-S3: S3가 암호화 키를 작성 및 관리하고 S3 데이터를 암호화/복호화한다.
- SSE-KMS: KMS에 저장 및 관리되는 KMS 키를 사용하여 S3 데이터를 암호화/복호화한다.
- SSE-C: 사용자가 관리하는 키를 사용하여 S3 데이터를 암호화/복호화한다.
📛Default encryption으로는 SSE-S3, SSE-KMS, DSSE-KMS만 사용가능하다. SSE-C는 사용불가능하다.
클라이언트 사이드 암호화 (Client-Side Encryption: CSE)
서버에 데이터를 전송하기 전에 클라이언트 측에서 암호화를 수행하며, 서버 측에서는 받은 데이터를 그대로 저장한다. 데이터의 복호화도 클라이언트 측에서 진행한다.
KMS란 무엇인가??
- KMS는 암호화 키를 관리하는 서비스
- KMS로 오직 Customer Master Keys(CMKs) = KMS Key만 관리한다.
- 키(CMKs)는 Hardware Security Module(HSM) 라는 곳에 저장된다.
- 누군가 HSM을 조작하거나 접근할려고 하면 모든 키를 지워버린다.
KMS 특징
- KMS는 거의 모든 AWS 서비스와 같이 사용할 수 있다.
- KMS는 봉투 암호화(Envelope encryption) 방식을 사용한다.
- 키를 2개 사용한다. (1)데이터 키와 (2)마스터 키.
- 암호화 된 봉투 안에 키를 넣는 느낌을 이미지하면 이해하기 쉽다.
- KMS Key를 작동/사용하면 audit이나 compliance를 위하여 CloudTrail에 사용 로그가 기록된다.
- KMS는 CloudHSM과 비슷하지만 다르다.
KMS Key 종류
KMS에는 2 종류의 키가 있다.
- 마스터 키 (CMK, Customer Master Key) = KMS Key
- 데이터 키 (CDK, Customer Data Key)
동작 방식 (암호화의 메커니즘)
KMS에서는 "KMS 키"와 "데이터 키"라고 불리는 두 가지 종류의 키를 사용하여 데이터를 암호화 및 복호화한다.
이렇게 두 단계로 키를 보호하는 방식을 "Envelope Encryption"라고 한다.
KMS는 KMS 키와 데이터 키라는 두 단계의 키 관리를 통해 보안을 강화하고 있다.
KMS 키는 데이터 키를 암호화하는 데 사용되며, 데이터 키는 실제 데이터를 암호화하는 데 사용된다.
데이터 키는 일반적으로 암호화를 수행하는 대상 서비스마다 생성된다.
이를 통해 하나의 데이터 키가 유출되더라도 다른 데이터 키로 암호화된 서비스에는 영향을 미치지 않으며, 데이터 키를 KMS 키로 암호화하여 운영 시 자주 사용되는 데이터 키를 보호한다.
The concept has not changed.
To prevent breaking changes, AWS KMS is keeping some variations of this term.
1. KMS 키 = 마스터 키: 데이터 키(CDK)를 생성
- (Customer Master Key: CMK) = 최근에는 KMS Key라고 한다.
- KMS는 오직 KMS Key만 관리한다. (Console이나 SDK나 CLI로 KMS Key를 만들 수 있다.)
- CMK는 오직 생성된 region에만 있는다. (다른 region에는 가지 않는다.)
- 최대 4KB의 데이터를 암호화 할 수 있다. (더 큰 데이터는 Data key를 사용해라)
- AWS Console이나 AWS KMS APIs를 사용해서 KMS Key와 상호작용 가능하다.
2. 데이터 키: 데이터를 암호•복호화
- (Customer Data Key: CDK)
- KMS Key가 데이터키를 생성한다.
- 더 큰 데이터를 암호화 해야할 경우 데이터 키를 활용한다.
- 데이터 키를 생성하면 2개의 키가 생긴다.
- Plaintext Data Key - 암호화 안한 키
- Encrypted Data Key - 암호화 한 키
1. Plaintext Data Key: 데이터를 암호화 한다.
- Plaintext data는 그냥 데이터를 뜻한다.
- Plaintext Data Key를 통해 데이터를 암호화하여 아무도 이해할 수 없는 ciphertext라는 것을 만들어 낸다.
- 암호화를 완료하면 Plaintext Data Key를 삭제한다. (아무도 복호화 할 수 없도록)
삭제해버리면 어떻게 데이터를 복호화(Decrypt) 하는가???
→ Encrypted Data Key를 활용
2. Encrypted Data Key: CMK에 의해서 암호화된 데이터 키
- Encrypted Data Key는 CMK에 의해서 암호화 되었다.
- 반대로 CMK를 이용해서 Encrypted Data Key를 복호화 할 수 있다.
- Encrypted Data Key를 복호화하면 Plaintext Data Key 다시 생긴다.
- Plaintext Data Key를 통해서 데이터를 복호화 할 수 있다.
KMS Key의 종류
KMS Key에는 "AWS 관리형 키(AWS managed key)"와 "고객 관리형 키(Customer managed key)"의 있다.
- AWS 관리형 키 (AWS managed key)
- AWS가 생성하고 관리하는 키로, 사용자가 삭제할 수 없다.
- EBS나 Redshift 같은 서비스와 연동하여 암호화를 사용할 때 AWS가 자동으로 생성한다.
- 고객 관리형 키 (Customer managed key)
- 사용자가 직접 생성, 삭제 및 관리할 수 있는 키이다.
- 하지만 생성한 키를 장기간 사용하는 것은 보안상 위험할 수 있으므로, KMS는 키의 자동 회전(정기적인 갱신)을 지원한다.
AWS Secrets Manager와의 연동
[Secret Manager]
Secrets Manager는 데이터베이스 등에 접근할 때 사용하는 시크릿(로그인 시 인증 정보 등)을 관리하는 서비스이다.
Secrets Manager를 이용하면 예를 들면, 애플리케이션에서 RDS에 접근할 때, Secrets Manager에서 시크릿(로그인 정보)을 가져와서 인증할 수 있다.
즉, 이를 통해 로그인 정보를 애플리케이션에 직접 입력하는 하드코딩을 할 필요가 없어진다.
또한, 시크릿은 정기적으로 갱신(회전)되며, 버전 관리도 이루어진다.
[KMS + Secret Manager]
KMS와 Secrets Manager를 연동하면 시크릿을 보호하기 위해 데이터 키가 사용된다.
회전이 이루어질 때마다 데이터 키도 새롭게 자동으로 생성되므로, 높은 보안 수준의 인증을 구현할 수 있다.
CloudHSM와 KMS의 차이점
두 서비스는 비슷하며 키 암호화 한다는 점이 같다. 하지만 차이점이 있다.
AWS KMS | AWS CloudHSM | |
가장 큰 차이점 | HSM 하드웨어를 관리할 필요 없이 암호화 키 생성 가능. 하드웨어 관리는 AWS 측에서 한다. |
HSM 하드웨어를 제공받아 암호화 키를 관리한다. |
암호화 키 관리 | KMS는 사용하기 쉽고 편리하며 AWS 측에서 정해준 방식으로 암호화 키를 관리한다. | CloudHSM은 직접적으로 HSM에 액세스하여 키 관리 및 암호화 작업을 수행할 수 있다. |
커스터마이징 | 커스터마이징이나 하드웨어 수준의 제어는 불가능하다. | 더 높은 수준의 커스터마이징과 보안 제어 가능. |
서포트하는 암호키 | Symmetric-key (대칭 키) | Symmetric-key(대칭 키) Public-key cryptography(공개 키) |
연동가능한 AWS 서비스 |
50개 이상 | KMS를 거쳐 AWS 서비스와 연동 |
비용 | (CloudHSM보다) 저렴 | (KMS보다) 비쌈 |
HSM의 FIPS 인증 | FIPS 140-2 level-2 | FIPS 140-2 level-3 |
HSM 관리 책임 | AWS | 클라이언트 |
참고자료
https://www.youtube.com/watch?v=eIvbUU8VH30&t=335s
'클라우드(AWS)' 카테고리의 다른 글
[AWS] Amazon Inspector란? 쉽게 개념 및 특징 정리 (0) | 2024.04.10 |
---|---|
[AWS] CloudHSM이란? 쉽게 개념 정리 (HSM란? , KMS와 차이점 정리) (0) | 2024.04.10 |
[AWS] AWS Snow Family 시리즈 (Snowcone, Snowball, Snowmobile 차이점, Datasync) (0) | 2024.03.22 |
[AWS] ENI란? 쉽게 개념 및 특징 정리 (Elastic Network Interface) (1) | 2024.03.12 |
[AWS] CloudTrail 쉽게 개념 및 특징 정리 (Event History, Insights, Trail 작성하기) (1) | 2024.03.12 |