회사에서 개발하는 서비스의 DB 로 PostgreSQL 을 사용하고 있는데, Application 에서 바로 PostgreSQL 에 접근하는 것이 아니라 PgBouncer 를 사용하여 PostgreSQL 에 접근하고 있다.
Application 을 운영하면서 Application 의 DB 계정 정보, PgBouncer 의 pgbouncer.ini 와 userslist.txt 등을 보면서 여러가지 궁금증이 생겼다. Application 에서 PgBouncer 로 PostgreSQL 로 접근한다면 Application 에 설정된 계정 정보는 어떻게 사용되는건지, Pgbouncer 가 가지는 DB 정보와 중복되는 것인지, 둘 다 사용되는 것인지.
이러한 궁금증들을 해결하기 위해서 PgBouncer 의 auth_file 과 auth_type 에 대해서 공부한 내용을 정리해본다.
1. auth_file
- auth_file 이란?
auth_file 은 DB 사용자의 이름과 패스워드를 가지고 있는 파일의 경로를 지정하는 설정값이다. PgBouncer 는 auth_file 을 참조하여 클라이언트 (application) 인증을 수행한다. 대부분의 예제에서는 userlist.txt 라는 이름으로 파일명을 설정하지만 고정적인 것은 아니고 다른 파일명으로 auth_file 을 설정해도 된다.
PgBouncer 는 PostgreSQL 의 앞단에 위치하여 클라이언트가 PostgreSQL 에 접근할 때 PgBouncer 를 거치게 된다. 이 과정에서 PgBouncer 는 접근하는 클라이언트에 대한 1차적인 인증을 수행한다.
클라이언트가 접근하려는 DB 계정 정보 (username/password) 를 전달하면 PgBouncer 는 auth_file 을 조회하여 해당 사용자가 존재하는지 확인하고 auth_type 규칙에 따라 사용자 password 를 인증한다. 인증이 통과하면 PostgreSQL 연결을 시도한다. 만약 해당 사용자가 auth_file 에 존재하지 않거나 password 인증이 실패하면 PostgreSQL 연결이 실패한다.
- authentication file format
auth_file 은 아래와 같은 형식을 가진다.
"username" "password"
"postgres" "password1234"
password 의 형식은 auth_type 에 따라 평문이 될 수도 있고, md5 방식으로 인코딩 된 문자열일수도 있다. 자세한 내용은 다음 항목인 auth_type 에서 설명하겠다.
auth_file 은 pgbouncer.ini 에서 아래와 같이 파일 경로로 설정된다.
[pgbouncer]
auth_type = md5
auth_file = /etc/pgbouncer/userlist.txt # auth_file 경로를 작성
2. auth_type
auth_type 은 PgBouncer 가 auth_file 의 password 를 어떤 방식으로 해석하고 인증에 사용할지 결정하는 설정값이다.
| auth_type | 설명 |
| cert | 유효한 클라이언트 인증서를 사용하여 TLS 연결을 통해 연결을 해야한다. |
| md5 | MD5-based 방식으로 password 를 인증한다. 대부분 사용하는 인증 방법으로 auth_file 에 md5 암호와 일반 텍스트 암호를 모두 포함할 수 있다. |
| scram-sha-256 | SCRAM-SHA-256 방식으로 password 를 인증한다. auth_file 에 SCRAM secrets 또는 일반 텍스트 암호를 모두 포함할 수 있다. |
| trust | 클라이언트 사용자에 대한 인증을 하지 않는다. 하지만 auth_file 에 사용자 이름은 꼭 존재해야 한다. |
| any | trust 와 비슷하지만 클라이언트의 사용자 이름은 무시된다. 모든 DB 가 특정 사용자로 로그인하도록 구성되어 있어야 한다. DB 콘솔로 접속 시 admin 으로 로그인된다. |
| pam | 사용자 인증에 PAM 을 사용하며 auth_file 은 무시된다. |
| hba | auth_hba_file 에서 인증 정보를 로드하여 사용한다. |
auth_type 에 따라서 auth_file 의 password 형식도 변경된다.
[References]
- https://tmaxtibero.blog/5733-2/
- https://www.pgbouncer.org/config.html#authentication-settings
- https://www.pgbouncer.org/config.html#authentication-file-format
'Database | ORM > PostgreSQL' 카테고리의 다른 글
| [PostgreSQL] DB 백업 - pg_dump (0) | 2025.03.17 |
|---|