

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 이벤트, 로그 및 감사 추적
<a name="events-logs-audit"></a>

[DB 인스턴스 지표](db-instance-monitoring.md) 및 [OS 지표](os-monitoring.md)를 모니터링하고, 추세를 분석하며, 지표를 기준 값과 비교하고, 값이 정의된 임계치를 위반하는 경우 알림을 생성하는 작업은 모두 Amazon RDS DB 인스턴스의 신뢰성, 가용성, 성능 및 보안을 달성하고 유지하는 데 도움이 되는 필수 사례이자 모범 사례입니다. 그러나 포괄적인 솔루션에서 MySQL 및 MariaDB 데이터베이스의 데이터베이스 이벤트, 로그 파일 및 감사 추적도 모니터링해야 합니다.

**Sections**
+ [Amazon RDS 이벤트](rds-events.md)
+ [데이터베이스 로그](database-logs.md)
+ [감사 추적](audit-trails.md)

# Amazon RDS 이벤트
<a name="rds-events"></a>

*Amazon* *RDS 이벤트*는 Amazon RDS 환경의 변경 사항을 나타냅니다. 예를 들어 DB 인스턴스 상태가 *시작 중*에서 *사용 가능*으로 변경되면 Amazon RDS는 `RDS-EVENT-0088 The DB instance has been started` 이벤트를 생성합니다. Amazon RDS는 거의 실시간으로 Amazon EventBridge에 이벤트를 전송합니다. Amazon RDS 콘솔, AWS CLI 명령 [describe-events](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/rds/describe-events.html) 또는 Amazon RDS API 작업 [DescribeEvents](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_DescribeEvents.html)를 통해 이벤트에 액세스할 수 있습니다. 다음 화면 그림에서는 Amazon RDS 콘솔에 표시된 이벤트 및 로그를 보여줍니다.

