프로젝트 소개

pg_vault_tde는 PostgreSQL 17 및 18 버전을 위한 Transparent Data Encryption(TDE)을 제공하는 오픈 소스 PostgreSQL 확장이며, 19 버전 지원도 계획되어 있습니다. AES-256-GCM 암호화 알고리즘을 사용하며 Table Access Method 계층에서 동작합니다. 즉, 데이터는 저장 전에 암호화되고 검색 시 복호화되며, PostgreSQL 코어를 수정할 필요가 없습니다. 이 확장은 여러 키 관리 솔루션을 지원합니다. HashiCorp Vault, OpenBao, 로컬 PKCS#12 월, PKCS#11 HSM이 여기에 해당합니다. 암호화 키는 외부에서 관리되고 shared memory에 캐시되며 자동 로테이션 기능을 갖습니다. 주요 기능은 다음과 같습니다. - 투명한 암호화: 모든 튜플을 AES-256-GCM으로 암호화합니다. 데이터는 스토리지 관리자에 도달하기 전에 암호화되고, 스토리지 관리자를 떠난 후 복호화됩니다. - 키 관리 옵션: HashiCorp Vault/OpenBao, 로컬 PKCS#12 월렛, PKCS#11/HSM 통합을 지원합니다. - 코어 수정 불필요: 플러그 앤 플레이 확장으로 동작합니다. - 인덱스 암호화: B-Tree 인덱스(tde_btree)에 AES-256-SIV를 지원합니다. 향후 버전에서는 GIN, Hash, GiST 동등성 인덱스 지원이 계획되어 있습니다. - WAL 암호화: 데이터는 Write-Ahead Log(WAL)에 쓰이기 전에 암호화됩니다. - 데이터베이스별 KMS 구성: 동일 클러스터 내 개별 데이터베이스에 서로 다른 KMS 설정을 허용합니다. - 키 로테이션: 테이블별 DEK 로테이션(온라인)과 KEK 로테이션을 모두 지원합니다. 설치는 소스에서 빌드하거나 pgxn install을 사용하여 수행할 수 있습니다. 구성은 postgresql.conf를 수정하여 shared_preload_libraries에 pg_vault_tde를 포함한 다음 데이터베이스에서 확장을 생성하는 방식입니다. 선택한 KMS 공급자와 해당 설정을 구성하기 위해 특정 GUC 파라미터가 사용됩니다. 이 확장은 암호화된 테이블을 생성하기 위한 새로운 테이블 접근 방식 encrypted_heap을 정의합니다. 읽기 시 데이터는 투명하게 복호화됩니다. 암호화된 튜플의 와이어 포맷에는 헤더, IV, ciphertext, GCM tag, 버전, generation counter가 포함되어 튜플당 약간의 오버헤드가 추가됩니다.