Postgres와 투명한 데이터 암호화(TDE)

Vibhor Kumar 2015년 8월 13일

보안은 항상 기업들의 큰 관심사입니다. 특히 데이터베이스에 중요한 정보를 저장하고 있다면 항상 높은 수준의 보안이 필요합니다. 수년 간에 걸친 기술 발전을 통해 더 나은 솔루션을 제공하게 되었습니다.

민감한 정보가 있다면 사람들은 권한이 없는 사람이 시스템에 접근하여 정보를 볼 수 없도록 정보를 암호화합니다.

Moving Oracle to the Cloud?
Learn 5 key decisions to make to ensure success. Get the Whitepaper.

엔터프라이즈는 민감한 정보 관리를 위해 다음과 같은 여러 가지 방법을 사용합니다.

  1. 특정 정보를 암호화합니다.

PPAS 사용자라면 데이터베이스에 있는 민감한 정보를 암호화는 방법을 제공하는 DBMS_CRYPTO 패키지를 사용할 것입니다.

자세한 내용은 다음 링크를 참조하십시오.

http://www.enterprisedb.com/docs/en/9.4/oracompat/Database_Compatibility_for_Oracle_Developers_Guide.1.178.html#

PostgreSQL의 경우 사용자는 pgcrypto 모듈을 사용할 수 있습니다.

  1. 투명 데이터 암호화(TDE)는 Microsoft와 Oracle 모두가 데이터베이스 파일을 암호화하기 위해 채택하는 또 다른 방법입니다. TDE는 파일 수준의 암호화를 제공합니다. 이 방법은 유휴 상태의 데이터 보호 문제를 해결합니다. 즉 하드 드라이브와 함께 백업 미디어에 있는 데이터베이스까지 모두 암호화합니다. 엔터프라이즈는 일반적으로 PCI DSS와 같은 규정 준수 문제를 해결하기 위해 TDE를 채택합니다.

Postgres Plus에는 현재 TDE를 기본적으로 지원하지는 않지만 데이터베이스 파일 수준의 암호화를 원하는 엔터프라이즈는 다음 중 한 가지 방법을 사용하여 유휴 상태의 데이터를 보호할 수 있습니다.

  1. 전체 디스크 암호화:

전체 디스크 또는 파티션 암호화는 데이터를 가장 효과적으로 보호할 수 있는 방법 중 하나입니다. 이 방법은 각각의 파일을 보호할 뿐만 아니라 해당 파일의 일부가 있을 수 있는 임시 저장 공간까지 보호합니다. 전체 디스크 암호화는 모든 파일을 보호하므로 보호할 파일 선택, 파일 누락에 대한 걱정을 하지 않아도 됩니다.

RHEL(Red Hat)은 디스크 형식의 LUKS(Linux Unified Key Setup)를 지원합니다. LUKS 벌크는 하드 드라이브 파티션을 암호화합니다.

LUKS에 대한 자세한 내용은 다음 링크를 참조하십시오.

https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Security_Guide/chap-Security_Guide-Encryption.html#sect-Security_Guide-LUKS_Disk_Encryption

  1. 파일 시스템 수준 암호화:

파일 시스템 수준 암호화는 파일/디렉토리 암호화라고도 합니다. 이 방법은 개발 파일 또는 디렉터리를 파일 시스템이 자체적으로 암호화합니다.

스택형 암호 파일 시스템 암호화를 지원하여 사용자가 자체 환경에서 활용할 수 있습니다.

파일 시스템 수준 암호화의 이점은 다음과 같습니다.

  1. 유연한 파일 기반 키 관리로 각각의 파일을 개별 암호화 키로 암호화할 수 있으며 일반적으로 이 키로 암호화됩니다.
  1. 암호화된 볼륨 전체를 백업하는 것이 아닌 암호화된 파일(예: 변경되고 심지어 암호화된 형식의 개별 파일에 대한 증분 백업)을 개별적으로 관리합니다.
  1. 공용 키 암호를 사용하여 액세스 제어를 강화할 수 있습니다. 또한 암호 키는 메모리에만 보관되고 해당 키로 해독한 파일은 계속 열려 있습니다.

투명한 데이터 암호화를 위해 Postgres에 스택형 암호 파일 시스템 암호화를 사용할 수 있습니다.

