본문 바로가기

Security&Identity/KMS

AWS Key Management Service(KMS)

개인정보 보호법 및 정보통신망법에 포함되는 사업자라면 키 관리의 중요성을 누구보다 잘 알고 있을 것이다.

 

사실 보안팀이 아니라서 본인은 KMS를 본 적도 써 본적도 없긴 하다....머쓱... 

 

KMS란? 암호화 키의 라이프사이클을 관리하는 전용 시스템으로 암호화 키의 생성, 저장, 백업, 복구, 파기 등의 기능을 제공하는 시스템이다.

 

HSM란? 암호화 키를 필요로 하는 다양한 애플리케이션이 있을 경우 생성, 저장, 백업, 복구 파기 등의 기능을 제공하는 물리 시스템 

 

가령 애플리케이션 내에서 MD5 등 위험 요소가 있는 알고리즘으로 키 관리를 할 경우 아무리 좋은 기능을 갖고 있는 애플리케이션이라도 문제가 될 수 있다.

 

따라서 어느정도 규모가 있는 정보통신사업자라면 키 관리 시스템을 필수적으로 사용해야 한다. (ISMS-P 인증 등)

 

법을 떠나서 키 관리에 대한 보안, 성능, 관리 세 가지 목적을 위해 사용되는데 HSM은 FIPS 등 인증을 받은 전용 장치이기 때문에 보다 안전하고, 애플리케이션이 처리해야 할 작업에 대한 부하를 줄여주기도 한다.

 

AWS KMS의 전반은 이해가 안 가나, 간략히 주요 기능을 추려보면 아래와 같다.

1. 양방향 암호화 지원(대칭키)

2. 별도의 물리적인 공간에 ecryption/decryption을 위한 key를 저장

3. AWS SDK 등을 사용하여, 겁나 쉽게 데이터 ecryption/decryption이 가능함

암호화 방식은 아래 링크에 잘 설명되어 있음.

(https://medium.com/chequer/sqlgate-teams-%EA%B0%9C%EB%B0%9C%EA%B8%B0-1%ED%8E%B8-%EB%B6%80%EC%A0%9C-%EC%95%88%EC%A0%84%ED%95%9C-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%95%94%ED%98%B8%ED%99%94-aws-kms-aes-d2583826ed90)

 

간단한 샘플

import boto3
import base64

kms = boto3.client('kms')
key_id = 'arn:aws:kms:ap-southeast-1:557652101750:key/742a59fe'
data = '{phoneNumber:112}'

enc = kms.encrypt(KeyId = key_id, Plaintext = data)['CiphertextBlob']
enc = base64.b64encode(enc).decode('utf-8')
print('enc: ' + enc)

enc = base64.b64decode(enc)
dec = kms.decrypt(CiphertextBlob = enc)['Plaintext'].decode('utf-8')
print('dec: '+ dec)

 

한 가지 알아두어야 할 사항은 AWS KMS를 사용한 데이터들은 모두 AWS에 lock-in 된다. 데이터 옮기려면 decryption 해야 한다.

 

이 제약이 KMS의 자체 제약인지 AWS KMS의 제약인지는 잘 모르겠다. 아시는 분????

 

대안으로 AWS CloudHSM을 사용할 경우, KEY의 Export가 가능하다고 한다. 

'Security&Identity > KMS' 카테고리의 다른 글

AWS Key Management Service(KMS)  (0) 2019.04.24

태그