Amazon Web Services 한국 블로그
Amazon RDS MySQL 및 Amazon Aurora for MySQL에 대한 데이터베이스 활동에 대한 감사 로그 구성
기업 내에서 Well-Architected 프레임워크를 따르고 프로비저닝하는지 확인하기위해 데이터베이스 규정 감사를 통해 보안 및 추적 상태를 개선합니다. 보안 팀과 데이터베이스 관리자는 종종 데이터베이스의 데이터 또는 메타 데이터에 대한 액세스 및 수정 패턴에 대한 심도있는 분석을 수행합니다.
규정 감사를 위해 다음 질문을 제기 할 수 있습니다:
- 누가 데이터에 액세스하거나 수정 했습니까?
- 데이터에 액세스하거나 수정 한시기는 언제입니까?
- 특정 사용자가 데이터에 액세스하는 방법은 무엇입니까?
- 변경이 이루어지기 전에 데이터베이스 테이블에 대한 변경이 승인 되었습니까?
- 권한있는 사용자가 수퍼 유저 권한을 남용하고 있습니까?
규정 감사 중에 이러한 종류의 질문에 답하려면 조직에 Amazon CloudWatch와 같이 외부 시스템에서 사용할 수있는 형식으로 충분한 데이터 로깅이 있는지 모니터링하고 확인하는 시스템이 있어야합니다. 데이터베이스 감사를 위해 Amazon RDS MySQL는 MariaDB 감사 플러그인을 지원하고 Amazon Aurora MySQL은 고급 감사를 지원합니다:
QUERY_DML
과 같은 단일 이벤트에 대한 감사 활성화CONNECT
,QUERY
등과 같은 여러 이벤트에 대한 감사 활성화.
전제 조건
시작하기 전에 다음 전제 조건을 완료했는지 확인하십시오:
- 다음 AWS CloudFormation 템플릿 중 하나를 사용하여 데이터베이스 인스턴스를 생성합니다:
- Amazon RDS for MySQL
- Amazon Aurora for MySQL
리소스를 수동으로 생성 할 때와 마찬가지로 CloudFormation 템플릿을 사용할 때 생성 된 모든 AWS 리소스 (예 : Amazon RDS MySQL및 CloudWatch)에 대한 비용을 지불해야합니다.
AWS Management Console에서 Amazon RDS MySQL또는 Amazon Aurora MySQL 용 데이터베이스를 생성하는 방법에 대한 지침은 “ DB 인스턴스 생성” 또는 “DB 클러스터 생성 및 Aurora MySQL DB 클러스터의 데이터베이스에 연결” 단원을 참조하십시오.
- Amazon RDS MySQL를 사용하는 경우 사용자 지정 옵션 그룹을 생성하여 MARIADB_AUDIT_PLUGIN을 선택하거나 Amazon Aurora MySQL을 사용하는 경우 사용자 지정 파라미터 그룹을 생성합니다.
- MySQL 클라이언트를 사용하여 DB 인스턴스에 연결합니다.
Amazon RDS MySQL에 대한 MariaDB 감사 플러그인 켜기
Amazon RDS MySQL의 경우 기본 옵션 그룹에 감사 구성이 활성화되어 있지 않습니다. 기본 설정은 변경할 수 없습니다; 인스턴스를 변경하려면, 사용자 지정 옵션 그룹을 생성하고 옵션을 추가 해야 합니다..
- Amazon RDS 콘솔에서, “Option groups”을 선택합니다.
- “Create option group”을 선택합니다.
- Name에 이름을 입력합니다 (예 : custom-option-group-mysql).
- Description에 설명을 입력합니다.
- Engine에서 mysql을 선택합니다.
- Major Engine Version에 대해서, 원하는 엔진 버전을 선택합니다 (이 문서에서는, 5.7).
- Create을 선택합니다.
- “Option groups” 페이지에서 옵션 그룹을 선택하고 “Add option”을 선택합니다.
- “Option name”에서 ,
MARIADB_AUDIT_PLUGIN
선택합니다.
- “Option settings” 섹션에서 원하는 옵션의 매개 변수 값을 수정합니다.
- “Apply Immediately”에서 Yes를 선택합니다.
설정을 즉시 적용하도록 선택하면 다운 타임이 필요하지 않습니다. - “Add option” 선택합니다.
이제 이 옵션 그룹을 기존 Amazon RDS for MySQL 인스턴스와 연결합니다.
- Amazon RDS 콘솔에서 인스턴스를 선택합니다.
- “Actions” 메뉴에서 “Modify” 선택합니다.
- “Database options” 섹션의 “Option group”에서 위에서 생성한 그룹을 선택합니다.
- 수정 사항 적용에 대해 “Apply immediately” 즉시 적용을 선택하여 예기치 않은 다운 타임을 방지합니다.
- “Modify DB instance” 선택합니다.
인스턴스가 다시 시작되면 MariaDB 감사 플러그인을 성공적으로 켠 것입니다. - 감사 플러그인 상태를 확인하려면 MySQL 명령 줄에서 다음 쿼리를 실행합니다
mysql> show global variables like '%server_audit_logging%'; +----------------------+-------+ | Variable_name | Value | +----------------------+-------+ | server_audit_logging | ON | +----------------------+-------+
전역 변수에 대한 자세한 내용은 SHOW VARIABLES Statement를 참조바랍니다.
Amazon Aurora MySQL에서 고급 감사 켜기
Amazon Aurora MySQL에서 고급 감사를 활성화하려면, 사용자DB 클러스터 파라미터 그룹이 없는 경우 먼저 생성해야합니다.
- Amazon RDS 콘솔에서 “Parameter groups”를 선택합니다.
- “Create parameter group”을 선택합니다.
- “Parameter group family”에서
aurora-mysql5.7
을 선택합니다. - “Group name”에 이름을 입력합니다 (예 :
aurora-db-cluster-57
). - “Create”를 선택합니다.
이제 DB 클러스터 파라미터 그룹을 기존 Amazon RDS MySQL 인스턴스와 연결합니다. - Amazon RDS 콘솔에서, 인스턴스를 선택합니다.
- “Action” 메뉴에서 “Modify”를 선택합니다.
- “Additional configuration”의 “DB cluster parameter group” 항목에 이전에 생성 한 파라미터 그룹을 선택합니다.
- “When to apply modifications”에서 “Immediately”를 선택하여, 다음 유지 관리 기간까지 기다리지 않도록합니다.
변경 사항을 적용하면 즉시 데이터베이스가 다시 시작됩니다. - “Modify cluster”를 선택합니다.
- “Parameter groups” 페이지에서 파라미터 그룹을 선택합니다.
- “Values”에 대해서, 매개 변수를 수정하여 고급 감사를 활성화하거나 비활성화합니다.
- “Save changes”를 선택합니다.
고급 감사를 성공적으로 설정했습니다. - 상태를 확인하려면 MySQL 콘솔에서 다음 SQL 명령을 실행합니다:
mysql> show variables like '%server_audit_logging%'; +----------------------+-------+ | Variable_name | Value | +----------------------+-------+ | server_audit_logging | ON | +----------------------+-------+
데이터베이스 활동을 캡처하도록 감사 로그 구성
감사 옵션 구성은 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에 대한 고급 감사에서만 지원됩니다.
server_audit_excl_users
및 server_audit_incl_users
매개 변수를 사용하여 감사하거나 감사에서 제외 할 수있는 DB 사용자를 지정합니다. 다음은 가능한 조합입니다:
server_audit_excl_users
및server_audit_incl_users
가 비어있는 경우 (기본값) 모든 사용자가 감사됩니다.server_audit_incl_users
에 사용자를 추가하고server_audit_excl_users
를 비워두면server_audit_incl_users
에 추가 된 사용자 만 감사됩니다.server_audit_excl_users
에 사용자를 추가하고server_audit_incl_users
를 비워두면server_audit_excl_users
에 추가 된 사용자 만 감사되지 않으며 다른 모든 사용자는 감사server_audit_excl_users
및server_audit_incl_users
모두에 사용자를 추가하면server_audit_excl_users
보다 우선하는server_audit_incl_users
에 지정된대로 사용자가 감사됩니다.
지정된 사용자가 server_audit_excl_users
또는 server_audit_incl_users
목록에 있더라도 모든 사용자에 대해 CONNECT 이벤트가 기록됩니다.
단일 이벤트에 대한 감사 활성화
이 사용 사례에서는 단일 감사 이벤트 QUERY_DML에 대해 감사 옵션을 활성화합니다. DML 타입 쿼리들을 감사하려면 MariaDB 감사 플러그인 (Amazon RDS MySQL)에 대한 “Option group” 또는QUERY_DML (Amazon Aurora MySQL)에 대해 server_audit_events
로 고급 감사를위한 “Parameter group”을 수정합니다.
Amazon RDS for MySQL
MySQL 용 Amazon RDS를 사용하여 단일 이벤트에 대한 감사를 활성화하려면 다음 단계를 완료하십시오:
- Amazon RDS 콘솔에서 “Option groups”을 선택합니다.
- 원하는 옵션 그룹을 선택합니다.
- “Option settings”의 값으로 QUERY_DML을 선택합니다.
- “Apply Immediately”에서 Yes를 선택합니다.
- “Modify option”을 선택합니다.
Amazon Aurora MySQL
Amazon Aurora MySQL을 사용하여 단일 이벤트에 대한 감사를 활성화하려면 다음 단계를 완료하십시오:
- Amazon RDS 콘솔에서 “Parameter groups”을 선택합니다.
- 원하는 파라미터 그룹을 선택합니다.
- “Parameters”에서 값으로 QUERY_DML을 선택합니다.
- “Save changes”를 선택해 변경 사항 저장합니다.
이벤트 상태 확인 및 이벤트 로깅
이벤트 상태를 확인하려면 MySQL 명령 줄에서 다음 쿼리를 실행하십시오:
mysql> SHOW VARIABLES LIKE '%server_audit_events%';
+---------------------+-----------+
| Variable_name | Value |
+---------------------+-----------+
| server_audit_events | QUERY_DML |
+---------------------+-----------+
다음 코드는 DML 감사 이벤트의 로그입니다:
$ mysql -h <endpoint> -u <user name> -p
Enter password:
mysql>CREATE database audit_log;
mysql>USE audit_log;
mysql> CREATE TABLE IF NOT EXISTS auditlogtab (id varchar(32),name varchar(100));
mysql> ALTER TABLE auditlogtab CHANGE name name VARCHAR(128);
mysql> SELECT COUNT(*) FROM auditlogtab;
mysql> TRUNCATE TABLE auditlogtab;
mysql> INSERT INTO auditlogtab (id,name) VALUES('I12', 'AUDIT TRAIL');
mysql> UPDATE auditlogtab SET name ='AUDIT TRAIL TEST' WHERE id='I12';
mysql> CREATE USER auditloguser IDENTIFIED BY 'Audit_Pwd@187';
mysql> DROP USER auditloguser;
mysql> DROP TABLE auditlogtab;
mysql> DROP DATABASE audit_log;
mysql> \q
Amazon RDS MySQL에서 로그 확인
Amazon RDS MySQL에 대한 로그를 확인하려면 다음 단계를 완료하십시오:
- Amazon RDS 콘솔에서 “Database”를 선택합니다.
- DB 인스턴스를 선택합니다.
- “Logs”에서 로그 (
audit/server_audit.log
)를 선택합니다. - “View”를 선택합니다.
다음 스크린 샷은 감사 로그 파일의 보기를 보여줍니다.
Amazon Aurora MySQL에서 로그 확인
Amazon Aurora MySQL에서 고급 감사에 대한 로그를 확인하려면 다음 단계를 완료하십시오.:
- Amazon RDS 콘솔에서”Databases”를 선택합니다.
- DB 인스턴스를 선택합니다.
- “Logs”에서, 로그를 (
audit/audit.log
) 선택합니다. - “View”를 선택합니다.
다음 스크린 샷은 감사 로그 파일 중 하나의보기를 보여줍니다.
여러 이벤트에 대한 감사 활성화
이 사용 사례에서는 여러 감사 이벤트에 대해 감사 옵션을 활성화합니다.
Amazon RDS for MySQL
Amazon RDS MySQL에서 여러 이벤트를 기록하려면 MariaDB 감사 플러그인에 대한 옵션 그룹을 수정하십시오. 지침은 이전 섹션을 참조하십시오..
Amazon Aurora MySQL
Amazon Aurora MySQL에 여러 이벤트를 기록하려면 server_audit_events
를 CONNECT
, QUERY
, TABLE
, QUERY_DDL
, QUERY_DML
및 QUERY_DCL
로 사용하여 파라미터 그룹을 수정하십시오. 이러한 값을 구성하는 방법은 이전 섹션을 참조하십시오.
이벤트 상태 확인 및 여러 이벤트 로깅
이벤트 상태를 확인하려면 MySQL 명령 줄에서 다음 쿼리를 실행하십시오:
mysql> show variables like '%server_audit_events%';
+---------------------+---------------------------------------------------
| Variable_name | Value
+---------------------+---------------------------------------------------
| server_audit_events | CONNECT,QUERY,TABLE,QUERY_DDL,QUERY_DML,QUERY_DCL
+---------------------+--------------------------------------------------+
다음 코드를 사용하여 여러 감사 이벤트를 기록합니다:
$ mysql -h <endpoint> -u <user name> -p
Enter password:
mysql>CREATE database audit_log;
mysql>USE audit_log;
mysql> CREATE TABLE IF NOT EXISTS auditlogtab (id varchar(32),name varchar(100));
mysql> SELECT count(*) from auditlogtab;
mysql> create view v_auditlogtab as SELECT count(*) from auditlogtab;
mysql> select * from v_auditlogtab;
mysql> TRUNCATE TABLE auditlogtab;
mysql> INSERT INTO auditlogtab (id,name) VALUES('I12', 'AUDIT TRAIL');
mysql> UPDATE auditlogtab SET name ='AUDIT TRAIL TEST' WHERE id='I12';
mysql> CREATE USER auditloguser IDENTIFIED BY 'Audit_Pwd@187';
mysql> DROP USER auditloguser;
mysql> DROP TABLE auditlogtab;
mysql> DROP DATABASE audit_log;
mysql> \q
Amazon RDS for MySQL에서 로그 확인하기
Amazon RDS MySQL에서 MariaDB 감사에 대한 로그를 확인하려면 다음 단계를 완료하십시오.:
- Amazon RDS 콘솔에서, “Databases”를 선택합니다.
- DB 인스턴스를 선택합니다.
- “Logs” 항목에서, 원하는 로그를 선택합니다 (
audit/server_audit.log
). - “View”를 선택합니다.
다음 스크린 샷은 로그 파일보기를 보여줍니다.
Amazon Aurora MySQL 로그 확인
Amazon Aurora MySQL에서 고급 감사에 대한 로그를 확인하려면 다음 단계를 완료하십시오:
- Amazon RDS 콘솔에서, “Databases”를 선택합니다.
- DB 인스턴스를 선택합니다.
- “Logs” 항목에서 원하는 로그 (
audit/audit.log
)를 선택합니다. - “View”를 선택합니다.
다음 스크린 샷은 감사 로그 파일 중 하나의보기를 보여줍니다.
마무리
이 글에서는 Amazon RDS MySQL 인스턴스에서 데이터베이스 활동을 기록하기 위해 사용 가능한 다양한 옵션과 함께 MariaDB 감사 플러그인을 사용하는 방법을 설명했습니다. Amazon Aurora 데이터베이스의 경우 파라미터 그룹을 사용하여 데이터베이스 활동을 기록하는 데 사용할 수있는 다양한 옵션으로 감사 기능을 활성화했습니다. 이는 검증 되고 테스트 된 단계입니다. 또한 이 게시물이 감사를 활성화하고 보안 및 추적 상태를 개선하기 위한 기본 지침을 제공하기를 바랍니다. 한번 시도해보고이 게시물에 대한 의견을 통해 의견을 보내주십시오. 평소 AWS 지원 연락처를 통해 또는 Amazon RDS 용 AWS 포럼을 통해 항상 여러분의 피드백을 기다리고 있습니다.
– Shailesh K Mishra, AWS Enterprise Solutions Architect
– Babaiah Valluru, AWS Associate Consultant with the Professional Services
이 글은 AWS Database 블로그 Configuring an audit log to capture database activities for Amazon RDS for MySQL and Amazon Aurora with MySQL compatibility의 한국어 번역으로 강민석 AWS 솔루션스 아키텍트가 번역 및 검토해 주셨습니다.