目录标题
审计功能
MongoDB 默认并不启用审计功能,但企业版(MongoDB Enterprise)提供了内置审计功能(Auditing),可记录用户行为、数据库操作、认证事件等。开启审计功能需满足以下条件并配置相关参数。
✅ 一、前提要求
要求 | 说明 |
---|---|
MongoDB版本 | Enterprise Edition(Community 版不支持审计) |
操作系统 | Linux / Windows |
启动方式 | mongod / mongos 均支持 |
启用认证 | 推荐开启认证模式(--auth ) |
✅ 二、开启审计功能的方式
可以通过以下两种方式启用审计功能:
方式一:通过配置文件 (mongod.conf
)
auditLog:
destination: file
format: BSON
path: /var/log/mongodb/auditLog.bson
filter: '{ atype: { $in: ["authCheck", "insert", "update", "delete", "createCollection"] } }'
方式二:通过命令行启动参数
mongod \
--auth \
--auditDestination file \
--auditFormat BSON \
--auditPath /var/log/mongodb/auditLog.bson \
--auditFilter '{ atype: { $in: ["authCheck", "insert", "update", "delete"] } }'
✅ 三、关键参数说明
参数 | 示例 | 含义 |
---|---|---|
auditLog.destination | file / syslog | 审计日志输出位置(文件或系统日志) |
auditLog.format | BSON / JSON | 日志格式 |
auditLog.path | /var/log/mongodb/auditLog.bson | 日志文件路径 |
auditLog.filter | MongoDB 查询表达式 | 控制记录哪些事件(可选) |
✅ 四、常用事件类型 (atype
)
atype | 说明 |
---|---|
authCheck | 授权检查 |
authenticate | 用户登录 |
logout | 用户退出 |
insert , update , delete | 数据操作 |
createCollection , dropCollection | 集合操作 |
createIndex , dropIndex | 索引操作 |
roleGrant , roleRevoke | 授权/回收角色 |
✅ 五、示例:查看审计日志
MongoDB 的审计日志格式为 BSON,可使用 bsondump
工具将其转为 JSON:
bsondump /var/log/mongodb/auditLog.bson > auditLog.json
cat auditLog.json | jq
✅ 六、注意事项
- 性能影响:审计功能会增加一定开销,建议结合实际业务负载进行评估。
- 日志存储:定期轮转清理审计日志,避免占满磁盘。
- 权限控制:确保审计日志文件的权限设置合理,防止被未授权访问。
- Kubernetes 或容器部署:建议通过 ConfigMap 挂载配置,或使用启动参数传入审计相关设置。
✅ 七、参考资料
- 官方文档:https://www.mongodb.com/docs/manual/core/auditing/
- 审计事件类型:https://www.mongodb.com/docs/manual/reference/audit-message/
如需帮助在容器、Kubernetes、或特定云环境中开启 MongoDB 审计功能,我可以提供具体配置示例。是否需要?
K8s
在 Kubernetes 环境中运行的 MongoDB 开启审计功能(Auditing)时,通常需要结合 ConfigMap 或 args
参数传递配置。以下是基于 MongoDB Enterprise 镜像的完整操作流程:
✅ 1. 前提条件
项目 | 说明 |
---|---|
MongoDB 镜像 | Enterprise 版本(如 mongodb/mongodb-enterprise-server ) |
认证开启 | 建议开启 --auth |
日志挂载 | 审计日志需挂载到持久化卷 |
✅ 2. 创建审计日志目录的 PVC(持久卷声明)
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mongo-audit-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 5Gi
✅ 3. 编写 mongod.conf
包含审计配置
使用 ConfigMap 管理审计配置:
apiVersion: v1
kind: ConfigMap
metadata:
name: mongo-config
data:
mongod.conf: |
storage:
dbPath: /data/db
systemLog:
destination: file
path: /var/log/mongodb/mongod.log
net:
bindIp: 0.0.0.0
port: 27017
security:
authorization: enabled
auditLog:
destination: file
format: BSON
path: /var/log/mongodb/auditLog.bson
filter: '{ atype: { $in: ["authCheck", "insert", "update", "delete"] } }'
✅ 4. 创建 StatefulSet 部署 MongoDB 并启用审计功能
以下是精简示例:
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: mongo
spec:
selector:
matchLabels:
app: mongo
serviceName: "mongo"
replicas: 1
template:
metadata:
labels:
app: mongo
spec:
containers:
- name: mongo
image: mongodb/mongodb-enterprise-server:6.0
command: ["mongod"]
args: ["--config", "/etc/mongo/mongod.conf"]
ports:
- containerPort: 27017
volumeMounts:
- name: config-volume
mountPath: /etc/mongo/
- name: audit-log
mountPath: /var/log/mongodb/
- name: data-volume
mountPath: /data/db
volumes:
- name: config-volume
configMap:
name: mongo-config
- name: audit-log
persistentVolumeClaim:
claimName: mongo-audit-pvc
volumeClaimTemplates:
- metadata:
name: data-volume
spec:
accessModes: [ "ReadWriteOnce" ]
resources:
requests:
storage: 10Gi
✅ 5. 验证审计功能是否开启
-
登录 MongoDB 容器:
kubectl exec -it pod/mongo-0 -- bash
-
查看审计日志是否写入:
bsondump /var/log/mongodb/auditLog.bson | jq
✅ 6. 建议增强点(可选)
增强点 | 说明 |
---|---|
日志轮转 | 定期清理 /var/log/mongodb/auditLog.bson ,避免磁盘填满 |
持久卷备份 | 将审计日志持久化到 S3 或远端进行审计追踪 |
审计分析 | 可集成 Fluent Bit + Elasticsearch 分析审计日志 |
如你还在使用某个 MongoDB Operator(如 MongoDB Community Operator 或 Percona Operator),审计功能开启方式略有不同,可以提供具体操作方式。是否需要我补充 Operator 版本的审计开启示例?