Audit Log 란?



audit log = 감사 로그는 기업 내에서 데이터베이스 규정 감사를 통해 보안 및 추적 상태를 개선하는데 사용합니다. 


'누가 데이터에 엑세스하거나 수정했는지?', '수정하거나 엑세스 한 시기는 언젠지?', '권한 있는 사용자가 수퍼 유저 권한을 남용하고 있는지?' 등등 이러한 질문에 대답하기 위해서는 CloudWatch 와 같이 외부 시스템에서 사용할 수 있도록 모니터링 하고 확인할 수 있는 시스템이 필요합니다.


이러한 데이터베이스 감사를 위해 Aurora에 audit log 를 활성화 하여 여러 이벤트에 대한 감사를 활성화 하는 방법에 대해 알아보도록 하겠습니다.



Audit Log 파일은 어디에 위치 하나요?


RDS MySQL 인스턴스에서 감사 로깅 플러그인을 활성화하면 로그 파일이 생성되어 RDS 인스턴스 자체에 저장됩니다. 
관리형 서비스로서의 RDS는 이를 허용하지 않는 RDS 인스턴스에 연결된 물리적 디스크에 대한 기본 액세스가 필요하므로 사용자 측에서 이 기본 임시 스토리지에 액세스할 수 없습니다. 
이러한 이유로 원래 쿼리에서 언급한 것처럼 콘솔에서 이러한 파일에 액세스할 수 있습니다.


Audit Log 가 수집되는 빈도는 어떻게 되나요?


"FILE 로깅을 활성화하면 1시간마다 로그 파일을 검사하고 24시간이 지난 로그 파일을 삭제합니다. 
경우에 따라 삭제 후 남은 로그 파일을 합친 크기가 DB 인스턴스 할당 공간의 2% 임계값을 초과할 수 있습니다. 
이러한 경우 로그 파일 크기가 더 이상 임계값을 초과하지 않을 때까지 가장 큰 로그 파일이 삭제됩니다." [1]

[1] Overview of MySQL database logs - MySQL slow query and general logs - 
https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_LogAccess.MySQL.LogFileSize.html#USER_LogAccess.MySQL.Generallog

따라서 수동으로 로그 파일을 삭제하실 필요가 없습니다 .


날짜 별로 Audit Log를 확인할 수 있나요?


여러 파일에서 이러한 항목을 정렬하고 날짜 순서 형식으로 가져오려면 해당 항목을 Cloudwatch로 해야 합니다. 
Cloudwatch에서 타임스탬프 값을 사용하여 날짜별로 정렬된 감사 로그를 볼 수 있습니다.

아래 문서에 따라 CloudWatch에 로그를 게시할 수 있습니다[2].


[2] Publishing database logs to Amazon CloudWatch Logs
https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_LogAccess.Procedural.UploadtoCloudWatch.html

CloudWatch에서 AWS 콘솔 --> Cloud Watch --> 로그 --> 로그 그룹으로 이동한 다음 인스턴스의 감사 로그를 찾을 수 있습니다. 
(ex.  /aws/rds/instance/{고객님의 인스턴스}/audit)

그런 다음 감사 로그의 세부 정보를 보려면 인스턴스를 선택하십시오. 
또한 필터를 사용하여 날짜와 시간을 지정한 다음 로그 파일을 다운로드할 수 있습니다.





Aurora mysql에서 Audit log 활성화 하기


? Aurora 가 아닌 단일 RDS 인스턴스에서 Audit log를 활성화 하는 방법은 맨아래 링크를 참고하여 주시길 바랍니다.


기본적으로 Aurora를 생성하시면 Audit log는 비활성화 상태로 생성됩니다.

