본문으로 건너뛰기

기계 번역입니다. 정식 기준은 영어판이며, 원어민 검수는 아직 완료되지 않았습니다.

가이드

PostgreSQL (pgaudit) 연결

pgAudit를 통한 PostgreSQL 데이터베이스 접근 관찰을 위한 심층 커넥터별 가이드 — 로그 형식 설정, 스트리밍 수집, 귀속, 생성되는 접근 맵 에지

마지막 업데이트:

pgAudit 커넥터는 PostgreSQL의 구조화된 감사 로그를 테일링하고 감사된 데이터 접근당 하나의 접근 맵 에지를 출력합니다. 읽기/쓰기 모드는 pgAudit의 클래스(READ, WRITE, DDL)에서 그대로 가져옵니다 — SQL 텍스트에서 추론되지 않습니다. 커넥터는 로그 파일에 대해 읽기 전용이며 데이터베이스에 연결을 열지 않습니다.

일반적인 소스 모델과 구성 구조는 소스 연결부터 시작하세요. 이 페이지는 PostgreSQL 측 전제 조건, 전체 구성 표면, 귀속 메커니즘, 프로덕션 환경을 위한 운영 고려 사항을 다룹니다.

PostgreSQL 전제 조건

커넥터는 pgAudit 출력을 읽으므로, PostgreSQL이 이를 생성하도록 구성되어야 합니다. 확장을 설치하고(apt install postgresql-<version>-pgaudit, Debian/Ubuntu), shared_preload_libraries를 통해 로드하고, 재시작한 다음, 관찰하려는 각 데이터베이스에서 CREATE EXTENSION pgaudit를 실행하세요.

유용한 출력을 위한 최소 postgresql.conf 설정:

shared_preload_libraries = 'pgaudit'
pgaudit.log = 'read, write'       # READ와 WRITE가 데이터 접근을 커버
log_destination = 'jsonlog'        # 스트리밍에 권장; csvlog도 가능
logging_collector = on
log_directory = '/var/log/postgresql'
log_filename = 'postgresql.json'

shared_preload_libraries 후 재시작; 나머지 후 리로드(SELECT pg_reload_conf()). 쿼리를 실행하고 로그에 pgAudit 항목이 나타나는지 확인하세요 — 항목의 message 필드에 pgAudit 구조화된 라인(클래스, 명령, 객체 이름)이 포함됩니다. 표준 PostgreSQL 메시지만 나타나면 확장이 로드되지 않았거나 구성되지 않은 것입니다.

구성

커넥터는 OLIVARES_SOURCES_CONFIG JSON 파일에서 kind: "pgaudit"로 선택합니다. 전체 예시:

{
  "sources": [
    {
      "name": "prod-postgres",
      "kind": "pgaudit",
      "tenant": "acme",
      "config": {
        "log_path": "/var/log/postgresql/postgresql.json",
        "format": "jsonlog",
        "follow": "true",
        "shared_accounts": "app_pool,reporting"
      }
    }
  ]
}

모든 config 값은 문자열입니다. 키는 pgAudit 커넥터가 소유합니다:

  • log_path (필수) — PostgreSQL 로그 파일의 절대 경로. 커넥터는 이 파일을 읽습니다; 관례에 따라 로그 파일을 발견하지 않습니다.
  • formatcsvlog 또는 jsonlog. 기본값은 csvlog. 커넥터가 사용하는 파서를 제어합니다; PostgreSQL이 실제로 쓰고 있는 log_destination과 일치해야 합니다.
  • follow"true"일 때 파일을 연속으로 테일합니다(스트리밍 모드). jsonlog에만 적용됩니다. csvlog 파일은 CSV 레코드가 줄바꿈을 넘을 수 있어 스트리밍 테일이 안정적이지 않으므로 배치로 읽힙니다. 아래 배치 vs 스트리밍을 참조하세요.
  • shared_accounts — 여러 호출자 간 풀링되거나 공유된 PostgreSQL 역할 또는 application_name 값의 쉼표로 구분된 목록. 이 중 하나에 귀속된 접근은 의도적으로 approximate로 표시됩니다. 아래 귀속과 공유 계정을 참조하세요.

이 네 가지 외에 구성 키를 만들어내지 마세요. 커넥터의 구성 표면은 의도적으로 좁습니다 — 로그 파일을 읽으며, PostgreSQL을 관리하지 않습니다.

귀속과 공유 계정

접근 맵은 “어떤 에이전트가 이것을 했는가”에 답해야 합니다. pgAudit 로그 항목은 PostgreSQL 역할(사용자)과, 설정된 경우 세션의 application_name을 가집니다. 커넥터는 둘 다 사용하여 에지의 출발점을 구축합니다.

에이전트별 신원이 firm 에지를 얻습니다. 각 에이전트가 연결에 고유한 application_name을 설정하거나(또는 전용 역할을 사용하면) 커넥터는 각 접근을 명확하게 귀속시키고 에지는 firm입니다.

