PostgreSQL 보안: pg_hba.conf와 인증·권한 설정
pg_hba.conf 구성, 인증 방식 비교, TLS 적용과 역할 기반 권한 정책, GRANT/REVOKE 예제까지 포함한 PostgreSQL 보안 설정 핵심 자료
목차
왜 pg_hba.conf와 인증·권한 설정이 중요한가
데이터베이스 접근 제어는 시스템 보안의 기초이다. PostgreSQL에서는 접속 제어를 담당하는 파일이 pg_hba.conf이며, 인증 방식과 사용자 권한 설정이 결합되어 안전한 운영 환경을 만든다. 초보자도 이해하기 쉽게 핵심 개념과 설정 예제를 순서대로 설명한다.
pg_hba.conf 기본 개념
파일 역할과 위치
pg_hba.conf는 호스트 기반 인증 정보를 담는 텍스트 파일이다. 보통 데이터 디렉토리 안에 위치하며, 서버가 시작될 때 읽는다. 이 파일은 어떤 클라이언트가 어떤 데이터베이스에 어떤 인증 방식으로 접속할지 결정한다.
엔트리 구조
각 줄은 접근 유형, 데이터베이스, 사용자, 주소(또는 소켓), 인증 방식 순으로 구성된다. 순서대로 처리되므로 구체적인 규칙을 먼저 배치하는 것이 중요하다.
주요 인증 방식 비교
- trust: 암호 없이 접속 허용 — 개발 환경 이외 사용 금지
- md5: MD5 해시 기반 암호 검증 — 이전에 널리 사용
- scram-sha-256: 안전한 해시 방식 — 권장
- peer: 로컬 소켓에서 운영체제 사용자로 인증
- cert: 클라이언트 인증서 기반 — TLS와 함께 사용
pg_hba.conf 설정 예제
아래 예제는 기본적인 안전 설정을 보여준다. 필요에 따라 CIDR과 데이터베이스 이름, 사용자명을 조정한다.
# TYPE DATABASE USER ADDRESS METHOD
local all all peer
hostssl all all 192.168.0.0/24 scram-sha-256
host replication replicator 10.0.0.0/8 md5
host all readonly 203.0.113.0/24 md5
host all all 0.0.0.0/0 reject
설명: 로컬 접속에는 peer 사용, 내부망은 TLS(hostssl)+scram-sha-256 우선 적용, 리플리케이션 전용 계정은 별도 네트워크에서 md5 허용, 외부의 불특정 접속은 기본적으로 차단한다.
TLS와 인증서 관리
TLS는 전송 중 데이터 보호에 필수적이다. server.crt와 server.key를 postgresql.conf에서 지정하고, 클라이언트 인증을 원하면 ca 인증서를 배포한다. cert 방식으로 클라이언트 신원을 검증하면 추가 보안이 확보된다.
권한 설계와 역할 관리
원칙
- 최소 권한 원칙 적용: 필요한 권한만 부여
- 역할(role) 사용 권장: 사용자 그룹화로 관리 용이성 확보
- 특권 계정 분리: 운영계정과 애플리케이션 계정 분리
권한 설정 예제
-- 역할과 사용자 생성
CREATE ROLE app_role NOINHERIT;
CREATE USER app_user WITH PASSWORD 'secure_pwd';
GRANT app_role TO app_user;
-- 스키마와 테이블 권한 제한
GRANT USAGE ON SCHEMA app_schema TO app_role;
GRANT SELECT, INSERT, UPDATE ON ALL TABLES IN SCHEMA app_schema TO app_role;
-- 관리 권한은 별도의 운영 계정에만 부여
GRANT CREATE ON DATABASE app_db TO db_admin;
주의: 실제 비밀번호는 강력한 값과 보안된 저장소(예: 시크릿 매니저)에 보관한다.
운영에서의 점검 항목
- pg_hba.conf 변경 후 pg_reload_conf()로 재로드하거나 서버 재시작
- 로그 레벨을 적절히 설정해 인증 실패 원인 파악
- 정기적으로 역할과 권한을 감사하여 불필요 권한 제거
- TLS 인증서 만료일 확인 및 자동 갱신 체계 마련
테스트와 배포 체크리스트
- 개발 환경에서 먼저 설정을 검증한 뒤 운영 반영
- 접속 시나리오별로 사용자 계정으로 실제 쿼리 수행 테스트
- 백업 및 복구 절차가 권한 변경에 영향을 받지 않는지 확인
마무리
pg_hba.conf의 정확한 규칙 작성과 적절한 인증 방식 선택, 그리고 역할 기반 권한 관리는 PostgreSQL 보안의 핵심이다. scram-sha-256과 TLS를 기본으로 적용하고, 최소 권한 원칙을 지키면 대부분의 위험을 줄일 수 있다. 마지막으로 변경 시 충분한 테스트와 권한 감사를 병행하는 것이 안전한 운영으로 이어진다.