![\[Amazon RDS 콘솔에 표시되는 경보, 이벤트 및 로그\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/amazon-rds-monitoring-alerting/images/alarms-events-logs-rds-console.png)


Amazon RDS는 DB 인스턴스 이벤트, DB 파라미터 그룹 이벤트, DB 보안 그룹 이벤트, DB 스냅샷 이벤트, RDS 프록시 이벤트, 블루/그린 배포 이벤트 등 여러 유형의 이벤트를 내보냅니다. 다음과 같은 정보가 포함됩니다.
+ 소스 이름 및 소스 유형, 예: `"SourceIdentifier": "database-1", "SourceType": "db-instance"`
+ 이벤트 날짜 및 시간, 예: `"Date": "2022-12-01T09:20:28.595000+00:00"`
+ 이벤트와 연결된 메시지, 예: `"Message": "Finished updating DB parameter group"`
+ 이벤트 범주, 예: `"EventCategories": ["configuration change"]`

자세한 내용은 [Amazon RDS 설명서의 Amazon RDS 이벤트 카테고리 및 이벤트 메시지](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_Events.Messages.html)를 참조하세요.

Amazon RDS 이벤트는 DB 인스턴스 가용성의 상태 변경, 구성 변경, 읽기 전용 복제본 상태 변경, 백업 및 복구 이벤트, 장애 조치 작업, 장애 이벤트, 보안 그룹에 대한 수정 및 기타 많은 알림을 나타내므로 이러한 이벤트를 모니터링하는 것이 좋습니다. 예를 들어 데이터베이스에 향상된 성능과 내구성을 제공하도록 읽기 전용 복제본 DB 인스턴스를 설정한 경우 DB 인스턴스와 연결된 *읽기 전용 복제본* 이벤트 범주에 대한 Amazon RDS 이벤트를 모니터링하는 것이 좋습니다. `RDS-EVENT-0057 Replication on the read replica was terminated`와 같은 이벤트는 읽기 전용 복제본이 더 이상 기본 DB 인스턴스와 동기화되지 않음을 나타내기 때문입니다. 이러한 이벤트가 발생했음을 담당 팀에 알리면 문제를 적시에 완화하는 데 도움이 될 수 있습니다. Amazon EventBridge 및 추가적인 AWS 서비스(예: AWS Lambda, Amazon Simple Queue Service(Amazon SQS) 및 Amazon Simple Notification Service(Amazon SNS))는 데이터베이스 가용성 문제 또는 리소스 변경과 같은 시스템 이벤트에 대한 응답을 자동화하는 데 도움이 될 수 있습니다.

Amazon RDS 콘솔에서 지난 24시간 동안의 이벤트를 검색할 수 있습니다. AWS CLI 또는 Amazon RDS API를 사용하여 이벤트를 보는 경우 다음과 같이 **describe-events** 명령을 사용하여 지난 14일 동안의 이벤트를 검색할 수 있습니다.

```
$ aws rds describe-events --source-identifier database-1 --source-type db-instance
{
    "Events": [
        {
            "SourceIdentifier": "database-1",
            "SourceType": "db-instance",
            "Message": "CloudWatch Logs Export enabled for logs [audit, error, general, slowquery]",
            "EventCategories": [],
            "Date": "2022-12-01T09:20:28.595000+00:00",
            "SourceArn": "arn:aws:rds:eu-west-3:111122223333:db:database-1"
        },
        {
            "SourceIdentifier": "database-1",
            "SourceType": "db-instance",
            "Message": "Finished updating DB parameter group",
            "EventCategories": [
                "configuration change"
            ],
            "Date": "2022-12-01T09:22:40.413000+00:00",
            "SourceArn": "arn:aws:rds:eu-west-3:111122223333:db:database-1"
        }
    ]
}
```

지정된 만료 기간까지 또는 영구적으로 이벤트를 장기간 저장하려는 경우 [CloudWatch Logs](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html)를 사용하여 Amazon RDS에서 생성된 이벤트에 대한 정보를 로깅할 수 있습니다. 이 솔루션을 구현하려면 Amazon SNS 주제를 사용하여 Amazon RDS 이벤트 알림을 수신한 다음 Lambda 함수를 직접 호출하여 CloudWatch Logs에 이벤트를 로깅할 수 있습니다.

1. 이벤트에서 직접 호출할 Lambda 함수를 생성하고 이벤트의 정보를 CloudWatch Logs에 로깅하세요. CloudWatch Logs는 Lambda와 통합되며 `stdout`에 대해 **print** 함수를 사용하여 이벤트 정보를 로깅하는 편리한 방법을 제공합니다.

1. Lambda 함수를 구독하여 SNS 주제를 생성하고(**프로토콜**을 Lambda로 설정), **엔드포인트**를 이전 단계에서 생성한 Lambda 함수의 Amazon 리소스 이름(ARN)으로 설정하세요.

1. Amazon RDS 이벤트 알림을 수신하도록 SNS 주제를 구성하세요. 자세한 지침은 Amazon RDS 알림을 받도록 Amazon SNS 토픽을 설정하려면 어떻게 해야 합니까?에 관한 [AWS re:Post 문서](https://repost.aws/knowledge-center/sns-topics-rds-notifications)를 참조하세요.

1. Amazon RDS 콘솔에서 새 이벤트 구독을 생성하세요. **대상**을 ARN으로 설정한 다음 이전에 생성한 SNS 주제를 선택하세요. 요구 사항에 따라 **소스 유형** 및 **포함할 이벤트 범주**를 설정하세요. 자세한 내용은 [Amazon RDS 설명서의 Amazon RDS 이벤트 알림 구독](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_Events.Subscribing.html)을 참조하세요.

# 데이터베이스 로그
<a name="database-logs"></a>

MySQL 및 MariaDB 데이터베이스는 감사 및 문제 해결을 위해 액세스할 수 있는 로그를 생성합니다. 이러한 로그는 다음과 같습니다.
+ [감사](https://mariadb.com/kb/en/mariadb-audit-plugin-log-format/) - 감사 추적은 서버 활동을 로깅하는 레코드 세트입니다. 각 클라이언트 세션에서 서버에 연결된 사용자(사용자 이름 및 호스트), 실행된 쿼리, 액세스된 테이블, 변경된 서버 변수를 기록합니다.
+ [오류](https://dev.mysql.com/doc/refman/8.0/en/error-log.html) - 이 로그에는 서버의 (`mysqld`) 시작 및 종료 시간과 서버 시작 및 종료 도중 그리고 서버가 실행되는 동안 발생하는 오류, 경고, 참고 사항과 같은 진단 메시지가 포함됩니다.
+ [일반](https://dev.mysql.com/doc/refman/8.0/en/query-log.html) - 이 로그에는 각 클라이언트의 연결 및 연결 해제 활동과 클라이언트로부터 수신된 SQL 쿼리를 포함하여 `mysqld`의 활동을 기록합니다. 일반 쿼리 로그는 오류가 의심되고 클라이언트가 `mysqld`로 전송한 내용을 정확히 알고 싶을 때 매우 유용할 수 있습니다.
+ [느린 쿼리](https://dev.mysql.com/doc/refman/8.0/en/slow-query-log.html) - 이 로그는 수행하는 데 시간이 오래 걸린 SQL 쿼리의 레코드를 제공합니다.

모범 사례는 [Amazon RDS에서 Amazon CloudWatch Logs로 데이터베이스 로그를 게시](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_LogAccess.Procedural.UploadtoCloudWatch.html)하는 것입니다. CloudWatch Logs를 통해 로그 데이터에 대한 실시간 분석을 수행하고, 내구성이 뛰어난 스토리지에 데이터를 저장하며, CloudWatch Logs 에이전트로 데이터를 관리할 수 있습니다. Amazon RDS 콘솔에서 [데이터베이스 로그에 액세스하고 해당 로그를 볼 수 있습니다](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_LogAccess.Procedural.Watching.html). 또한 CloudWatch Logs Insights를 사용하여 CloudWatch Logs에서 로그 데이터를 대화식으로 검색하고 분석할 수 있습니다. 다음 예제에서는 로그에 `CONNECT` 이벤트가 표시되는 횟수, 연결된 사용자, 연결된 클라이언트(IP 주소)를 확인하는 감사 로그의 쿼리를 보여줍니다. 감사 로그에서 발췌한 내용은 다음과 같을 수 있습니다.

```
20221201 14:07:05,ip-10-22-1-51,rdsadmin,localhost,821,0,CONNECT,,,0,SOCKET
20221201 14:07:05,ip-10-22-1-51,rdsadmin,localhost,821,0,DISCONNECT,,,0,SOCKET
20221201 14:12:20,ip-10-22-1-51,rdsadmin,localhost,822,0,CONNECT,,,0,SOCKET
20221201 14:12:20,ip-10-22-1-51,rdsadmin,localhost,822,0,DISCONNECT,,,0,SOCKET
20221201 14:17:35,ip-10-22-1-51,rdsadmin,localhost,823,0,CONNECT,,,0,SOCKET
20221201 14:17:35,ip-10-22-1-51,rdsadmin,localhost,823,0,DISCONNECT,,,0,SOCKET
20221201 14:22:50,ip-10-22-1-51,rdsadmin,localhost,824,0,CONNECT,,,0,SOCKET
20221201 14:22:50,ip-10-22-1-51,rdsadmin,localhost,824,0,DISCONNECT,,,0,SOCKET
```

Log Insights 쿼리 예제에서는 다음 그림과 같이 `rdsadmin`이 `localhost`에서 5분마다 데이터베이스에 연결되었음(총 22회)을 보여줍니다. 이러한 결과는 활동이 모니터링 시스템 자체와 같은 내부 Amazon RDS 프로세스에서 시작되었음을 나타냅니다.

![\[Log Insights 보고서\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/amazon-rds-monitoring-alerting/images/log-insights.png)


로그 이벤트에는 MySQL 및 MariaDB DB 인스턴스와 관련된 작업에 대한 경고 또는 오류와 같이 계산하려는 중요한 메시지가 자주 포함됩니다. 예를 들어 작업이 실패하면 오류가 발생하고 다음과 같이 오류 로그 파일에 기록될 수 있습니다. `ERROR 1114 (HY000): The table zip_codes is full`. 이러한 항목을 모니터링하여 오류의 추세를 파악하려고 할 수 있습니다. Amazon RDS 데이터베이스 로그의 자동 모니터링을 활성화하여 특정 로그에서 특정 패턴을 모니터링하고 예상되는 동작 위반이 발생한 경우 경보를 생성하도록 [필터를 사용하여 Amazon RDS 로그에서 사용자 지정 CloudWatch 지표를 생성](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CreateMetricFilterProcedure.html)할 수 있습니다. [예를 들어](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CountOccurrencesExample.html) 오류 로그를 모니터링하고 [특정 패턴](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/FilterAndPatternSyntax.html)(예: `ERROR`)을 검색하는 로그 그룹 `/aws/rds/instance/database-1/error`에 대한 지표 필터를 생성합니다. **필터 패턴**을 `ERROR`로 설정하고 **지표 값**을 `1`로 설정합니다. 필터는 `ERROR` 키워드가 있는 모든 로그 레코드를 감지하고 'ERROR'가 포함된 모든 로그 이벤트에 대해 개수를 1씩 늘립니다. 필터를 생성한 후 MySQL 또는 MariaDB 오류 로그에서 오류가 감지되면 이를 알리도록 경보를 설정할 수 있습니다.

CloudWatch 대시보드를 생성하고 CloudWatch Logs Insights를 사용하여 느린 쿼리 로그 및 오류 로그를 모니터링하는 방법에 대한 자세한 내용은 블로그 게시물 [Creating an Amazon CloudWatch dashboard to monitor Amazon RDS and Amazon Aurora MySQL](https://aws.amazon.com/blogs/database/creating-an-amazon-cloudwatch-dashboard-to-monitor-amazon-rds-and-amazon-aurora-mysql/)을 참조하세요.

# 감사 추적
<a name="audit-trails"></a>

감사 추적(또는 감사 로그)은 AWS 계정에서 이벤트에 대한 보안 관련 시간순 레코드를 제공합니다. 여기에는 데이터베이스 또는 클라우드 환경에 영향을 주는 일련의 활동에 대한 증거 문서를 제공하는 Amazon RDS에 대한 이벤트가 포함됩니다. Amazon RDS for MySQL 또는 MariaDB에서 감사 추적을 사용하는 경우 다음이 포함됩니다.
+ DB 인스턴스 감사 로그 모니터링
+ AWS CloudTrail에서 Amazon RDS API 직접 호출 모니터링

Amazon RDS DB 인스턴스의 경우 감사 목표는 일반적으로 다음을 포함합니다.
+ 다음에 대한 책임 지원:
  + 파라미터 또는 보안 구성에 대해 수행된 수정
  + 데이터베이스 스키마, 테이블 또는 행에서 수행되는 작업이나 특정 콘텐츠에 영향을 주는 작업
+ 침입 감지 및 조사
+ 의심스러운 활동 감지 및 조사
+ 권한 부여 문제 감지(예: 일반 또는 권한 있는 사용자의 액세스 권한 남용 식별)

데이터베이스 감사 추적은 다음과 같은 일반적인 질문에 답하려고 합니다. *데이터베이스 내에서 민감한 데이터를 보거나 수정한 사람은 누구인가요? 언제 발생했나요? 특정 사용자가 어디에서 데이터에 액세스했나요? 권한 있는 사용자가 무제한 액세스 권한을 남용했나요?*

MySQL 및 MariaDB 모두 MariaDB 감사 플러그인을 사용하여 DB 인스턴스 감사 추적 기능을 구현합니다. 이 플러그인은 사용자의 데이터베이스 로그온, 데이터베이스에서 실행되는 쿼리 등의 데이터베이스 활동을 기록합니다. 데이터베이스 활동 기록은 로그 파일에 저장됩니다. 감사 로그에 액세스하려면 DB 인스턴스가 `MARIADB_AUDIT_PLUGIN` 옵션과 함께 사용자 지정 옵션 그룹을 사용해야 합니다. 자세한 내용은 Amazon RDS 설명서의 [MySQL에 대한 MariaDB 감사 플러그인 지원](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Appendix.MySQL.Options.AuditPlugin.html)을 참조하세요. 감사 로그의 레코드는 플러그인에서 정의한 특정 형식으로 저장됩니다. [MariaDB Server 설명서](https://mariadb.com/kb/en/mariadb-audit-plugin-log-format/)에서 감사 로그 형식에 대한 자세한 내용을 확인할 수 있습니다.

AWS 계정에 대한 AWS 클라우드 감사 추적은 [AWS CloudTrail](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-user-guide.html) 서비스에서 제공됩니다. CloudTrail은 Amazon RDS에 대한 API 호출을 이벤트로 캡처합니다. 모든 Amazon RDS 작업은 로깅됩니다. CloudTrail은 Amazon RDS에서 사용자, 역할 또는 다른 AWS 서비스가 수행한 작업의 기록을 제공합니다. 이벤트에는 AWS Management Console, AWS CLI, AWS SDK 및 API에서 수행되는 작업이 포함됩니다.

## 예시
<a name="example"></a>

일반적인 감사 시나리오에서는 AWS CloudTrail 추적을 데이터베이스 감사 로그 및 Amazon RDS 이벤트 모니터링과 결합해야 할 수도 있습니다. 예를 들어 Amazon RDS DB 인스턴스(예: `database-1`)의 데이터베이스 파라미터가 수정되고 수정한 사람, 변경된 내용 및 변경 시점을 식별하는 태스크를 수행해야 하는 시나리오가 있을 수 있습니다.

태스크를 수행하려면 다음 단계를 따릅니다.

1. 데이터베이스 인스턴스 `database-1`에서 수행된 Amazon RDS 이벤트를 나열하고 `Finished updating DB parameter group` 메시지가 있는 `configuration change` 범주의 이벤트가 있는지 확인하세요.

   ```
   $ aws rds describe-events --source-identifier database-1 --source-type db-instance
   {
       "Events": [
           {
               "SourceIdentifier": "database-1",
               "SourceType": "db-instance",
               "Message": "Finished updating DB parameter group",
               "EventCategories": [
                   "configuration change"
               ],
               "Date": "2022-12-01T09:22:40.413000+00:00",
               "SourceArn": "arn:aws:rds:eu-west-3:111122223333:db:database-1"
           }
       ]
   }
   ```

1. DB 인스턴스에서 사용하는 DB 파라미터 그룹을 식별하세요.

   ```
   $ aws rds describe-db-instances --db-instance-identifier database-1 --query 'DBInstances[*].[DBInstanceIdentifier,Engine,DBParameterGroups]'
   [
       [
           "database-1",
           "mariadb",
           [
               {
                   "DBParameterGroupName": "mariadb10-6-test",
                   "ParameterApplyStatus": "pending-reboot"
               }
           ]
       ]
   ]
   ```

1. 1단계에서 검색된 Amazon RDS 이벤트 기간 전후에 `database-1`이 배포된 리전에서 [AWS CLI를 사용하여 CloudTrail 이벤트를 검색](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/view-cloudtrail-events-cli.html)하세요(여기서는 `EventName=ModifyDBParameterGroup`임).

   ```
   $ aws cloudtrail --region eu-west-3 lookup-events --lookup-attributes AttributeKey=EventName,AttributeValue=ModifyDBParameterGroup --start-time "2022-12-01, 09:00 AM" --end-time "2022-12-01, 09:30 AM"    
   
   {
       "eventVersion": "1.08",
       "userIdentity": {
           "accountId": "111122223333",
           "accessKeyId": "AKIAIOSFODNN7EXAMPLE",
           "sessionContext": {
               "sessionIssuer": {
                   "type": "Role",
                   "principalId": "AIDACKCEVSQ6C2EXAMPLE",
                   "arn": "arn:aws:iam::111122223333:role/Role1",
                   "accountId": "111122223333",
                   "userName": "User1"
               }
           }
       },
       "eventTime": "2022-12-01T09:18:19Z",
       "eventSource": "rds.amazonaws.com",
       "eventName": "ModifyDBParameterGroup",
       "awsRegion": "eu-west-3",
       "sourceIPAddress": "AWS Internal",
       "userAgent": "AWS Internal",
       "requestParameters": {
           "parameters": [
               {
                   "isModifiable": false,
                   "applyMethod": "pending-reboot",
                   "parameterName": "innodb_log_buffer_size",
                   "parameterValue": "8388612"
               },
               {
                   "isModifiable": false,
                   "applyMethod": "pending-reboot",
                   "parameterName": "innodb_write_io_threads",
                   "parameterValue": "8"
               }
           ],
           "dBParameterGroupName": "mariadb10-6-test"
       },
       "responseElements": {
           "dBParameterGroupName": "mariadb10-6-test"
       },
       "requestID": "fdf19353-de72-4d3d-bf29-751f375b6378",
       "eventID": "0bba7484-0e46-4e71-93a8-bd01ca8386fe",
       "eventType": "AwsApiCall",
       "managementEvent": true,
       "recipientAccountId": "111122223333",
       "eventCategory": "Management",
       "sessionCredentialFromConsole": "true"
   }
   ```

CloudTrail 이벤트에서는 AWS 계정 111122223333에서 `Role1``database-1` 역할의 `User1`이 `2022-12-01 at 09:18:19 h`에서 DB 인스턴스가 사용한 DB 파라미터 그룹 `mariadb10-6-test`를 수정했음을 보여줍니다. 두 개의 파라미터가 수정되었고 다음 값으로 설정되었습니다.
+ `innodb_log_buffer_size = 8388612`
+ `innodb_write_io_threads = 8`

## 추가 CloudTrail 및 CloudWatch Logs 기능
<a name="additional-features"></a>

CloudTrail 콘솔에서 **이벤트 기록**을 확인하여 지난 90일 동안의 운영 및 보안 인시던트 문제를 해결할 수 있습니다. 보존 기간을 연장하고 추가 쿼리 기능을 활용하기 위해 [AWS CloudTrail Lake](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-lake.html)를 사용할 수 있습니다. AWS CloudTrail Lake를 사용하면 최대 7년 동안 이벤트 데이터 저장소에 이벤트 데이터를 보관할 수 있습니다. 또한 이 서비스는 **이베트 기록**에서 간단한 키 값 조회로 제공하는 보기가 아닌 이벤트에 대한 더 심층적이고 사용자 지정 가능한 보기를 제공하는 복잡한 SQL 쿼리를 지원합니다.

감사 추적을 모니터링하고, 경보를 설정하며, 특정 활동이 발생할 때 알림을 받으려면 [추적 레코드를 CloudWatch Logs로 보내도록 CloudTrail을 구성](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/monitor-cloudtrail-log-files-with-cloudwatch-logs.html)해야 합니다. 추적 레코드가 CloudWatch Logs로 저장된 후에 지표 필터를 정의하여 조건, 구문 또는 값과 일치하도록 로그 이벤트를 평가하고 지표 필터에 지표를 할당할 수 있습니다. 또한 사용자가 지정한 기간과 임계치에 따라 생성되는 CloudWatch 경보를 생성할 수 있습니다. 예를 들어 적절한 조치를 취할 수 있도록 담당 팀에 알림을 보내는 경보를 구성할 수 있습니다. 경보에 대한 응답으로 작업을 자동으로 수행하도록 CloudWatch를 구성할 수도 있습니다.