Cloud Infra Architecture (AWS)/AWS Build

[AWS KMS] AWS CLI로 외부 키를 AWS KMS로 생성하기 [T]

seongduck 2024. 10. 30. 16:15

순서는 다음과 같다.

  1. AWS KMS에 빈 KMS 키를 생성 후, 외부 키를 해당 KMS에 채운다.
  2. 외부 키를 가져오기위해 래핑 수행
  3. OpenSSL 라이브러리로 키 구성요소 생성하기
  4. API를 통해 빈 KMS 키로 가져오기

 

외부 키가 있는 경우는 바로 진행하면 되고, 없을 때를 가정하여 임의로 만들어서 진행한다.

항상 진행은 EC2 CLI를 통해 진행한다.


 

우선 해당을 실행하려면 몇가지 IAM Role 및 Policy가 필요하다.

1) IAM -> Policies -> Create Policy
2) KMS -> Write(ImportKeyMaterial) -> ALL Resources
3) 이름 작성 -> Create Policy

1) IAM -> EC2에 붙여놓은 IAM Roles 클릭
2) Add Permissions -> Attach Policies -> 방금 만든 Policy 선택 -> Add permissions

 


1) AWS KMS에 빈 KMS 키를 생성

aws kms create-key --origin ExternalKEY #ExternalKEY를 통해 외부에서 가져온 키를 표시
      2)

외부 키를 가져오기위해 래핑 수행

aws kms get-parameters-for-import --key-id "위의 KeyID 입력" --wrapping-algorithm RSAES_OAEP_SHA_1 --wrapping-key-spec RSA_2048

만들어지는 PublicKey와 ImportToken은 사용해야 하므로 다음 형식으로 저장한다.

 

vi PublicKey.b64 #위의 PublicKey 값
vi ImportToken.b64 #위의 ImportToken key 값

#확장자 변경
openssl enc -d -base64 -A -in Publickey.b64 -out Publickey.bin
openssl enc -d -base64 -A -in ImportToken.b64 -out ImportToken.bin

그러면 bin이 만들어지는데 이는 추후 래핑할 때 사용한다.

 

3) OpenSSL 라이브러리로 키 구성요소 생성하기

일반적으로 키 구성요소는 키 생성을 담당하는 회사의 엔터프라이즈 HSM이나 키 관리 시스템에서 가져온다.

하지만 그 환경이 아니므로 인스턴스에서 OpenSSL 라이브러리를 사용하여 키를 생성한다.

openssl rand -out genkey.bin 32 #256비트 대칭 키 생성 후 genkey.bin 파일에 저장

genkey.bin에는 CMK의 키 구성요소이다.

 

해당 키 구성요소를 AWS KMS에서 가져온 공개 키(Publickey.bin)로 감싸기

openssl pkeyutl -encrypt -in genkey.bin -inkey Publickey.bin -keyform DER -pubin -out WrappedKeyMaterial.bin -pkeyopt rsa_padding_mode:oaep
#생성된 키 구성요소를 가져와 AWS KMS에서 다운로드한 공개 키로 암호화 후 Wrapped~~.bin 파일로 저장

Wrapped~~.bin이라는 래핑된 암호화된 키 자료가 만들어진다.

 

4) API를 통해 빈 KMS 키로 가져오기

AWS KMS로 가져오기 위해서는 위의 래핑한 bin파일과 ImportToken.bin이 필요하다. 다음으로 실행

aws kms import-key-material --key-id "처음만들었던 KeyID 입력" --encrypted-key-material fileb://WrappedKeyMaterial.bin --import-token fileb://ImportToken.bin --expiration-model KEY_MATERIAL_EXPIRES --valid-to 2025-01-01T12:00:00-08:00

 

AWS Console에서 KMS를 확인해보면 구성이 완료

 

별첨) 방금 만든 Key Alias 별칭 붙이기

aws kms create-alias --alias-name alias/ImportedCMK --target-key-id '맨 처음에 만들었던 KeyID'

aws kms list-aliases #방금 만든거 확인