审核 Amazon DocumentDB 事件 - Amazon DocumentDB
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

审核 Amazon DocumentDB 事件

使用 Amazon DocumentDB(与 MongoDB 兼容),您可以审核集群中执行的事件。记录的事件的示例包括成功和失败的身份验证尝试、删除数据库中的集合或创建索引。默认情况下,在 Amazon DocumentDB 上禁用审计,并要求您选择使用该功能。

启用审计后,Amazon DocumentDB 会将数据定义语言 (DDL)、数据操纵语言 (DML)、身份验证、授权和用户管理事件记录到亚马逊日志。 CloudWatch 启用审计后,Amazon DocumentDB 会将集群的审计记录(JSON 文档)导出到亚马逊 CloudWatch 日志。您可以使用亚马逊 CloudWatch 日志来分析、监控和存档您的 Amazon DocumentDB 审计事件。

尽管 Amazon DocumentDB 不收取额外费用来启用审计,但您需要为日志的 CloudWatch 使用支付标准费率。有关 CloudWatch 日志定价的信息,请参阅 Amazon CloudWatch 定价

Amazon DocumentDB 审计功能与监控的服务资源使用情况明显不同。 Amazon CloudTrail CloudTrail 记录使用 Amazon Command Line Interface (Amazon CLI) 或 Amazon Web Services Management Console 对集群、实例、参数组和快照等资源执行的操作。默认情况下,带的资源审计 CloudTrail 处于开启状态,无法禁用。Amazon DocumentDB 审计功能是一种可选功能。它记录在集群中对对象(例如数据库、集合、索引和用户)采取的操作。

支持的事件

Amazon DocumentDB 审核支持以下事件类别:

  • 数据定义语言 (DDL) - 包括数据库管理操作、连接、用户管理和授权。

  • 数据操作语言读取事件(DML 读取) - 包括 find() 和各种聚合运算符、算术运算符、布尔运算符和其他读取查询运算符。

  • 数据操纵语言写入事件(DML 写入) - 包括 insert(), update(), delete(),bulkWrite() 运算符

事件类型如下所示。

事件类型 类别 描述
authCheck 授权 结果代码 0:成功
结果代码 13:未经授权的执行操作的尝试。
authenticate Connection 对新连接进行的成功或失败的身份验证尝试。
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 写入 将一个或多个文档插入到集合中。
delete DML 写入 从集合中删除一个或多个文档。
update DML 写入 修改集合中的一个或多个现有文档。
bulkWrite DML 写入 通过控制执行顺序执行多个写入操作。
setAuditConfig DML 写入 为 DML 审核设置新的筛选器。
count DML 读取 返回与集合或视图的 find () 查询相匹配的文档数量。
countDocuments DML 读取 返回与集合或视图查询相匹配的文档数量。
find DML 读取 选择集合或视图中的文档,然后将光标返回到所选文档。
getAuditConfig DML 读取 检索 DML 审核的当前筛选器。
findAndModify DML 读取 和 DML 写入 修改并返回单个文档。
findOneAndDelete DML 读取 和 DML 写入 根据筛选和排序标准删除单个文档,返回已删除的文档。
findOneAndReplace DML 读取 和 DML 写入 根据指定的筛选器替换单个文档。
findOneAndUpdate DML 读取 和 DML 写入 根据筛选和排序标准更新单个文档。
aggregate DML 读取 和 DML 写入 APIs 在聚合管道中提供支持。
distinct DML 读取 在单个集合或视图中查找指定字段的不同值,并在数组中返回结果。
注意

DML 事件文档参数字段中的值的大小限制为 1KB。如果该值超过 1KB,Amazon DocumentDB 将截断该值。

注意

目前不审核 TTL 删除事件。

启用审核

在集群上启用审核是一个两步过程。确保两个步骤都已完成,否则审核日志将不会发送到 CloudWatch 日志。

第 1 步:启用 audit_logs 集群参数

要启用审核,您需要修改参数组中的 audit_logs 参数。audit_logs 是要记录的事件列表,以逗号分隔。事件必须以小写形式指定,列表元素之间不应有空格。

您可以为参数组设置以下值:

描述
ddl 设置此设置将启用对 DDL 事件的审计,例如 createDatabase、DropDatabase、CreateCollection、DropCollection、createIndex、authCheck、身份验证、创建用户、DropUser、用户、UpdateUser 和 grantRolesTo revokeRolesFrom dropAllUsers FromDatabase
dml_read 设置此设置将启用对 DML 读取事件的审计,例如查找、排序计数、非重复、群组、项目、展开、GeoEar、GeoIntersects、GeoIntersects、GeoWithin 和其他 MongoDB 读取查询运算符。
dml_write 设置此项将启用对 DML 写入事件的审核,例如 insert()、update()、delete() 和 bulkWrite()
all 设置此项将启用对数据库事件的审核,例如读取查询、写入查询、数据库操作和管理员操作。
none 设置此项将禁用审核
enabled(传统) 这是一个等同于“ddl”的传统参数设置。设置此设置将启用对 DDL 事件的审计,例如 createDatabase、DropDatabase、CreateCollection、DropCollection、createIndex、authCheck、身份验证、创建用户、Drop grantRolesTo User、用户、UpdateUser 和。 revokeRolesFrom dropAllUsers FromDatabase我们不建议使用此设置,因为它是传统设置。
disabled (传统) 这是一个等同于“无”的传统参数设置。我们不建议使用此设置,因为它是传统设置。
注意