공유 역할은 approximate로 축소됩니다. 여러 에이전트가 커넥션 풀, 공통 서비스 계정, 또는 일반적인 application_name을 공유하면 커넥터는 호출자를 분리할 수 없습니다. 해당 신원을 통한 모든 접근은 approximate로 표시되며, 제품은 구분할 수 없는 에이전트를 구분할 수 있는 척하지 않고 공개적으로 그렇게 말합니다. shared_accounts가 존재하는 이유입니다: 풀링된 신원을 미리 선언하면 커넥터가 즉시 approximate로 표시합니다.

거버넌스 함의는 직접적입니다: approximate 에지는 확고한 최소 권한 발견을 지원할 수 없습니다. 데이터베이스 접근에 대한 에이전트별 거버넌스가 필요하면 에이전트별 자격증명이나 application_name 값을 발급하세요. 전체 귀속 모델은 충실도를 참조하세요.

커버리지 계층

pgAudit는 clean 커버리지입니다. READ, WRITE, DDL 클래스는 권위적입니다 — PostgreSQL의 감사 하위 시스템이 문을 분류하며, 커넥터는 해당 분류를 그대로 가져옵니다. 추론, SQL 파싱, 휴리스틱이 없습니다.

에지의 modeR (읽기), RW (readwrite, WRITE 및 DDL 클래스), 또는 클래스가 지시하는 대로입니다. 커넥터는 pgAudit가 보고한 것을 업그레이드하거나 다운그레이드하지 않습니다. clean이 lossy 및 opaque 소스와 어떻게 비교되는지는 충실도 — 커버리지를 참조하세요.

배치 vs 스트리밍

  • csvlog — 배치. CSV 레코드는 줄바꿈을 넘을 수 있으므로(내장된 줄바꿈이 있는 쿼리는 다중 라인 행을 생성) 스트리밍 테일이 레코드를 안정적으로 분리할 수 없습니다. 커넥터는 파일을 완전한 배치로 읽습니다; 소스 항목에 poll_seconds를 설정하여 간격으로 다시 실행하세요.
  • jsonlogfollow: "true" — 스트리밍. 각 JSON 항목은 단일 라인이므로 테일이 안전합니다. 커넥터는 파일을 열어둔 채로 PostgreSQL이 쓰는 대로 에지를 출력합니다.

근실시간 에지를 위해서는 jsonlogfollow가 권장 구성입니다. 주기적 감사나 낮은 볼륨 데이터베이스에는 csvlog 배치로 충분합니다.

에지의 모습

커넥터가 파싱하는 각 pgAudit 로그 항목은 다음 필드를 가진 하나의 접근 맵 에지를 생성합니다:

  • 출발점application_name이 있을 때 이로 한정된 PostgreSQL 역할. 예: reporting_agent 또는 app_pool/invoice-service.
  • 리소스 — 완전 한정 객체: database.schema.table. 예: prod.public.orders.
  • 모드R (pgAudit 클래스 READ에서) 또는 RW (pgAudit 클래스 WRITE 또는 DDL에서).
  • 귀속 — 출발점이 단일 에이전트 신원으로 해결되면 firm, shared_accounts 항목과 일치하거나 구분할 수 없으면 approximate.
  • 소스 — 이 커넥터 인스턴스를 이름으로 식별.

에지에는 SQL 텍스트, 행 데이터, 쿼리 매개변수가 포함되지 않습니다. 신원이 주어진 모드로 객체에 접근했다는 구조적 사실만 기록합니다.

운영 참고사항

로그 로테이션. PostgreSQL이 로그 파일을 로테이션할 때(log_rotation_age 또는 log_rotation_size를 통해), 커넥터가 현재 파일을 가리켜야 합니다. 로테이션이 활성 파일 이름을 변경하면, follow 테일은 이전 파일 디스크립터가 소진될 때까지 계속 읽고 멈춥니다. log_path를 안정적인 심볼릭 링크에 가리키거나 커넥터가 따를 수 있는 이름 규칙을 사용하세요. 커넥터 자체가 로테이션을 관리하지 않습니다.

고볼륨 환경. pgAudit는 특히 pgaudit.log = 'all'로 바쁜 데이터베이스에서 상당한 로그 볼륨을 생성할 수 있습니다. pgaudit.log를 필요한 클래스(일반적으로 read, write)로 범위를 지정하고, 커버리지를 잃지 않으면서 노이즈를 줄이기 위해 pgaudit.log_relation을 통한 데이터베이스별 또는 역할별 필터링을 고려하세요.

다중 PostgreSQL 인스턴스. 각 인스턴스는 OLIVARES_SOURCES_CONFIG에서 고유한 name과 자체 log_path를 가진 별도의 소스 항목이 필요합니다. 다중 인스턴스 발견은 없습니다 — 각 소스는 정확히 하나의 로그 파일을 감시합니다.

권한. 수집기 프로세스는 PostgreSQL 로그 파일에 대한 읽기 접근이 필요합니다. 데이터베이스 연결, PostgreSQL 역할, 데이터베이스 서버에 대한 네트워크 접근은 필요하지 않습니다. 파일 시스템 읽기 권한만 유일한 요구 사항입니다.

관련 항목

문서 검색