[mongo] 安全架构

mongo DB 安全架构

MongoDB 安全架构一览图

  • 3A+encrypt
  • image

MongoDB 用户认证方式

  • image

MongoDB 集群节点认证

  • Keyfile:将统一 Keyfile 文件拷贝到不同的节点
    Keyfile 就是一个字符串
  • X.509: 基于证书的认证模式,推荐不同的节点使用不同的证书
  • image

MongoDB 鉴权 – 基于角色的权限机制

  • MongoDB 授权基于角色的权限控制,不同的权限的用户对数据库的操作不同

角色的组成

  • image

MongoDB 内置角色及权限继承关系

  • image

自定义角色

db.createRole( {
role: 'sampleRole', 
privileges: [{
resource: {
db: 'sampledb', collection: 'sample'
}, 
actions: ["update"]
}],
roles: [{
role: 'read', 
db: 'sampledb'
}]
} )
db.createUser( {
user: 'sampleUser', 
pwd: 'password', 
roles: [{role: 'sampleRole', db: 'admin'}]
} )

传输加密

  • MongoDB 支持 TLS/SSL 来加密 MongoDB 的所有网络传输(客户端应用和服务器端之间,内部复制集之间)。
    TLS/SSL 确保 MongoDB 网络传输仅可由允许的客户端读取

落盘加密

  • 生成 master key,用来加密每一个数据库的 key
  • 生成每一个数据库的 key,用来加密各自的数据库
  • 基于生成的数据库 key 加密各个数据库中的数据
  • Key 管理(只针对 master key,数据库 key 保存在数据库内部)

字段级加密

  • 单独文档字段通过自身密钥加密

  • 数据库只看见密文

  • 优势

    • 便捷:自动及透明
    • 任务分开:(简化基于服务的系统步骤,因为没有服务工程师能够看到纯文本)
    • 合规:监管“被遗忘权”
    • 快速:最小性能代偿
  • image

审计

  • 数据库等记录型系统通常使用审计监控数据库相关的一些活动,以及对一些可疑的
    操作进行调查
  • 本地文件 或 syslog,
  • 记录内容:Schema change (DDL),CRUD 操作 (DML),用户认证

审计配置参数举例

  • 审计日志记录到 syslog

    • –auditDestination syslog
  • 审计日志记录写到指定文件

    • –auditDestination file --auditFormat JSON --auditPath /path/to/auditLog.json
  • 对删表和创建表动作进行审计日志记录

    • –auditDestination file --auditFormat JSON --auditPath auditLog.json –
      auditFilter '{atype: {$in: [“createCollection”, “dropCollection”]}}’

MongoDB 安全架构总结

  • image

安全加固实践

合理配置权限

• 创建管理员
• 使用复杂密码
• 不同用户不同账户
• 应用隔离
• 最小权限原则

启用加密

• 使用 TLS 作为传输协议
• 使用4.2版本的字段级加密对敏感字段加密
• 如有需要,使用企业版进行落盘加密
• 如有需要,使用企业版并启用审计日志

网络和操作系统加固

  • 使用专用用户运行 MongoDB
    • 不建议在操作系统层使用 root 用户运行 MongoDB
  • 限制网络开放度
    ■ 通过防火墙,iptables 规则控制对 MongoDB 的访问
    ■ 使用 VPN/VPCs 可以创建一个安全通道,MongoDB 服务不应该直接暴露在互联网上
    ■ 使用白名单列表限制允许访问的网段
    ■ 使用 bind_ip 绑定一个具体地址
    ■ 修改默认监听端口:27017
  • 使用安全配置选项运行 MongoDB
    ■ 如果不需要执行 JavaScript 脚本,使用 --noscripting 禁止脚本执行
    ■ 如果使用老版本 MongoDB,关闭 http 接口 : net.http.enabled = False net.http.JSONPEnabled = False
    ■ 如果使用老版本 MongoDB,关闭 Rest API 接口: net.http.RESTInterfaceEnabled = False

Demo

  • 方式一: 命令行方式通过 “–auth” 参数
  • 方式二: 配置文件方式在 security 下添加 “authorization: enabled”
mongod –-auth –-port 27017 –-dbpath /data/db
mongo 
> use admin
> db.createUser({user: "superuser", pwd: "password", roles: [{role: "root", db: 
"admin"}]} )
  • 安全登录,执行如下命令查看认证机制
mongo -u superuser -p password --authenticationDatabase admin 
db.runCommand({getParameter: 1, authenticationMechanisms: 1})

创建应用用户

db.createUser({user: "reader", pwd: "abc123", roles: [{ role:"read", db: "acme" }]})
db.createUser({user: "writer", pwd: "abc123", roles: [{ role:"readWrite", db: "acme" }]})
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值