기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
Amazon DocumentDB 이벤트 감사
Amazon DocumentDB(MongoDB 호환)에서는 클러스터에서 수행된 이벤트를 감사할 수 있습니다. 기록되는 이벤트의 예로는 성공 또는 실패한 인증 시도, 데이터베이스에서 모음 삭제 또는 인덱스 생성이 있습니다. 기본적으로 Amazon DocumentDB에서 감사는 비활성화되어 있으므로 사용자가 이 기능을 선택해야 합니다.
감사가 활성화되면 Amazon DocumentDB가 데이터 정의 언어(DDL), 데이터 조작 언어(DML), 인증, 권한 부여 및 사용자 관리 이벤트를 Amazon CloudWatch Logs에 기록합니다. 감사가 활성화되면 Amazon DocumentDB가 클러스터의 감사 기록(JSON 문서)을 Amazon CloudWatch Logs로 내보냅니다. Amazon CloudWatch Logs를 사용하여 Amazon DocumentDB 감사 이벤트를 분석, 모니터링 및 보관할 수 있습니다.
Amazon DocumentDB가 감사 활성화에 대해 추가 요금을 부과하지는 않지만 CloudWatch Logs 사용에 따른 표준 요금이 부과됩니다. CloudWatch Logs 요금에 대한 자세한 내용은 Amazon CloudWatch 요금
Amazon DocumentDB 감사 기능은 AWS CloudTrail로 모니터링할 때 사용하는 서비스 리소스 사용량과는 확연히 다릅니다. CloudTrail은 클러스터, 인스턴스, 파라미터 그룹, 스냅샷과 같은 AWS Command Line Interface(AWS CLI) 또는 AWS Management Console 등의 리소스에서 수행되는 작업을 기록합니다. CloudTrail을 사용한 리소스에 대한 감사는 기본적으로 활성화되어 있으며 비활성화할 수 없습니다. Amazon DocumentDB 감사 기능은 옵트인 기능입니다. 데이터베이스, 컬렉션, 인덱스 및 사용자와 같은 객체의 클러스터 내에서 발생하는 작업을 기록합니다.
지원되는 이벤트
Amazon DocumentDB 감사는 다음 이벤트 카테고리를 지원합니다.
-
데이터 정의 언어 (DDL) - 데이터베이스 관리 작업, 연결, 사용자 관리 및 권한 부여를 포함합니다.
-
데이터 조작 언어 읽기 이벤트(DML 읽기) -
find()
및 다양한 집계 연산자, 산술 연산자, 부울 연산자 및 기타 읽기 쿼리 연산자를 포함합니다. -
데이터 조작 언어 쓰기 이벤트(DML 쓰기) -
insert(), update(), delete(),
및bulkWrite()
연산자를 포함합니다
이벤트 유형은 다음과 같습니다.
이벤트 유형 | 범주 | 설명 |
---|---|---|
authCheck |
권한 부여 | 결과 코드 0: 성공 |
결과 코드 13: 권한 없이 작업을 수행하려는 시도. | ||
authenticate |
연결 | 새로운 연결에서 성공 또는 실패한 인증 시도. |
auditConfigure |
DDL | 감사 필터 구성. |
createDatabase |
DDL | 새 데이터베이스 생성. |
createCollection |
DDL | 데이터베이스 내에서 새 모음 생성. |
createIndex |
DDL | 모음 내에서 새 인덱스 생성. |
dropCollection |
DDL | 데이터베이스에서 모음 삭제. |
dropDatabase |
DDL | 데이터베이스 삭제. |
dropIndex |
DDL | 모음에서 인덱스 삭제. |
modifyChangeStreams |
DDL | 변경 스트림 생성. |
renameCollection |
DDL | 데이터베이스 내에서 컬렉션 이름을 변경. |
createRole |
관리 역할 | 역할 생성 |
dropAllRolesFromDatabase |
관리 역할 | 데이터베이스에서 모든 역할 삭제. |
dropRole |
관리 역할 | 역할 삭제. |
grantPrivilegesToRole |
관리 역할 | 역할에 권한 부여. |
grantRolesToRole |
관리 역할 | 사용자 정의 역할에 역할 부여. |
revokePrivilegesFromRole |
관리 역할 | 역할의 권한 취소. |
revokeRolesFromRole |
관리 역할 | 사용자 정의 역할에서 역할 취소. |
updateRole |
관리 역할 | 역할 업데이트. |
createUser |
사용자 관리 | 새 사용자 생성. |
dropAllUsersFromDatabase |
사용자 관리 | 데이터베이스에서 모든 사용자 삭제. |
dropUser |
사용자 관리 | 기존 사용자 삭제. |
grantRolesToUser |
사용자 관리 | 사용자에게 역할 부여. |
revokeRolesFromUser |
사용자 관리 | 사용자의 역할 취소. |
updateUser |
UserManagement | 기존 사용자 업데이트. |
insert |
DML 쓰기 | 컬렉션에 1개 또는 여러 문서를 삽입합니다. |
delete |
DML 쓰기 | 컬렉션에서 1개 또는 여러 문서를 삭제합니다. |
update |
DML 쓰기 | 컬렉션에 있는 기존 문서 또는 여러 문서를 수정합니다. |
bulkWrite |
DML 쓰기 | 실행 순서를 제어하여 여러 쓰기 작업을 수행합니다. |
setAuditConfig |
DML 쓰기 | DML 감사를 위한 새 필터를 설정합니다. |
count |
DML 읽기 | 컬렉션 또는 뷰의 find() 쿼리와 일치하는 문서 수를 반환합니다. |
countDocuments |
DML 읽기 | 컬렉션 또는 뷰의 쿼리와 일치하는 문서 수를 반환합니다. |
find |
DML 읽기 | 컬렉션 또는 뷰에서 문서를 선택하고 선택한 문서에 커서를 반환합니다. |
getAuditConfig |
DML 읽기 | DML 감사를 위해 현재 필터를 검색합니다. |
findAndModify |
DML 읽기 및 DML 쓰기 | 1개의 문서를 수정 및 반환합니다. |
findOneAndDelete |
DML 읽기 및 DML 쓰기 | 필터 및 정렬 기준에 따라 단일 문서를 삭제하고 삭제된 문서를 반환합니다. |
findOneAndReplace |
DML 읽기 및 DML 쓰기 | 지정된 필터를 기반으로 단일 문서를 대체합니다. |
findOneAndUpdate |
DML 읽기 및 DML 쓰기 | 필터 및 정렬 기준에 따라 단일 문서를 업데이트합니다. |
aggregate |
DML 읽기 및 DML 쓰기 | 집계 파이프라인의 API를 지원합니다. |
distinct |
DML 읽기 | 단일 컬렉션 또는 뷰에서 지정된 필드의 고유 값을 찾아 결과를 배열로 반환합니다. |
참고
DML 이벤트 문서 매개 변수 필드의 값에는 1KB 크기 제한이 있습니다. Amazon DocumentDB는 값이 1KB를 초과하는 경우 값을 잘라냅니다.
참고
TTL 삭제 이벤트는 현재 감사되지 않습니다.
감사 활성화
클러스터에서 감사를 활성화하는 절차는 두 단계로 이루어져 있습니다. 두 단계를 모두 완료하지 않으면 감사 로그가 CloudWatch Logs로 전송되지 않습니다.
단계 1. audit_logs 클러스터 파라미터 활성화
감사를 활성화하려면 파라미터 그룹에서 audit_logs
파라미터를 수정해야 합니다. audit_logs
는 로깅할 이벤트의 쉼표로 구분된 목록입니다. 이벤트는 모두 소문자로 지정해야 하며 목록 항목 사이에 공백이 없어야 합니다.
이 파라미터 그룹에 대해 다음 값을 지정할 수 있습니다.
값 | 설명 |
---|---|
ddl |
이를 설정하면 createDatabase, dropDatabase, createCollection, dropCollection, createIndex, dropIndex, authCheck, authenticate, createUser, dropUser, grantRolesToUser, revokeRolesFromUser, updateUser, dropAllUsersFromDatabase 등과 같은 DDL 이벤트에 대한 감사가 활성화됩니다 |
dml_read |
이를 설정하면 찾기, 정렬 횟수, 고유, 그룹, 프로젝트, 언와인드, geoNear, geoIntersects, geoWithin 및 기타 MongoDB 읽기 쿼리 연산자와 같은 DML 읽기 이벤트를 감사할 수 있습니다. |
dml_write |
이를 설정하면 insert(), update(), delete() 및 bulkWrite()와 같은 DML 쓰기 이벤트에 대한 감사가 활성화됩니다. |
all |
이를 설정하면 쿼리 읽기, 쿼리 쓰기, 데이터베이스 작업 및 관리자 작업과 같은 데이터베이스 이벤트를 감사할 수 있습니다. |
none |
이렇게 설정하면 감사가 비활성화됩니다. |
enabled (레거시) |
이는 'ddl'과 동일한 레거시 파라미터 설정입니다. 이를 설정하면 ccreateDatabase, dropDatabase, createCollection, dropCollection, createIndex, dropIndex, authCheck, authenticate, createUser, dropUser, grantRolesToUser, revokeRolesFromUser, updateUser, dropAllUsersFromDatabase 등과 같은 DDL 이벤트에 대한 감사가 활성화됩니다 이것은 레거시 설정이므로 이 설정을 사용하지 않는 것이 좋습니다. |
disabled (레거시) |
이는 'none'과 동일한 레거시 파라미터 설정입니다. 이것은 레거시 설정이므로 이 설정을 사용하지 않는 것이 좋습니다. |
참고
audit_logs 클러스터 매개변수의 기본값은 none
(레거시 ‘disabled
‘)입니다.
위에서 언급한 값을 조합하여 사용할 수도 있습니다.
값 | 설명 |
---|---|
ddl, dml_read |
이를 설정하면 DDL 이벤트 및 DML 읽기 이벤트를 감사할 수 있습니다. |
ddl, dml_write |
이를 설정하면 DDL 이벤트 및 DML 읽기를 감사할 수 있음 |
dml_read, dml_write |
이를 설정하면 모든 DDL 이벤트를 감사할 수 있음 |
참고
기본 파라미터 그룹은 수정할 수 없습니다.
자세한 내용은 다음 자료를 참조하세요.
-
Amazon DocumentDB 클러스터 파라미터 그룹 생성
사용자 지정 파라미터 그룹을 생성한 후
audit_logs
파라미터 값을all
로 변경하여 파라미터 그룹을 수정합니다.
단계 2. Amazon CloudWatch Logs 내보내기 활성화
audit_logs
클러스터 파라미터의 값을 enabled
, ddl
, dml_read
, dml_write
로 설정한 경우 이와 동시에 Amazon DocumentDB가 Amazon CloudWatch로 로그를 내보내도록 활성화해야 합니다. 이들 단계를 하나라도 생략하면 감사 로그가 CloudWatch로 전송되지 않습니다.
클러스터를 생성하거나, 특정 시점 복원을 수행하거나, 스냅샷을 복원할 때 다음 단계에 따라 CloudWatch Logs를 활성화할 수 있습니다.
감사 비활성화
CloudWatch Logs 내보내기를 비활성화하고 audit_logs
파라미터를 비활성화하여 감사를 비활성화할 수 있습니다.
CloudWatch Logs 내보내기 비활성화
AWS Management Console 또는 AWS CLI를 사용하여 감사 로그 내보내기를 비활성화할 수 있습니다.
audit_logs 파라미터 비활성화
클러스터에 대한 audit_logs
파라미터를 비활성화하려면 audit_logs
파라미터 값이 disabled
인 파라미터 그룹을 사용하도록 클러스터를 수정하면 됩니다. 또는 클러스터의 파라미터 그룹에서 audit_logs
파라미터 값을 disabled
로 수정하면 됩니다.
자세한 정보는 다음 주제를 참조하세요.
감사 이벤트 액세스
다음 단계에 따라 Amazon CloudWatch에서 감사 이벤트에 액세스합니다.
https://console.aws.amazon.com/cloudwatch/
에서 CloudWatch 콘솔을 엽니다. -
사용자가 Amazon DocumentDB 클러스터와 동일한 리전에 있어야 합니다.
-
탐색 창에서 로그를 선택합니다.
-
클러스터에 대한 감사 로그를 찾으려면 목록에서
/aws/docdb/
을 찾아 선택합니다.yourClusterName
/audit각 인스턴스에 대한 감사 이벤트는 해당 인스턴스 이름 아래에서 찾을 수 있습니다.
DML 감사 이벤트 필터링
DML 감사 필터링 시작하기
DML 감사 이벤트는 Amazon CloudWatch에 기록되기 전에 필터링할 수 있습니다. 이 기능을 사용하려면 감사 로그 및 DML 로깅을 활성화해야 합니다. Amazon DocumentDB는 atype
, command
, user
, namespace
및 auditAuthorizationSuccess
에서 필터링을 지원합니다.
참고
DDL 이벤트는 필터링되지 않습니다.
db.adminCommand( { command } )
작업에서 setAuditConfig
, filter
및 auditAuthorizationSuccess
파라미터를 사용해 감사 필터를 지정하여 언제든지 감사 필터링을 활성화할 수 있습니다.
db.admin.runCommand( { setAuditConfig: 1, filter: { //filter conditions }, auditAuthorizationSuccess: true | false } )
다음 명령을 실행하여 감사 필터 설정을 검색할 수도 있습니다.
db.admin.runCommand( { getAuditConfig: 1})
보안 요구 사항
권한이 있는 auditConfigure
작업이 있는 데이터베이스 사용자/역할만 DML 감사 필터를 설정하거나 나열할 때 admindb
에 대한 명령을 실행할 수 있습니다. [clusterAdmin
, hostManager
, root
]에서 기본 제공 역할 중 하나를 사용하거나 auditConfigure
권한이 있는 사용자 지정 역할을 생성할 수 있습니다. 다음은 auditConfigure
권한과 함께 기존 역할을 사용하는 예제와 사용자 지정 역할을 사용하는 예제입니다.
역할이 내장된 사용자:
use admin db.createUser( { user: "myClusterAdmin", pwd: "password123", roles: [ { role: "clusterAdmin", db: "admin" } ] } )
사용자 지정 역할이 있는 사용자:
use admin db.createRole( { role: "myRole", privileges: [ { resource: { cluster: true }, actions: [ "auditConfigure" ] } ], roles: [] } ) db.createUser( { user: "myUser", pwd: "myPassword", roles: [ { role: "myRole", db: "admin" } ] } )
사용 사례 필터링
예: 명령을 기준으로 이벤트 필터링
db.admin.runCommand( { setAuditConfig: 1, filter: { "$and": [ { "param.command": { $in: [ "find","count", "insert", "delete", "update", "findandmodify" ] } } ] }, auditAuthorizationSuccess: true } )
예: 사용자 이름으로 이벤트 필터링
이 예제에서는 사용자 "myUser"만 로깅됩니다.
db.admin.runCommand( { setAuditConfig: 1, filter: { "$and": [ { "param.user": { $in: [ "myUser" ] } } ]}, auditAuthorizationSuccess: true})
예제: atype
항목을 사용해 필터링
db.admin.runCommand( { setAuditConfig: 1, filter: {atype: "authCheck"}, auditAuthorizationSuccess: true })
참고
모든 DML 로그의 authCheck
항목은 atype
입니다. DDL의 경우만 atype
항목이 다릅니다. filter
에서 authCheck
이외의 값을 입력하면 CloudWatch 에서 DML 로그가 생성되지 않습니다.
예: 연산자가 조인한 여러 필터를 사용하여 필터링
db.admin.runCommand( { setAuditConfig: 1, filter: { "$and": [ { "param.command": { $in: [ "find","count", "insert", "delete", "update", "findandmodify" ] } } ], "$nor": [ { "param.command": { $in: ["count", "insert", "delete", "update", "findandmodify" ] } }] }, auditAuthorizationSuccess: true})
참고
최상위 수준에서는 $and
, $or
, 및 $nor
항목만 지원됩니다. 다른 연산자는 지원되지 않으며 오류가 발생합니다.
예: auditAuthorizationSuccess
의 이벤트를 기준으로 필터링
이 필터에서는 권한 부여를 성공적으로 통과한 모든 명령이 로그되지 않습니다.
db.admin.runCommand( { setAuditConfig: 1, filter: {}, auditAuthorizationSuccess: false } )
예: $in
및 $nin
조건을 사용한 필터링
$in
및 $nin
에서 둘 다 사용하는 경우 조건 간에 암시적인 'and'가 존재하므로 명령이 로그되지 않습니다. 이 예제에서는 정규식이 find
명령을 차단하므로 아무 것도 로그되지 않습니다.
db.admin.runCommand( { setAuditConfig: 1, filter: { "$and": [ { atype: "authCheck", "param.command": { $in: [ "find", "insert", "delete", "update", "findandmodify" ], $nin: ["count", "insert", "delete", "update", "findandmodify" ], $not: /^^find.*/ } }, ], "$or": [ { "param.command": { $nin: ["count", "insert", "delete", "update", "findandmodify" ] } }] }, auditAuthorizationSuccess: true})
예제: namespace
항목을 사용해 필터링
db.admin.runCommand( { setAuditConfig: 1, filter: { "$and": [ { "param.ns": { $in: [ "test.foo" ] } } ]}, auditAuthorizationSuccess: true})
예제: 기본 필터로 재설정
기본값으로 재설정하면 모든 DML 감사 이벤트가 로그됩니다. 필터링을 기본값으로 재설정하려면 다음 명령을 실행합니다.
db.admin.runCommand( { setAuditConfig: 1, filter: {}, auditAuthorizationSuccess: true } )