audit_logs 集群参数的默认值为 none(传统“disabled”)。

您也可以组合使用上述值。

描述
ddl, dml_read 设置此项将启用对 DDL 事件和 DML 读取事件的审核。
ddl, dml_write 设置此项将启用对 DDL 事件和 DML 写入的审核
dml_read, dml_write 设置此项将启用对所有 DML 事件的审核
注意

您无法修改默认参数组。

有关更多信息,请参阅下列内容:

第 2 步:启用 Amazon CloudWatch 日志导出

audit_logs集群参数的值为enabledddldml_readdml_write、或时,您还必须启用 Amazon DocumentDB 以将日志导出到亚马逊。 CloudWatch如果您省略了这两个步骤中的任何一个,则审核日志将不会发送到。 CloudWatch

在创建集群、执行或恢复快照时,您可以按照以下步骤启用 CloudWatch 日志。 point-in-time-restore

Using the Amazon Web Services Management Console

要启用 Amazon DocumentDB CloudWatch 使用控制台将日志导出到,请参阅以下主题:

Using the Amazon CLI
在创建新集群时启用审计日志

以下代码创建集群sample-cluster并启用 CloudWatch 审计日志。

对于 Linux、macOS 或 Unix:

aws docdb create-db-cluster \ --db-cluster-identifier sample-cluster \ --port 27017 \ --engine docdb \ --master-username master-username \ --master-user-password password \ --db-subnet-group-name default \ --enable-cloudwatch-logs-exports audit

对于 Windows:

aws docdb create-db-cluster ^ --db-cluster-identifier sample-cluster ^ --port 27017 ^ --engine docdb ^ --master-username master-username ^ --master-user-password password ^ --db-subnet-group-name default ^ --enable-cloudwatch-logs-exports audit
在修改现有集群时启用审计日志

以下代码修改集群sample-cluster并启用 CloudWatch 审计日志。

对于 Linux、macOS 或 Unix:

aws docdb modify-db-cluster \ --db-cluster-identifier sample-cluster \ --cloudwatch-logs-export-configuration '{"EnableLogTypes":["audit"]}'

对于 Windows:

aws docdb modify-db-cluster ^ --db-cluster-identifier sample-cluster ^ --cloudwatch-logs-export-configuration '{"EnableLogTypes":["audit"]}'

这些操作的输出将类似于下文(JSON 格式)。

{ "DBCluster": { "HostedZoneId": "ZNKXH85TT8WVW", "StorageEncrypted": false, "DBClusterParameterGroup": "default.docdb4.0", "MasterUsername": "<user-name>", "BackupRetentionPeriod": 1, "Port": 27017, "VpcSecurityGroups": [ { "Status": "active", "VpcSecurityGroupId": "sg-77186e0d" } ], "DBClusterArn": "arn:aws:rds:us-east-1:900083794985:cluster:sample-cluster", "Status": "creating", "Engine": "docdb", "EngineVersion": "4.0.0", "MultiAZ": false, "AvailabilityZones": [ "us-east-1a", "us-east-1c", "us-east-1f" ], "DBSubnetGroup": "default", "DBClusterMembers": [], "ReaderEndpoint": "sample-cluster.cluster-ro-corcjozrlsfc.us-east-1.docdb.amazonaws.com", "EnabledCloudwatchLogsExports": [ "audit" ], "PreferredMaintenanceWindow": "wed:03:08-wed:03:38", "AssociatedRoles": [], "ClusterCreateTime": "2019-02-13T16:35:04.756Z", "DbClusterResourceId": "cluster-YOS52CUXGDTNKDQ7DH72I4LED4", "Endpoint": "sample-cluster.cluster-corcjozrlsfc.us-east-1.docdb.amazonaws.com", "PreferredBackupWindow": "07:16-07:46", "DBClusterIdentifier": "sample-cluster" } }

禁用审核

您可以通过禁用 CloudWatch 日志导出和禁用audit_logs参数来禁用审计。

禁用 CloudWatch 日志导出

您可以使用 Amazon Web Services Management Console 或禁用导出审核日志 Amazon CLI。

Using the Amazon Web Services Management Console

以下过程使用禁用 Amazon DocumentDB Amazon Web Services Management Console 将日志导出到。 CloudWatch

