안녕하세요, AgensSQL 사용자 여러분! 오늘은 AgensSQL의 감사(Audit) 기능에 대해 알아보고자 합니다. 감사 로그는 시스템 운영 및 사용을 추적하기 위해 모든 변경 사항을 자세히 기록하는 것으로, 데이터 보호와 운영 효율성을 극대화하는 데 매우 중요한 역할을 합니다.
1. 감사 로그 (Audit Log)란?
감사 로그는 시스템의 모든 활동과 관련된 자세한 기록을 제공합니다. 시스템 액세스의 출처를 식별하기 위한 터미널 ID와 사용자 ID, 액세스 시간 정보, 액세스 대상 네트워크, 액세스 정보, 액세스 대상 파일, 적용 변경 사항, 유틸리티 사용 현황, 보안 이벤트, 시스템 알림 등으로 구성됩니다.
2. AgensSQL의 감사 기능
AgensSQL은 PostgreSQL 기반으로 만들어진 데이터베이스로, PostgreSQL Audit Extension인 pgaudit을 활용하여 자세한 세션 및/또는 객체 감사 로깅을 제공합니다. 표준 로깅 기능인 log_statement = all은 모니터링 및 기타 용도에는 적합하지만 감사에 필요한 세부 수준을 제공하지 않습니다. 따라서 pgaudit을 통해 PostgreSQL 사용자에게 정부, 금융 또는 ISO 인증을 준수하는 데 종종 필요한 감사 로그를 생성하는 기능을 제공합니다.
3. 감사 기능의 필요성
1) 규정 준수
규정 준수 프레임워크(PHI DDS / HIPAA 등)로 관리되는 업계 내에 속한 조직의 경우 감사 로그는 필수 사항입니다. 감사 로그는 공식적 비즈니스 기록으로 사용되며 IT 시스템을 검사 및 승인하는데 필수적입니다. 이로 인해 문제가 발생했을 시 책임 소재를 명확히 할 수 있어서 필수한 요소로 작용합니다.
2) 보안 강화
감사 로그는 시스템 내의 모든 활동과 관련된 자세한 기록을 제공하여 표준 활동 이외의 데이터 보안 위반 또는 무단 액세스를 시도하는 외부 위협에 대한 보안 증거를 확보합니다. 이를 통해 잠재적인 보안 취약점을 찾거나 데이터 오용을 식별 및 해결하며 긴급 보안 이벤트에 신속하게 대응할 수 있습니다.
3) 통찰력 확보
감사 로그는 사용자가 시스템과 상호 작용하는 방식을 이해할 수 있는 가이드를 제공합니다. 사용자 활동 추적을 통해 성능, 생산성, 효율성에 대한 통찰을 얻을 수 있으며, 동시에 통제 불능 상태가 될 수 있는 문제를 보다 신속하게 파악하고 해결할 수 있습니다.
4) 위험 관리
명확한 감사 추적 기능은 조직이 데이터 보호를 보장하기 위해 어떤 보안 조치를 취하는지에 대한 증거가 됩니다. 감사 로그를 위험 관리 프레임워크로 사용 시 특정 비즈니스가 위험이 적은 기회임을 입증하는데 도움이 됩니다.
4.AgensSQL의 감사 기능 상세
1) 감사 로그 포맷
AgensSQL 감사기능은 이벤트를 로그로 기록합니다. 로그 형식은 CSV(쉼표로 구분된 값) 형태로 제공되어 쉽게 분석할 수 있습니다.
2) 감사 이벤트
AgensSQL 감사기능은 다양한 이벤트를 감사할 수 있습니다. 예를 들어, 특정 테이블의
SELECT, INSERT, UPDATE, DELETE 등의 데이터베이스 작업을 기록할 수 있습니다.
또한 특정 사용자의 접속, 접속 실패, 데이터베이스 오브젝트 생성 등과 같은 데이터베이스
관리 작업도 기록할 수 있습니다.
3) 로그 파일 위치
AgensSQL 감사기능은 기본적으로 AgensSQL의 로그 디렉터리에 저장됩니다. 로그 위치는
log_directory 설정으로 변경 가능합니다.
4) AgensSQL 감사기능의 필터링
필요한 경우, 특정 이벤트만을 기록하도록 필터링할 수 있습니다. 예를 들어, 특정 테이블이나
사용자 등의 필터를 설정하여 로그 크기를 줄일 수 있습니다.
5) 로그 분석
AgensSQL 감사기능은 로그를 적절히 분석하면 데이터베이스 사용 패턴, 보안 이슈, 오류
등을 식별할 수 있습니다. 데이터베이스 감사 로그는 데이터베이스 보안 감사(Auditing) 및
규정 준수에 중요한 역할을 합니다.
6) Audit setting
Setting
|
Description
|
Detail
|
Default
|
pgaudit.log
|
세션 감사 로깅에 의해 기록될 문의 클래스를 지정합니다.
|
가능한 값은 다음과 같습니다.
READ: 소스가 테이블 또는 쿼리인 경우 SELECT 및 COPY. WRITE: 대상이 테이블인 경우 INSERT, UPDATE, DELETE, TRUNCATE 및 COPY. FUNCTION: 함수 호출 및 DO 블록. ROLE: 역할 및 권한과 관련된 명령문; GRANT, REVOKE, CREATE/ALTER/DROP ROLE. DDL: ROLE 클래스에 포함되지 않은 모든 DDL. MISC: 기타 명령; e.g. DISCARD, FETCH, CHECKPOINT, VACUUM, SET. MISC_SET: 기타 SET 명령; e.g. SET ROLE. ALL: 위의 모든 항목을 포함 쉼표로 구분된 목록을 사용하여 여러 클래스를 제공할 수 있으며 클래스 앞에 - 기호를 추가하여 클래스를 뺄 수 있습니다. |
x
|
pgaudit.log_catalog
|
문의 모든 테이블이 pg_catalog에 있는 경우 세션 로깅을 활성화하도록 지정합니다.
|
이 설정을 비활성화하면 카탈로그를 많이 쿼리하는 psql 및 PgAdmin과 같은 도구에서 로그의 노이즈가 줄어듭니다.
|
on
|
pgaudit.log_client
|
로그 메시지가 psql과 같은 클라이언트 프로세스에 표시되는지 여부를 지정합니다.
|
이 설정은 일반적으로 비활성화된 상태로 두어야 하지만 디버깅 또는 기타 목적에 유용할 수 있습니다.
|
off
|
pgaudit.log_level
|
로그 항목에 사용할 로그 수준을 지정합니다.
|
ERROR, FATAL 및 PANIC은 허용되지 않습니다. 이 설정은 회귀 테스트에 사용되며 테스트 또는 기타 목적을 위해 최종 사용자에게 유용할 수 있습니다.
pgaudit.log_client가 켜져 있을 때만 활성화되며 평소에는 기본값이 사용됩니다. |
log
|
pgaudit.log_parameter
|
명령문과 함께 전달된 매개변수를 감사 로깅에 포함하도록 지정합니다.
|
매개변수가 있으면 명령문 텍스트 뒤에 CSV 형식으로 포함됩니다.
|
off
|
pgaudit.log_parameter_max_size
|
이 설정(바이트)보다 긴 매개변수 값이 기록되지 않고 <long param suppressed>으로 대체되도록 지정합니다.
|
이는 문자가 아닌 바이트로 설정되므로 텍스트 매개변수의 인코딩에서 멀티바이트 문자를 고려하지 않습니다. 이 설정은 log_parameter가 꺼져 있으면 영향을 주지 않습니다.
이 설정이 0(기본값)이면 길이에 관계없이 모든 매개변수가 기록됩니다. |
0
|
pgaudit.log_relation
|
세션 감사 로깅이 SELECT 또는 DML 문에서 참조되는 각 테이블(TABLE, VIEW 등)에 대해 별도의 로그 항목을 생성해야 하는지 여부를 지정합니다.
|
이는 객체 감사 로깅을 사용하지 않고 철저한 로깅을 수행하는 데 유용한 바로 가기입니다.
|
off
|
pgaudit.log_rows
|
문에 의해 검색되거나 영향을 받는 행이 감사 로깅에 포함되어야 함을 지정합니다.
|
활성화되면 행 필드가 매개변수 필드 뒤에 포함됩니다.
|
off
|
pgaudit.log_statement
|
로깅에 명령문 텍스트와 매개변수(활성화된 경우)를 포함할지 여부를 지정합니다.
|
요구 사항에 따라 감사 로그에 이것이 필요하지 않을 수 있으며 로그가 덜 장황해집니다.
|
off
|
pgaudit.log_statement_once
|
로깅에 명령문/하위 명령문 조합의 첫 번째 로그 항목 또는 모든 항목과 함께 명령문 텍스트 및 매개변수가 포함될지 여부를 지정합니다.
|
설정을 비활성화하면 자세한 로깅이 줄어들지만 로그 항목을 생성한 명령문을 확인하기가 더 어려워질 수 있습니다. 프로세스 ID와 함께 명령문/하위 명령문 쌍이 이전 항목으로 기록된 명령문 텍스트를 식별하는 데 충분해야 합니다.
|
off
|
pgaudit.role
|
객체 감사 로깅에 사용할 마스터 역할을 지정합니다.
|
마스터 역할에 권한을 부여하여 여러 감사 역할을 정의할 수 있습니다. 이를 통해 여러 그룹이 감사 로깅의 다양한 측면을 담당할 수 있습니다.
|
x
|
5. 사용시 고려사항 및 주의사항
AgensSQL의 감사 기능을 사용할 때에는 몇 가지 고려사항과 주의사항을 염두에 두어야 합니다.
- 설정에 따라 많은 양의 로깅을 생성할 수 있습니다. 따라서 감사 로깅이 필요한 항목을 정확히 결정하고 적절하게 설정해야 합니다.
- 로그는 일반적으로 운영체제와 함께 저장되기 때문에 디스크 공간을 빠르게 소모할 수 있습니다. 따라서 디스크 공간을 충분히 확보하고 로그를 주기적으로 정리하는 것이 중요합니다.
- 감사 로깅을 특정 테이블로 제한할 수 없는 경우, 테스트 동안 성능 영향을 평가하고 로그 볼륨에 충분한 공간을 할당해야 합니다. 감사 로깅의 성능 영향은 높지 않더라도 대기 시간에 미치는 영향을 고려해야 합니다.
- SELECT 및 DML 문에 대해 기록되는 관계 감사의 수를 제한하려면 객체 감사 로깅을 사용할 수 있습니다. 이를 통해 전체 로그 볼륨을 줄이고 새 관계가 추가될 때마다 명시적으로 로깅 설정을 추가해야 하는 번거로움을 피할 수 있습니다.
- 객체 이름 변경시 객체 이름은 변경된 이름으로 기록됩니다.
- 명령이 두 번 이상 기록될 수 있으므로 이 점을 유의해야 합니다.
- Autovacuum 및 Autoanalyze는 기록되지 않습니다.
- 수퍼유저를 안정적으로 감사할 수 없으므로 수퍼유저 계정에 대한 액세스를 제한하고 필요한 경우 set_user 확장을 사용하여 권한을 에스컬레이션하는 것이 좋습니다.
AgensSQL의 감사 기능을 올바르게 활용하면 데이터 보호와 운영 효율성을 극대화할 수 있습니다. 적절한 설정과 주의를 기울여서 감사 로그를 관리해 주시기 바랍니다. 감사 기능을 통해 더욱 안전한 데이터베이스 운영을 실현해 보세요! 감사합니다.
글 : 김보생 팀장 ( 비트나인 Product기획팀 )
'DBMS > AgensSQL' 카테고리의 다른 글
AgensSQL 및 관련 제품군 소개 (0) | 2023.09.02 |
---|---|
PostgreSQL, 꼭 배워야 하나요? ChatGPT로 SQL 없이 AgensSQL 데이터베이스 사용하기 (0) | 2023.08.29 |
PostgreSQL 전문성의 집약체, AgensSQL for Postgres (0) | 2023.05.04 |
기업 데이터베이스 환경에서 고가용성(HA)은 왜 중요한가 : 오픈소스 DB PostgreSQL (0) | 2023.02.13 |
기업 데이터 환경에 PostgreSQL이 최적인 이유 (2) | 2022.06.23 |