KMS를 이용한 Envelop Encryption (AWS OCI) - dhs-shine/litellm GitHub Wiki

image

  • KMS는 HSM(Hareware Security Module)에 KEK(Key Encryption Key: Master key)를 저장해 두고
    1. SDK 사용자에게 KEK로 Encryption된 DEK(Data Encryption Key) + 암호화 안된 DEK를 리턴해주는 DEK 발급 기능
    2. KEK로 암호화된 DEK를 Decrypt 해주는 기능
  • 위 두가지 기능을 제공함
  • Encryption만 허용할거면 1번 API에 대한 접근권한만 제공하고, Decryption만 허용할거면 2번 API 접근권한만 제공함 (IAM으로 Service Account의 권한 제어)
  • 1, 2번 기능은 KEK로 DEK 암호화/복호화만 지원하므로 DEK로 데이터를 암호화 하고 저장하는 봉투암호화(암호화된 DEK + 암호화된 데이터 + KEK id 묶어서 스토리지에 저장)는 직접 구현해야함 (boto3(aws), oci 모두 sdk에서 미지원)
  • AWS/OCI 공식 SDK로 봉투암호화 구현한 예제: https://github.com/dhs-shine/kms-envelope-encryption-test
  • 봉투 암호화 된 결과물 예시: https://github.com/dhs-shine/kms-envelope-encryption-test/blob/main/results/aws.txt
  • SCP는 공식 문서상에서 KMS API나 SDK 레퍼런스가 없음. 문의 필요
  • LiteLLM S3Logger를 상속한 Logger를 만들거나 CustomLogger를 구현해서 위 봉투암호화를 구현해야함.
  • D-K..는 GCP 위에서 돌아가며 Google Tink 라이브러리 기반으로 SDK를 구현한 것으로 보임. DEK를 이용한 데이터의 봉투암호화까지 구현되어 있을수도 있음.
  • S3 Callback에 위 과정을 끼워넣어야 함. (Persistent Storage인 Object Storage 저장 전에 메모리 상에서 암호화를 완료해야함)