禁用审计日志
  1. 登录 Amazon Web Services Management Console,然后在 /docdb 上打开亚马逊文档数据库控制台。https://console.aws.amazon.com

  2. 在导航窗格中,选择集群。然后,选择要禁用导出日志的集群名称左侧的按钮。

  3. 选择 Actions (操作),然后选择 Modify (修改)

  4. 向下滚动到 Log exports (日志导出) 部分并选择 Disabled (已禁用)

  5. 选择继续

  6. 检查更改,然后选择何时将该更改应用到集群。

    • Apply during the next scheduled maintenance window (在下一个计划的维护时段内应用)

    • Apply immediately (立即应用)

  7. 选择修改集群

Using the Amazon CLI

以下代码修改集群sample-cluster并禁用 CloudWatch 审计日志。

对于 Linux、macOS 或 Unix:

aws docdb modify-db-cluster \ --db-cluster-identifier sample-cluster \ --cloudwatch-logs-export-configuration '{"DisableLogTypes":["audit"]}'

对于 Windows:

aws docdb modify-db-cluster ^ --db-cluster-identifier sample-cluster ^ --cloudwatch-logs-export-configuration '{"DisableLogTypes":["audit"]}'

此操作的输出将类似于下文(JSON 格式)。

{ "DBCluster": { "DBClusterParameterGroup": "default.docdb4.0", "HostedZoneId": "ZNKXH85TT8WVW", "MasterUsername": "<user-name>", "Status": "available", "Engine": "docdb", "Port": 27017, "AvailabilityZones": [ "us-east-1a", "us-east-1c", "us-east-1f" ], "EarliestRestorableTime": "2019-02-13T16:35:50.387Z", "DBSubnetGroup": "default", "LatestRestorableTime": "2019-02-13T16:35:50.387Z", "DBClusterArn": "arn:aws:rds:us-east-1:900083794985:cluster:sample-cluster2", "Endpoint": "sample-cluster2.cluster-corcjozrlsfc.us-east-1.docdb.amazonaws.com", "ReaderEndpoint": "sample-cluster2.cluster-ro-corcjozrlsfc.us-east-1.docdb.amazonaws.com", "BackupRetentionPeriod": 1, "EngineVersion": "4.0.0", "MultiAZ": false, "ClusterCreateTime": "2019-02-13T16:35:04.756Z", "DBClusterIdentifier": "sample-cluster2", "AssociatedRoles": [], "PreferredBackupWindow": "07:16-07:46", "DbClusterResourceId": "cluster-YOS52CUXGDTNKDQ7DH72I4LED4", "StorageEncrypted": false, "PreferredMaintenanceWindow": "wed:03:08-wed:03:38", "DBClusterMembers": [], "VpcSecurityGroups": [ { "Status": "active", "VpcSecurityGroupId": "sg-77186e0d" } ] } }

禁用 audit_logs 参数

要禁用集群的 audit_logs 参数,您可以修改集群,使其使用 audit_logs 参数值为 disabled 的参数组。或者,您可以修改集群的参数组中的 audit_logs 参数值,使其为 disabled

有关更多信息,请参阅以下主题:

访问审核事件

使用以下步骤访问您在 Amazon 上的审计事件 CloudWatch。

  1. 打开 CloudWatch 控制台,网址为https://console.aws.amazon.com/cloudwatch/

  2. 确保您与 Amazon DocumentDB 集群位于同一区域。

  3. 在导航窗格中,选择日志

  4. 要查找集群的审核日志,请从列表中找到并选择 /aws/docdb/yourClusterName/audit

    此时,每个实例名称的下方将显示该实例的审计事件。

筛选 DML 审核事件

开始使用 DML 审核筛选

可以在 DML 审计事件写入 Amazon CloudWatch 之前对其进行过滤。要利用此功能,必须启用审核日志和 DML 日志记录。Amazon DocumentDB 支持 atypecommandusernamespaceauditAuthorizationSuccess 筛选。

注意

不筛选 DDL 事件。

可以在 db.adminCommand( { command } ) 操作中使用 setAuditConfigfilterauditAuthorizationSuccess 参数指定审核筛选器,随时启用审核筛选:

db.admin.runCommand( { setAuditConfig: 1, filter: { //filter conditions }, auditAuthorizationSuccess: true | false } )

还可以通过运行以下命令检索审核筛选器设置:

db.admin.runCommand( { getAuditConfig: 1})

安全要求

在设置或列出 DML 审核筛选器时,只有具有特权操作 auditConfigure 的数据库用户/角色才能对 admindb 执行上述命令。您可以使用 [clusterAdminhostManagerroot] 中的内置角色之一,也可以创建具有 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 日志均有 atype 类型的 authCheck。只有 DDL 具有不同的 atype。如果您authCheck在中输入了以外的值filter,它将不会生成 DML 登录 CloudWatch。

示例:使用由运算符连接的多个筛选器进行筛选

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 中使用时,该命令不会进行日志记录,因为两个条件之间有一个隐含的“和”。在此示例中,正则表达式将阻止 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 } )