이 블로그에서는 mount ecrpytfs에 대해 논의하려고 합니다. mount ecrpytfs는 설정에 대한 부담이 적기 때문입니다. (LUKS의 경우 데이터를 저장하기 전에 새 디스크를 구성 및 포맷해야 합니다.) “mount ecrpytfs”는 기존 디렉토리와 데이터에 그대로 적용됩니다.)

엔터프라이즈가 TDE와 관련하여 DBA를 제어하려는 경우 DBA가 암호화 명령을 실행하기 위한 sudo 규칙을 거의 사용/정의하지 않아도 됩니다.

사용 가능한 방법은 다음과 같습니다.

  • 시스템 관리자에게 DBA가 Postgres Plus용 데이터 디렉토리에 암호화를 실행할 수 있는 sudo 규칙을 만들도록 요청합니다. 한 가지 일반적인 방법은 Linux 운영 체제에서 “mount ecryptfs” 명령을 사용하는 것입니다.
  • 사용자가 /ppas94/data 디렉토리를 암호화해야 하는 경우 다음 명령을 사용할 수 있습니다.
sudo mount -t ecryptfs /ppas94/data /ppas94/data
        

자세한 내용은 다음 RHEL 문서를 참조하십시오.

https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Storage_Administration_Guide/ch-efs.html

사용자는 또한 암호화 키 유형(passphrase, openssl), 암호(aes, des3_ede…) 키 바이트 크기 및 위 명령에 대한 기타 옵션을 지정할 수 있습니다.

해당 예는 다음과 같습니다.

# mount -t ecryptfs /home /home -o ecryptfs_unlink_sigs \

 ecryptfs_key_bytes=16 ecryptfs_cipher=aes ecryptfs_sig=c7fed37c0a341e19
<strong>

Centos 7과 RHEL 7은 기본적으로 ecrpytfs를 지원하지 않으므로 사용자는 encfs 명령을 사용할 수도 있습니다.

encfs에 대한 자세한 내용은 다음 링크를 참조하십시오.

https://wiki.archlinux.org/index.php/EncFS

다음은 encfs를 사용하여 데이터 디렉토리를 암호화하는 단계입니다.

  1. enterprisedb 사용자로서 다음 명령을 사용하여 데이터 디렉터리를 만듭니다.
   mkdir /var/lib/ppas/9.4/encrypted_data
   chmod 700 /var/lib/ppas/9.4/encrypted_data
  1. 다음 encfs 명령을 사용하여 데이터 디렉토리를 암호화합니다.
         encfs /var/lib/ppas-9.4/encrypted_data/ /var/lib/ppas-9.4/data

위 명령의 스냅샷은 다음과 같습니다.

 encfs /var/lib/ppas/9.4/encrypted_data /var/lib/ppas/9.4/data
 
The directory "/var/lib/ppas/9.4/data" does not exist. Should it be created? (y,n) y</pre>
Creating new encrypted volume.
 
Please choose from one of the following options:
 
enter "x" for expert configuration mode,
 
enter "p" for pre-configured paranoia mode,
 
anything else, or an empty line will select standard mode.
 
?>
 
Standard configuration selected.
 
Configuration finished.  The filesystem to be created has
 
the following properties:
 
Filesystem cipher: "ssl/aes", version 3:0:2
 
Filename encoding: "nameio/block", version 4:0:2
 
Key Size: 192 bits
 
Block Size: 1024 bytes
 
Each file contains 8 byte header with unique IV data.
 
Filenames encoded using IV chaining mode.
 
File holes passed through to ciphertext.
 
Now you will need to enter a password for your filesystem.
 
You will need to remember this password, as there is absolutely
 
no recovery mechanism.  However, the password can be changed
 
later using encfsctl.
 
New Encfs Password: 
 
Verify Encfs Password:

  1. 데이터 디렉토리를 암호화한 후 사용자는 또한 암호에 적합한 명령을 포함하기 위해 postgresql-<version> 서비스 스크립트를 수정해야 할 수도 있습니다. 그러한 경우 sshpass를 사용할 수도 있고 디렉토리 마운트를 위해 암호를 전달할 수 있는 자체 프로그램을 만들 수도 있습니다.

이처럼 Postgres에 투명한 데이터 암호화를 적용하는 방법은 매우 쉽습니다.

 

Vibhor Kumar

Vibhor Kumar is Chief Performance Architect with 12+ years of leadership experience in designing innovative business solutions for customers and leads the performance engineering team at EnterpriseDB.