PostgreSQL 데이터베이스 암호화
이 자습서에서는 PostgreSQL에서 데이터를 암호화하기 위해 선택할 수 있는 다양한 방법을 설명합니다.
암호화 소개
간단히 말해서 암호화는 데이터를 보호할 수 있는 방법입니다. 콘텐츠를 숨기고 의도된 사용자 이외의 사람이 읽을 수 없도록 체계적으로 변경됩니다.
의도된 수신자만이 데이터를 해독할 수 있는 키
를 가지므로 가능합니다. 결과적으로 모든 민감한 정보는 항상 숨겨집니다.
모든 경우에 데이터를 암호화하는 것이 좋습니다. 그러나 민감한 정보가 보안되지 않은 서버에서 또는 데이터가 위협받는 다른 상황에서 송수신되는 경우 중요합니다.
PostgreSQL 데이터베이스 암호화
데이터베이스는 요구 사항에 따라 세 가지 다른 계층에서 암호화될 수 있습니다. 여기에는 다음이 포함됩니다.
- 클라이언트 애플리케이션
- 저장 장치
- 데이터베이스 자체
자체 데이터베이스 암호화는 대부분의 위협 모델을 처리하는 것으로 알려진 최상의 암호화 형식인 경우가 많습니다.
다른 방법을 적용할 수 있지만 주요 목표는 클라이언트 응용 프로그램을 보호하는 것입니다. 따라서 다음은 PostgreSQL에서 데이터를 암호화하기 위해 선택할 수 있는 몇 가지 접근 방식입니다.
시스템 디스크 암호화
이름에서 알 수 있듯이 시스템 디스크 암호화는 디스크 암호화 소프트웨어/하드웨어가 디스크에 저장된 모든 데이터 비트를 암호화하는 프로세스입니다.
즉, 소프트웨어나 하드웨어가 동시에 암호화하도록 프로그래밍된 경우 사용자 데이터가 생성되는 즉시 암호화할 수 있습니다.
이를 위해 디스크가 암호화되어 있으므로 PostgreSQL 설정을 수정할 필요가 없습니다. 시스템 디스크 암호화를 수행하는 쉬운 방법은 Linux에서 VM
을 사용하는 것입니다.
수행해야 할 작업은 다음과 같습니다.
먼저 대상 머신의 복제본이 될 임시 VM
을 만듭니다. 대상 디스크는 기존 디스크일 수 있지만 새 디스크를 만들고 나중에 데이터베이스를 추가하는 것이 가장 좋습니다.
결정에 관계없이 대상 디스크는 소스 디스크보다 최소 256MB
이상 커야 합니다. 다음으로 아래 지침을 따를 수 있습니다.
-
타겟 및 소스 디스크를 임시
VM
에 마운트해야 합니다. -
직렬 포트를 통해
VM
을 연결합니다. 이 단계를 수행하려면 직렬 포트 연결을 활성화해야 합니다. 직렬 포트 연결을 허용하려면 메타데이터에서TRUE
값으로serial-port-enable
을 추가할 수 있습니다. -
다음으로
grub
에 액세스할 수 있도록 해야 합니다. 이렇게 하려면 다음 명령을 사용합니다.grub2-mkconfig -o/boot/grub2/grub.cfg
그런 다음 시스템을 재부팅하면 직렬 콘솔에서
grub
에 액세스할 수 있습니다. -
디스크를 포맷하여 암호화되지 않은(부팅) 시스템과 암호화된 시스템을 만듭니다. 이를 통해 시스템은
grub
을 부팅할 수 있으므로 사용자는키
를 입력하여 데이터를 해독할 수 있습니다.fdisk /dev/sdb
명령을 사용하여 이를 수행할 수 있습니다. -
cryptsetup
을 사용하여 디스크를 암호화합니다. 암호화할 디스크의 특정 부분을 매핑할 수도 있습니다. 그런 다음 데이터베이스가 이 디스크에 존재하는 한 데이터베이스를 암호화할 수 있습니다.
디스크 크기 조정 또는 백업 생성과 같은 추가 단계는 이 후에 수행할 수 있습니다.
투명한 데이터 암호화
PostgreSQL TDE
는 사용자가 클러스터 암호화를 사용하여 전체 데이터베이스에 대해 PostgreSQL 암호화를 수행할 수 있도록 하는 기능입니다. 디스크에 쓰는 동안 암호화하고 디스크에서 읽는 동안 암호를 해독합니다.
기본적으로 적용되도록 PostgreSQL 설치 중에 다음 단계를 수행할 수 있습니다.
-
PostgreSQL용 디렉터리를 만듭니다. 기본 위치가 자주 사용됩니다.
-
bison
,readline
,flex
,zlib
,openssl
및crypto
용 라이브러리를 설치해야 합니다. 필요한 경우 추가 라이브러리를 설치할 수 있습니다. -
시스템에 PostgreSQL을 설치합니다.
-
su - postgres
를 사용하여postgres
사용자로 전환합니다. -
-K
를 사용하여 암호화된 클러스터를 생성합니다.예:
initdb -D /user/pgsql/xyz -K/user/pgsql/key
. 여기서user/pgsql/key
는 암호화 키를 반환합니다. -
initdb
는 암호화key
명령을postgresql.conf
에 저장합니다.
클러스터가 성공적으로 생성되었으며 이제 데이터를 암호화합니다. 사용자가 Postgres를 실행할 때 이러한 암호화된 클러스터는 암호화되지 않은 클러스터와 다르지 않습니다.
유일한 차이점은 데이터 암호화 변수가 설정된다는 것입니다.
데이터베이스의 특정 섹션 암호화
위의 방법을 사용하면 전체 데이터베이스 또는 PostgreSQL의 모든 데이터베이스가 암호화됩니다. 그러나 개별 데이터베이스 또는 데이터베이스의 특정 부분을 암호화할 수도 있습니다.
이를 위해서는 pgcrypto
와 같은 확장 프로그램을 사용하는 것이 가장 좋습니다. pgcrypto
를 사용하는 선택적 Postgres 암호화가 작동하는 방식은 다음과 같습니다.
CREATE EXTENSION IF NOT EXISTS pgcrypto
를 사용하여pgcrypto
확장을 활성화합니다.- 일반적으로
PGP_SYM_ENCRYPT
명령은 데이터를 암호화하고PGP_SYM_DECRYPT
는 데이터를 해독합니다.
다음은 PostgreSQL에서 열을 암호화하고 해독하는 방법입니다.
열에 암호화된 데이터 삽입
INSERT INTO temp (x, y)
VALUES
('xx', PGP_SYM_ENCRYPT('yy', 'key')::text);
이미 암호화된 데이터 업데이트
UPDATE temp
SET y= PGP_SYM_ENCRYPT('content', 'key')::text
WHERE x= 'xx';
읽을 데이터 해독
SELECT x, PGP_SYM_DECRYPT(y::bytea, 'key') as data
FROM temp WHERE x= 'xx';
이는 요구 사항에 따라 데이터베이스를 암호화할 수 있는 몇 가지 다양한 방법을 요약한 것입니다. PostgreSQL 암호화는 언뜻 보기에는 어려워 보일 수 있지만 수행하는 것은 매우 간단합니다.
귀하의 데이터가 항상 보호될 수 있도록 어떤 종류의 암호화 서비스가 귀하에게 가장 적합한지 식별하는 데 도움이 되었기를 바랍니다.
Hello, I am Bilal, a research enthusiast who tends to break and make code from scratch. I dwell deep into the latest issues faced by the developer community and provide answers and different solutions. Apart from that, I am just another normal developer with a laptop, a mug of coffee, some biscuits and a thick spectacle!
GitHub