MST

星途 面试题库

面试题:MongoDB服务器安全管理高级技巧

在复杂的网络环境下,如何全面保障MongoDB服务器的安全?请阐述从身份验证、授权机制、网络访问控制到数据加密等多方面的详细安全策略与实施方法,以及在高可用集群环境下如何同步更新安全配置。
44.3万 热度难度
数据库MongoDB

知识考点

AI 面试

面试题答案

一键面试

身份验证

  1. 启用身份验证:在MongoDB配置文件(mongod.conf)中,设置security.authorization: enabled,这样客户端连接时必须提供有效的用户名和密码。
  2. 创建用户:使用mongo shell连接到MongoDB实例,切换到admin数据库,通过db.createUser()命令创建具有管理权限的用户,例如:
use admin
db.createUser(
  {
    user: "adminUser",
    pwd: "password",
    roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
  }
)

然后可以为具体数据库创建用户,如:

use yourDatabase
db.createUser(
  {
    user: "yourUser",
    pwd: "yourPassword",
    roles: [ { role: "readWrite", db: "yourDatabase" } ]
  }
)

授权机制

  1. 角色管理:MongoDB内置了多种角色,如readreadWritedbAdmin等。根据用户需求分配相应角色。例如,对于只读用户,分配read角色;对于读写用户,分配readWrite角色。也可以自定义角色,使用db.createRole()命令创建自定义角色,例如:
use yourDatabase
db.createRole(
  {
    role: "customRole",
    privileges: [
      { resource: { db: "yourDatabase", collection: "" }, actions: [ "find", "insert" ] }
    ],
    roles: []
  }
)
  1. 基于角色的访问控制(RBAC):通过将用户与角色关联,角色与权限关联,实现细粒度的访问控制。当用户连接到MongoDB时,其权限由所关联的角色决定。

网络访问控制

  1. 绑定IP地址:在MongoDB配置文件中,通过net.bindIp参数指定MongoDB服务器监听的IP地址。例如,只监听本地回环地址127.0.0.1,配置为net.bindIp: 127.0.0.1,这样可以防止外部未经授权的访问。如果需要远程访问,可以指定服务器的公网IP地址,但要谨慎操作。
  2. 防火墙设置:配置服务器的防火墙,只允许信任的IP地址或IP段访问MongoDB的端口(默认27017)。例如,在Linux系统上使用iptables命令:
iptables -A INPUT -p tcp --dport 27017 -s trusted_ip_address -j ACCEPT
iptables -A INPUT -p tcp --dport 27017 -j DROP

数据加密

  1. 传输层加密(TLS/SSL)
    • 生成证书:可以使用OpenSSL生成自签名证书,命令如下:
openssl req -newkey rsa:2048 -days 365 -nodes -keyout mongodb.key -out mongodb.csr
openssl x509 -req -in mongodb.csr -days 365 -signkey mongodb.key -out mongodb.crt
- **配置MongoDB**:在`mongod.conf`文件中配置TLS/SSL相关参数,如:
net:
  tls:
    mode: requireTLS
    certificateKeyFile: /path/to/mongodb.pem

将生成的mongodb.keymongodb.crt合并为mongodb.pem文件。客户端连接时也需要配置TLS/SSL相关参数,如在mongo shell中使用--ssl选项连接。 2. 存储层加密(透明数据加密,TDE):从MongoDB 3.6开始支持WiredTiger存储引擎的TDE。配置步骤如下: - 启用加密:在配置文件中设置security.javascriptEnabled: false(关闭JavaScript引擎以提高安全性),并添加storage.wiredTiger.engineConfig.encryptionOptions相关配置,例如:

storage:
  wiredTiger:
    engineConfig:
      encryptionOptions:
        keyFile: /path/to/keyfile
- **生成加密密钥**:使用`openssl rand -base64 96 > /path/to/keyfile`生成密钥文件,并设置合适的文件权限(如`chmod 400 /path/to/keyfile`)。

高可用集群环境下安全配置同步

  1. 副本集
    • 身份验证与授权:在副本集的主节点上进行用户创建和角色管理等操作,副本集内的其他节点会自动同步这些配置。因为副本集内节点之间通过内部复制机制同步数据和元数据,包括用户和角色信息。
    • 网络访问控制:确保所有副本集节点的防火墙配置一致,允许副本集内节点之间的通信以及外部客户端访问所需的端口。可以通过自动化配置工具(如Ansible、Chef等)来统一管理所有节点的防火墙规则。
    • 数据加密:所有副本集节点应使用相同的TLS/SSL证书和密钥进行传输层加密,使用相同的加密密钥进行存储层加密。在配置文件中统一指定证书和密钥的路径,通过配置管理工具确保所有节点的配置一致。
  2. 分片集群
    • 身份验证与授权:在配置服务器(config servers)、分片节点(shards)和路由节点(mongos)上都要启用身份验证和授权,且配置要保持一致。在主配置服务器上创建用户和角色,这些配置会通过内部机制同步到其他配置服务器以及整个集群。
    • 网络访问控制:对配置服务器、分片节点和路由节点分别进行网络访问控制配置,确保各组件之间以及与外部客户端的通信安全。同样可以使用自动化工具统一管理配置。
    • 数据加密:所有组件都要配置相同的TLS/SSL证书和密钥进行传输层加密,相同的加密密钥进行存储层加密。通过配置管理工具保证所有节点配置同步更新。