Audit log를 활성화 하기 위해서는 Aurora cluster parameter group의 매개 변수 값을 수정해주셔야 합니다.


  1. Audit log가 비활성화 된 Aurora mysql 클러스터를 생성합니다.

    기본 Cluster parameter group 을 사용하는 Aurora mysql 을 생성합니다.

  2. Cluster parameter group의 매개 변수를 변경하기 위해 새로운 CPG 를 생성합니다.

    "audit-test" 이름의 사용자 지정 cluster parameter group을 생성합니다.



  3. 방금 생성한 새로운 Cluster Parameter group으로 변경해줍니다.
    [Modify] → [DB cluster parameter group]




    ⛔ 기본 파라미터 그룹에서 사용자 지정 파라미터 그룹으로 변경한 후, 변경 사항을 저장하기 위해서는 반드시 재부팅 해주셔야 합니다.

  4. Cluster Parameter group 에서 매개 변수 값을 변경합니다.

    Audit log를 활성화 하기 위해서는 "server_audit_logging" 매개 변수 값을 1 로 변경 해야 합니다.




  5. DB 인스턴스에서 audit log 가 생성되는 것을 확인 합니다.




    로그가 생성되지만 0bytes로 제대로 수집 되지 않는 것을 확인할 수 있습니다.


    로그를 제대로 수집하기 위해서는 어떤 이벤트의 로그를 수집할 것인지 지정해주어야 합니다.

    따라서 "server_audit_events" 의 값에 감사하고자 하는 이벤트를 입력합니다.



    ⛔ 이벤트는 모두 대문자로 지정해야 하며 목록 사이에 공백이 없어야 합니다.

  6. 변경 후 audit log 가 정상적으로 쌓이는 것을 확인합니다.



  7. Cloudwatch 로그 그룹에서 audit log를 확인할 수 있습니다.




로그 구성 및 확인하기



데이터베이스 활동을 캡처하도록 감사 로그 구성


Amazon Aurora MySQL에 여러 이벤트를 기록하려면 server_audit_eventsCONNECT, QUERY, TABLE, QUERY_DDL, QUERY_DMLQUERY_DCL로 사용하여 파라미터 그룹을 수정 하실 수 있습니다.

감사 옵션 구성은 Amazon RDS MySQL와 Amazon Aurora MySQL 모두에서 비슷합니다. 데이터베이스 활동은 기록 할 이벤트의 쉼표로 구분 된 목록을 포함하는 server_audit_events로 정의됩니다. 

목록 요소 사이에는 공백이 없어야 합니다. 


다음 이벤트의 조합을 기록 할 수 있습니다

  • CONNECT – Connection 성공, Connection 실패, 그리고 disconnections에 대한 로그. 이 값에는 사용자 정보가 포함됩니다.
  • QUERY – 구문 또는 권한 오류로 인해 실패한 쿼리를 포함하여 모든 쿼리 텍스트 및 쿼리 결과를 일반 텍스트로 기록합니다.
  • QUERY_DCL – QUERY와 유사하지만 DCL 타입 쿼리 (GRANT, REVOKE 등) 만 반환합니다.
  • QUERY_DDL – Query와 유사하지만 DDL 타입 쿼리 (CREATE, ALTER 등) 만 반환합니다.
  • QUERY_DML – Query와 유사하지만 DML 타입 쿼리 (INSERT, UPDATE 등) 만 반환합니다.
  • TABLE – 쿼리 실행의 영향을받은 테이블을 기록합니다. 이 옵션은 Amazon Aurora MySQL에 대한 고급 감사에서만 지원됩니다.


로그 확인하기


Amazon Aurora MySQL에서 고급 감사에 대한 로그를 확인하려면 다음 단계를 완료하십시오.

  1. Amazon RDS 콘솔에서”Databases”를 선택합니다.
  2. DB 인스턴스를 선택합니다.
  3. Logs”에서, 로그를 (audit/audit.log) 선택합니다.
  4. View”를 선택합니다.








주의할 점



audit log 와 관련된 모든 매개 변수는 클러스터 수중 매개 변수이며 DB 인스턴스 매개 변수 그룹에는 없습니다.

또한 매개 변수 "server_audit_logging" 은 dynamic 매개 변수로 재부팅 할 필요가 없습니다.

자세한 내용은 아래 AWS 블로그 게시물을 참고해주시길 바랍니다.

Amazon RDS MySQL 및 Amazon Aurora for MySQL에 대한 데이터베이스 활동에 대한 감사 로그 구성 | Amazon Web Services