Last Updated on 6월 13, 2023 by Jade(정현호)
안녕하세요
이번 포스팅에서는 AWS Aurora MySQL 과 RDS for MySQL 환경에서 Audit(감사 로깅 기능) 기능을 활성화 하는 내용에 대해서 살펴보려고 합니다.
포스팅에서 사용한 버전
- Aurora MySQL : 8.0.mysql_aurora.3.02.2
- RDS for MySQL : 8.0.28
RDS for MySQL
RDS for MySQL은 옵션 그룹이라는 기능을 제공하며 옵션 그룹에서 MariaDB Audit Plugin 을 통해서 Audit 기능을 사용할 수 있습니다.
RDS for MySQL 과 Aurora MySQL은 Audit 을 구성하는 방법이나 설정 방법이 다르며, Aurora MySQL 에 대한 내한 내용은 아래 다음 챕터에 내용이 있습니다.
RDS for MySQL 8.0 버전 기준에서는 RDS for MySQL 8.0.25 버전 부터 MariaDB 감사 플러그인을 사용할 수 있기 때문에, RDS for MySQL 8.0 버전에서 Audit 기능을 활성화가 필요한 경우 8.0.25 버전 이상을 사용해야 합니다.
옵션 그룹 생성
먼저 옵션 그룹 생성이 필요 합니다.
AWS RDS 대시보드 -> 옵션 그룹(option groups) 으로 이동 한 다음 오른쪽 상단의 “그룹 생성(Create Group)” 을 클릭 합니다.
옵션 그룹 이름을 입력하고 엔진과 버전을 선택 후 하단의 Create(생성)을 클릭 합니다.
옵션 그룹내 Audit 설정
이전 단계에서 생성한 옵션 그룹에서 Audit 기능을 설정 하도록 하겠습니다.
생성한 Option Group 을 선택(클릭) 합니다.
중간에 보이는 Options(옵션) -> Add option(옵션 추가) 를 선택 합니다.
옵션 이름에서 "MARIADB_AUDIT_PLUGIN" 을 선택 후에 아래 옵션 설정 부분에서 톱니바퀴 버튼을 클릭(선택) 합니다.
설정을 한번에 보기 위해서 Page size(페이지 크기)에서 20 resources 로 선택 후에 하단의 Continue(계속) 버튼을 클릭 합니다.
옵션에 값을 입력하여 설정하는 단계 이며, 여러 옵션 중에서 4가지 정도 설정 하면 됩니다.
- SERVER_AUDIT_EXCL_USERS : 로깅하지 않을 유저를 입력하면 됩니다. 서비스 애플리케이션 유저의 경우 Audit 로깅을 보통 하지 않는 경우가 많으며, 운영 정책에서 로깅하지 않아도 되는 유저에 대해서는 여기 항목에서 유저명을 기입 합니다.
필수적으로 제외할 유저로는 rdsadmin 이 있으며 Percona PMM 모니터링 툴을 사용중이라면 해당 유저도 제외 해야 할 것 입니다. ( rdsadmin,pmm ) - SERVER_AUDIT_EVENTS : 로깅할 쿼리의 대상 종류를 의미 합니다.
- QUERY_DML_NO_SELECT: QUERY_DML이벤트와 유사하지만 SELECT 쿼리를 로깅하지 않습니다.
- SERVER_AUDIT_FILE_ROTATE_SIZE : Audit 로그 파일의 교체(Rotate)시 기준 파일 크기 입니다.
- SERVER_AUDIT_QUERY_LOG_LIMIT : Audit 으로 감사(로깅)할 쿼리의 길이 limit(제한) 입니다.
- SERVER_AUDIT_FILE_ROTATIONS : Audit 로그를 Rotate 하여 저장할 때 저장할 파일 수를 지정 하는 옵션으로, 0 으로 설정하면 로그가 rotate 되지 않습니다. (기본값 : 9 , 범위 0 ~ 100)
아래 이미지와 같이 정책을 설정 합니다. 설정이 완료 되었다면, 즉시 적용 항목에서 YES 을 선택 후에 Add option(옵션 추가) 버튼을 클릭 합니다.
[참고1] 모든 쉼표 뒤의 공백은 허용 되지 않습니다.
[참고2] RDS 에서 사용하는 Maria Audit Plugin의 경우 Include or Exclude 유저명 입력시 @host(또는 ip 대역대) 정보를 입력하지 않습니다. 즉, 유저명만 ,(콤마)로 구분하여 입력 합니다.
하지만 설치형 MySQL 에서 사용하는 Percona Audit Plugin 에서는 유저명@host(또는 IP대역) 형식으로 입력 해서 사용 합니다.
[참고3] server_audit_excl_users 와 server_audit_incl_users 에 동일한 유저가 같이 설정되어있을 경우 server_audit_incl_users가 우선순위가 높음에 따라서 유저의 활동 정보가 기록됩니다.
[참고4] CONNECT 이벤트는 server_audit_excl_users 와 server_audit_incl_users 상관없이 모든 사용자에 대해서 기록합니다.
RDS에서 option group 선택 및 Audit 로그
RDS 에서 option group(옵션 그룹) 을 선택 하는 것은 생성시에도 가능하고, 생성 이후 인스턴스 변경을 통해서도 가능 합니다.
사용중인 RDS for MySQL 에서 옵션 그룹을 변경 시에는 인스턴스의 재시작을 하지 않아도 되지만, 사용 중인 (Audit이 설정된) 옵션 그룹에서 원래대로인 Default 옵션으로 변경시에 RDS 인스턴스의 재시작이 발생하게 됩니다.
Audit 설정이 완료 되었다면 Logs & events 탭에서 로그 항목에서 확인 할 수 있으며 파일명은 audit/server_audit.log 입니다.
옵션 그룹 수정
생성하여 사용중인 옵션 그룹에서 정책의 변경이나 exclude user 추가 등과 같은 기존 설정의 변경이 필요할 경우 옵션 그룹 수정을 통해서 진행 할 수 있습니다.
RDS 메뉴 -> Option groups -> 수정할 옵션 그룹 체크(선택) -> Modify option 버튼 클릭
Aurora MySQL
Aurora MySQL 에서는 Audit 설정을 RDS for MySQL 과는 달리 파라미터 그룹에서 설정 합니다.
Audit 관련 설정은 Cluster DB Parameter 에서 설정할 수 있으며 클러스터 DB 파라미터 그룹으로 이동 하는 방법은 여러가지가 있습니다.
보통적으로 RDS 메뉴 -> Aurora Cluster 선택 -> Configuration(구성) -> DB cluster parameter group(클러스터 파라미터 그룹) 선택 순으로 이동 할 수 있습니다.
클러스터 파라미터로 이동 후 아래 이미지와 같이 audit 으로 검색되는 파라미터를 수정하면 됩니다.
각 파라미터의 의미는 RDS for MySQL 에서의 정책 내용과 동일 합니다.
Aurora MySQL 의 경우 기본적으로 Audit이 활성화가 되어있기 때문에 exclude_user에 rdsadmin 과 같이 복제를 위한 내부 기본 유저 등록이나 로깅할 종류 등을 설정하면 됩니다.
아래 이미지 처럼 3개의 파라미터 정도를 수정을 하고 변경 사항을 저장 합니다.
기본적으로 CloudWatch 로 로그를 업로드 하는 기능은 비활성화(0) 입니다.
CloudWatch 로 로그를 업로드 하기 위해서는 1(활성화) 를 선택 해야 합니다.
생성된 Audit 로그를 확인 하기 위해서는 클러스터내 인스턴스 별로 확인 하시면 됩니다.
이번 포스팅은 RDS for MySQL 과 Aurora MySQL 에서의 Audit 기능에 대해서 간단하게 살펴보았으며 여기서 글을 마무리 하도록 하겠습니다.
Reference
Reference URL
• amazon.com/ko/supports-audit-plugin
연관된 다른 글
Principal DBA(MySQL, AWS Aurora, Oracle)
핀테크 서비스인 핀다에서 데이터베이스를 운영하고 있어요(at finda.co.kr)
Previous - 당근마켓, 위메프, Oracle Korea ACS / Fedora Kor UserGroup 운영중
Database 외에도 NoSQL , Linux , Python, Cloud, Http/PHP CGI 등에도 관심이 있습니다
purityboy83@gmail.com / admin@hoing.io