데이터베이스 활동 스트림에 대한 감사 로그 내용 및 예제
모니터링되는 이벤트는 데이터베이스 활동 스트림에 JSON 문자열로 표시됩니다. 구조는 DatabaseActivityMonitoringRecord
를 포함하는 JSON 객체로 구성되며, 여기에는 databaseActivityEventList
활동 이벤트 배열이 포함됩니다.
활동 스트림 감사 로그 예제
다음은 활동 이벤트 레코드의 해독된 JSON 감사 로그 샘플입니다.
예 Aurora PostgreSQL CONNECT SQL 문 의 활동 이벤트 레코드
다음 활동 이벤트 레코드는 의 psql 클라이언트(clientApplication
)에서 CONNECT
SQL 문(command
)을 사용하여 로그인한 것을 보여줍니다.
{
"type":"DatabaseActivityMonitoringRecords",
"version":"1.1",
"databaseActivityEvents":
{
"type":"DatabaseActivityMonitoringRecord",
"clusterId":"cluster-4HNY5V4RRNPKKYB7ICFKE5JBQQ",
"instanceId":"db-FZJTMYKCXQBUUZ6VLU7NW3ITCM",
"databaseActivityEventList":[
{
"startTime": "2019-10-30 00:39:49.940668+00",
"logTime": "2019-10-30 00:39:49.990579+00",
"statementId": 1,
"substatementId": 1,
"objectType": null,
"command": "CONNECT",
"objectName": null,
"databaseName": "postgres",
"dbUserName": "rdsadmin",
"remoteHost": "172.31.3.195",
"remotePort": "49804",
"sessionId": "5ce5f7f0.474b",
"rowCount": null,
"commandText": null,
"paramList": [],
"pid": 18251,
"clientApplication": "psql",
"exitCode": null,
"class": "MISC",
"serverVersion": "2.3.1",
"serverType": "PostgreSQL",
"serviceName": "Amazon Aurora PostgreSQL-Compatible edition",
"serverHost": "172.31.3.192",
"netProtocol": "TCP",
"dbProtocol": "Postgres 3.0",
"type": "record",
"errorMessage": null
}
]
},
"key":"decryption-key"
}
예 Aurora MySQL CONNECT SQL 문의 활동 이벤트 레코드
다음 활동 이벤트 레코드는 mysql 클라이언트(clientApplication
)가 CONNECT
SQL 문(command
)을 사용하여 로그인한 것을 보여줍니다.
{
"type":"DatabaseActivityMonitoringRecord",
"clusterId":"cluster-some_id
",
"instanceId":"db-some_id
",
"databaseActivityEventList":[
{
"logTime":"2020-05-22 18:07:13.267214+00",
"type":"record",
"clientApplication":null,
"pid":2830,
"dbUserName":"rdsadmin",
"databaseName":"",
"remoteHost":"localhost",
"remotePort":"11053",
"command":"CONNECT",
"commandText":"",
"paramList":null,
"objectType":"TABLE",
"objectName":"",
"statementId":0,
"substatementId":1,
"exitCode":"0",
"sessionId":"725121",
"rowCount":0,
"serverHost":"master",
"serverType":"MySQL",
"serviceName":"Amazon Aurora MySQL",
"serverVersion":"MySQL 5.7.12",
"startTime":"2020-05-22 18:07:13.267207+00",
"endTime":"2020-05-22 18:07:13.267213+00",
"transactionId":"0",
"dbProtocol":"MySQL",
"netProtocol":"TCP",
"errorMessage":"",
"class":"MAIN"
}
]
}
예 Aurora PostgreSQL CREATE TABLE 문의 활동 이벤트 레코드
다음 예시는 Aurora PostgreSQL에 대한 CREATE TABLE
이벤트를 보여줍니다.
{
"type":"DatabaseActivityMonitoringRecords",
"version":"1.1",
"databaseActivityEvents":
{
"type":"DatabaseActivityMonitoringRecord",
"clusterId":"cluster-4HNY5V4RRNPKKYB7ICFKE5JBQQ",
"instanceId":"db-FZJTMYKCXQBUUZ6VLU7NW3ITCM",
"databaseActivityEventList":[
{
"startTime": "2019-05-24 00:36:54.403455+00",
"logTime": "2019-05-24 00:36:54.494235+00",
"statementId": 2,
"substatementId": 1,
"objectType": null,
"command": "CREATE TABLE",
"objectName": null,
"databaseName": "postgres",
"dbUserName": "rdsadmin",
"remoteHost": "172.31.3.195",
"remotePort": "34534",
"sessionId": "5ce73c6f.7e64",
"rowCount": null,
"commandText": "create table my_table (id serial primary key, name varchar(32));",
"paramList": [],
"pid": 32356,
"clientApplication": "psql",
"exitCode": null,
"class": "DDL",
"serverVersion": "2.3.1",
"serverType": "PostgreSQL",
"serviceName": "Amazon Aurora PostgreSQL-Compatible edition",
"serverHost": "172.31.3.192",
"netProtocol": "TCP",
"dbProtocol": "Postgres 3.0",
"type": "record",
"errorMessage": null
}
]
},
"key":"decryption-key"
}
예 Aurora MySQL CREATE TABLE 문의 활동 이벤트 레코드
다음 예시는 Aurora MySQL의 CREATE TABLE
문을 보여줍니다. 이 작업은 두 개의 개별 이벤트 레코드로 표시됩니다. 한 이벤트에는 "class":"MAIN"
이 있습니다. 다른 이벤트에는 "class":"AUX"
가 있습니다. 메시지는 순서에 관계없이 도착할 수 있습니다. logTime
이벤트의 MAIN
필드는 항상 해당 logTime
이벤트의 AUX
필드보다 빠릅니다.
다음 예제에서는 class
값이 MAIN
인 이벤트를 보여 줍니다.
{
"type":"DatabaseActivityMonitoringRecord",
"clusterId":"cluster-some_id
",
"instanceId":"db-some_id
",
"databaseActivityEventList":[
{
"logTime":"2020-05-22 18:07:12.250221+00",
"type":"record",
"clientApplication":null,
"pid":2830,
"dbUserName":"master",
"databaseName":"test",
"remoteHost":"localhost",
"remotePort":"11054",
"command":"QUERY",
"commandText":"CREATE TABLE test1 (id INT)",
"paramList":null,
"objectType":"TABLE",
"objectName":"test1",
"statementId":65459278,
"substatementId":1,
"exitCode":"0",
"sessionId":"725118",
"rowCount":0,
"serverHost":"master",
"serverType":"MySQL",
"serviceName":"Amazon Aurora MySQL",
"serverVersion":"MySQL 5.7.12",
"startTime":"2020-05-22 18:07:12.226384+00",
"endTime":"2020-05-22 18:07:12.250222+00",
"transactionId":"0",
"dbProtocol":"MySQL",
"netProtocol":"TCP",
"errorMessage":"",
"class":"MAIN"
}
]
}
다음 예제에서는 class
값이 AUX
인 해당 이벤트를 보여 줍니다.
{
"type":"DatabaseActivityMonitoringRecord",
"clusterId":"cluster-some_id
",
"instanceId":"db-some_id
",
"databaseActivityEventList":[
{
"logTime":"2020-05-22 18:07:12.247182+00",
"type":"record",
"clientApplication":null,
"pid":2830,
"dbUserName":"master",
"databaseName":"test",
"remoteHost":"localhost",
"remotePort":"11054",
"command":"CREATE",
"commandText":"test1",
"paramList":null,
"objectType":"TABLE",
"objectName":"test1",
"statementId":65459278,
"substatementId":2,
"exitCode":"",
"sessionId":"725118",
"rowCount":0,
"serverHost":"master",
"serverType":"MySQL",
"serviceName":"Amazon Aurora MySQL",
"serverVersion":"MySQL 5.7.12",
"startTime":"2020-05-22 18:07:12.226384+00",
"endTime":"2020-05-22 18:07:12.247182+00",
"transactionId":"0",
"dbProtocol":"MySQL",
"netProtocol":"TCP",
"errorMessage":"",
"class":"AUX"
}
]
}
예 Aurora PostgreSQL SELECT 문의 활동 이벤트 레코드
다음 예시는 에 대한 SELECT
이벤트를 보여줍니다.
{
"type":"DatabaseActivityMonitoringRecords",
"version":"1.1",
"databaseActivityEvents":
{
"type":"DatabaseActivityMonitoringRecord",
"clusterId":"cluster-4HNY5V4RRNPKKYB7ICFKE5JBQQ",
"instanceId":"db-FZJTMYKCXQBUUZ6VLU7NW3ITCM",
"databaseActivityEventList":[
{
"startTime": "2019-05-24 00:39:49.920564+00",
"logTime": "2019-05-24 00:39:49.940668+00",
"statementId": 6,
"substatementId": 1,
"objectType": "TABLE",
"command": "SELECT",
"objectName": "public.my_table",
"databaseName": "postgres",
"dbUserName": "rdsadmin",
"remoteHost": "172.31.3.195",
"remotePort": "34534",
"sessionId": "5ce73c6f.7e64",
"rowCount": 10,
"commandText": "select * from my_table;",
"paramList": [],
"pid": 32356,
"clientApplication": "psql",
"exitCode": null,
"class": "READ",
"serverVersion": "2.3.1",
"serverType": "PostgreSQL",
"serviceName": "Amazon Aurora PostgreSQL-Compatible edition",
"serverHost": "172.31.3.192",
"netProtocol": "TCP",
"dbProtocol": "Postgres 3.0",
"type": "record",
"errorMessage": null
}
]
},
"key":"decryption-key"
}
{ "type": "DatabaseActivityMonitoringRecord", "clusterId": "", "instanceId": "db-4JCWQLUZVFYP7DIWP6JVQ77O3Q", "databaseActivityEventList": [ { "class": "TABLE", "clientApplication": "Microsoft SQL Server Management Studio - Query", "command": "SELECT", "commandText": "select * from [testDB].[dbo].[TestTable]", "databaseName": "testDB", "dbProtocol": "SQLSERVER", "dbUserName": "test", "endTime": null, "errorMessage": null, "exitCode": 1, "logTime": "2022-10-06 21:24:59.9422268+00", "netProtocol": null, "objectName": "TestTable", "objectType": "TABLE", "paramList": null, "pid": null, "remoteHost": "local machine", "remotePort": null, "rowCount": 0, "serverHost": "172.31.30.159", "serverType": "SQLSERVER", "serverVersion": "15.00.4073.23.v1.R1", "serviceName": "sqlserver-ee", "sessionId": 62, "startTime": null, "statementId": "0x03baed90412f564fad640ebe51f89b99", "substatementId": 1, "transactionId": "4532935", "type": "record", "engineNativeAuditFields": { "target_database_principal_id": 0, "target_server_principal_id": 0, "target_database_principal_name": "", "server_principal_id": 2, "user_defined_information": "", "response_rows": 0, "database_principal_name": "dbo", "target_server_principal_name": "", "schema_name": "dbo", "is_column_permission": true, "object_id": 581577110, "server_instance_name": "EC2AMAZ-NFUJJNO", "target_server_principal_sid": null, "additional_information": "", "duration_milliseconds": 0, "permission_bitmask": "0x00000000000000000000000000000001", "data_sensitivity_information": "", "session_server_principal_name": "test", "connection_id": "AD3A5084-FB83-45C1-8334-E923459A8109", "audit_schema_version": 1, "database_principal_id": 1, "server_principal_sid": "0x010500000000000515000000bdc2795e2d0717901ba6998cf4010000", "user_defined_event_id": 0, "host_name": "EC2AMAZ-NFUJJNO" } } ] }
예 Aurora MySQL SELECT 문의 활동 이벤트 레코드
다음 예시는 SELECT
이벤트를 보여줍니다.
다음 예제에서는 class
값이 MAIN
인 이벤트를 보여 줍니다.
{
"type":"DatabaseActivityMonitoringRecord",
"clusterId":"cluster-some_id
",
"instanceId":"db-some_id
",
"databaseActivityEventList":[
{
"logTime":"2020-05-22 18:29:57.986467+00",
"type":"record",
"clientApplication":null,
"pid":2830,
"dbUserName":"master",
"databaseName":"test",
"remoteHost":"localhost",
"remotePort":"11054",
"command":"QUERY",
"commandText":"SELECT * FROM test1 WHERE id < 28",
"paramList":null,
"objectType":"TABLE",
"objectName":"test1",
"statementId":65469218,
"substatementId":1,
"exitCode":"0",
"sessionId":"726571",
"rowCount":2,
"serverHost":"master",
"serverType":"MySQL",
"serviceName":"Amazon Aurora MySQL",
"serverVersion":"MySQL 5.7.12",
"startTime":"2020-05-22 18:29:57.986364+00",
"endTime":"2020-05-22 18:29:57.986467+00",
"transactionId":"0",
"dbProtocol":"MySQL",
"netProtocol":"TCP",
"errorMessage":"",
"class":"MAIN"
}
]
}
다음 예제에서는 class
값이 AUX
인 해당 이벤트를 보여 줍니다.
{
"type":"DatabaseActivityMonitoringRecord",
"instanceId":"db-some_id
",
"databaseActivityEventList":[
{
"logTime":"2020-05-22 18:29:57.986399+00",
"type":"record",
"clientApplication":null,
"pid":2830,
"dbUserName":"master",
"databaseName":"test",
"remoteHost":"localhost",
"remotePort":"11054",
"command":"READ",
"commandText":"test1",
"paramList":null,
"objectType":"TABLE",
"objectName":"test1",
"statementId":65469218,
"substatementId":2,
"exitCode":"",
"sessionId":"726571",
"rowCount":0,
"serverHost":"master",
"serverType":"MySQL",
"serviceName":"Amazon Aurora MySQL",
"serverVersion":"MySQL 5.7.12",
"startTime":"2020-05-22 18:29:57.986364+00",
"endTime":"2020-05-22 18:29:57.986399+00",
"transactionId":"0",
"dbProtocol":"MySQL",
"netProtocol":"TCP",
"errorMessage":"",
"class":"AUX"
}
]
}
DatabaseActivityMonitoringRecords JSON 객체
데이터베이스 작업 이벤트 레코드는 다음 정보가 포함된 JSON 객체에 있습니다.
JSON 필드 | 데이터 형식 | 설명 |
---|---|---|
|
string |
JSON 레코드 형식입니다. 이 값은 |
version |
string | 데이터베이스 작업 모니터링 레코드의 버전입니다. 생성되는 데이터베이스 활동 레코드의 버전은 DB 클러스터의 엔진 버전에 따라 다릅니다.
달리 명시된 경우를 제외하고 다음 필드는 모두 버전 1.0과 버전 1.1에 있습니다. |
문자열 |
작업 이벤트를 포함하는 JSON 객체입니다. |
|
키 | 문자열 | databaseActivityEventList JSON 배열를 해독하는 데 사용되는 암호화 키 |
databaseActivityEvents JSON 객체
databaseActivityEvents
JSON 객체에는 다음과 같은 정보가 포함되어 있습니다.
JSON 레코드의 최상위 필드
감사 로그의 각 이벤트는 JSON 형식의 레코드 내에 래핑됩니다. 이 레코드에는 다음 필드가 포함되어 있습니다.
- type
-
이 필드는 항상 값이
DatabaseActivityMonitoringRecords
입니다. - version
-
이 필드는 데이터베이스 활동 스트림 데이터 프로토콜 또는 계약 버전을 나타냅니다. 이는 사용 가능한 필드를 정의합니다.
버전 1.0은 Aurora PostgreSQL 버전 10.7 및 11.4에 대한 원래 데이터 활동 스트림 지원을 나타냅니다. 버전 1.1은 Aurora PostgreSQL 버전 10.10 이상 및 Aurora PostgreSQL 11.5 이상에 대한 데이터 활동 스트림 지원을 나타냅니다. 버전 1.1에는 추가 필드
errorMessage
및startTime
이 포함되어 있습니다. 버전 1.2는 Aurora MySQL 2.08 이상에 대한 데이터 활동 스트림 지원을 나타냅니다. 버전 1.2에는 추가 필드endTime
및transactionId
가 포함되어 있습니다. - databaseActivityEvents
-
하나 이상의 활동 이벤트를 나타내는 암호화된 문자열입니다. base64 바이트 배열로 표현됩니다. 문자열을 해독하면 결과는 이 단원의 예제와 같이 필드가 있는 JSON 형식의 레코드입니다.
- 키
-
databaseActivityEvents
문자열을 암호화하는 데 사용되는 암호화된 데이터 키입니다. 이 키는 데이터베이스 활동 스트림을 시작할 때 제공한 AWS KMS key와(과) 동일합니다.
다음 예제에서는 이 레코드의 형식을 보여줍니다.
{
"type":"DatabaseActivityMonitoringRecords",
"version":"1.1",
"databaseActivityEvents":"encrypted audit records
",
"key":"encrypted key
"
}
databaseActivityEvents
필드의 내용을 해독하려면 다음 단계를 수행합니다.
-
데이터베이스 활동 스트림을 시작할 때 제공한 키를 사용하여
key
JSON 필드의 값을 복호화합니다. 이렇게 하면 데이터 암호화 키가 일반 텍스트로 반환됩니다. -
Base64로
databaseActivityEvents
JSON 필드의 값을 디코딩하여 감사 페이로드의 암호화 텍스트를 이진 형식으로 가져옵니다. -
첫 번째 단계에서 디코딩한 데이터 암호화 키를 사용하여 이진 암호화 텍스트를 해독합니다.
-
해독된 페이로드의 압축을 풉니다.
-
암호화된 페이로드가
databaseActivityEvents
필드에 있습니다. -
databaseActivityEventList
필드에는 감사 레코드 배열이 포함되어 있습니다. 배열의type
필드는record
또는heartbeat
일 수 있습니다.
-
감사 로그 활동 이벤트 레코드는 다음 정보가 포함된 JSON 객체입니다.
JSON 필드 | 데이터 형식 | 설명 |
---|---|---|
|
string |
JSON 레코드 형식입니다. 이 값은 |
clusterId |
string | DB 클러스터 리소스 식별자입니다. DB 클러스터 속성 DbClusterResourceId 에 해당합니다. |
instanceId |
string | DB 인스턴스 리소스 식별자입니다. DB 인스턴스 속성 DbiResourceId 에 해당합니다. |
string |
활동 감사 레코드 또는 하트비트 메시지의 배열입니다. |