AWS kms사용기#3

KMS 사용기#2 에서 보았을 때는 사용 방법이 어렵게 느껴진다.

AWS에서는 다음과 같이 라이브러리화된 암호화 SDK를 제공하고 있다. (!!) http://docs.aws.amazon.com/ko_kr/encryption-sdk/latest/developer-guide/java.html 굳이 처음부터 개발할 필요 없이 CMK만 생성하고 나면 DataKey에 대한 전체적인 부분을 SDK에서 제공하고 있다. (까딱하면 삽질기를 작성할 뻔했다…)

AWS encryption-sdk는 Java 8과 Python 환경을 제공하고 있다. Java 환경이 않맞는 경우 Java 7로 내려서 컴파일 할 수 있다. (작성자는 Java 7로 컴파일하여 사용하였습니다…)

Java 관련 사용

encryption-sdk.jar 를 프로젝트 라이브러리에 추가하고, 다음과 같이 코드를 작성할 수 있다.

AwsCrypto crypto = new AwsCrypto();

// AWS에서 권장되는 보안 알고리즘
crypto.setEncryptionAlgorithm(CryptoAlgorithm.ALG_AES_256_GCM_IV12_TAG16_HKDF_SHA384_ECDSA_P384);

final KmsMasterKeyProvider prov = new KmsMasterKeyProvider(keyArn);

// 암호화
final String enData = crypto.encryptString(prov, "demo text").getResult();
System.out.println("Ciphertext: " + enData);

// 복호화
final String deData = crypto.decryptString(prov, enData).getResult();
System.out.println("Plaintext: " + deData);

다음과 같이 코드를 작성하면 한가지 에러를 만날 수 있다. (Caused by: java.security.InvalidKeyException: Illegal key size…)

원인은 JCE에서 기본적 정책으로 AES 128 bit를 초과하는 키 길이를 사용할 수 없다. 이를 방지하기 위해 아래 사이트에서 키 길이를 unlimit 시킨 라이브러리를 ${JRE_HOME}/lib/security 폴더에 넣어 해결할 수 있다. http://www.oracle.com/technetwork/java/javase/downloads/jce-7-download-432124.html

이로써 KMS의 두가지 키 모델에 대해서 사용 방법을 마치겠습니다..

Written on August 4, 2017