MongoDB数据库安全性的6个关键

由于最近涉及大公司的数据泄漏,安全再次成为趋势话题。 例如, 据ZDNet报道 ,中国公司泄露了令人惊讶的5.9亿张简历。 大部分简历泄漏是由于数据库安全性差而导致的,这些数据库在没有密码的情况下一直处于联机状态,或者由于意外的防火墙错误而最终联机。 在本文提到的八种黑客中,只有一种与MongoDB有关,但这种违规约占暴露的文档的三分之一。

在另一起举报的案件中 ,印度政府机构保留了数百万在线暴露的孕妇的详细信息。 公开的数据包含有关患者,医生和医疗中心的详细信息。 在撰写本文时,MongoDB数据库仍然在没有密码的情况下在线公开。 好消息是,病历已从数据库中删除。

由于其NoSQL起源和文档架构设计,MongoDB比SQL数据库更具灵活性和可伸缩性。 结果,与传统SQL数据库相比,MongoDB中存储的数据通常要多得多,而MongoDB数据库通常会超过TB的数据。 可以在单个数据库中公开的大量数据使涉及MongoDB的违规性更具破坏性。

好消息是,自2009年产品推出以来,多年来在提高MongoDB安全性方面已经做了很多工作。只需采取一些简单的措施就可以避免上述所有违规行为。

MongoDB提供什么来减轻安全威胁? 让我们探索一些领域和建议的解决方案,以及MongoDB的未来。

MongoDB中的数据加密

MongoDB的最严重问题之一是数据文件没有静态加密。 从3.6.8版开始, 用于MongoDB的Percona Server为 MongoDB社区版提供了静态加密。 在上游MongoDB软件中,静态数据加密仅在MongoDB Enterprise中可用。

以下示例显示了如何为Percona Server for MongoDB中的静态数据激活WiredTiger加密。 首先,必须在mongod.conf中编辑加密选项:

# Encryption variables in mongod.conf shell
[root@app ~]# grep security -A2 /etc/mongod.conf
security:
  enableEncryption: true
  encryptionKeyFile: /data/key/mongodb.key

默认情况下,Percona Server for MongoDB使用AES256-CBC密码模式。 必须使用OpenSSL创建密钥,如下所示:

# Create Encryption KeyShell
[root@app ~]# mkdir /data/key
[root@app ~]# openssl rand -base64 32 > /data/key/mongodb.key
[root@app ~]# chmod 600 /data/key/mongodb.key

现在启动Percona Server for MongoDB:

[root@app ~]# systemctl start mongod

要检查数据库中是否已成功启用加密,请使用以下命令:

# Security outputShell
mongo > db.serverCmdLineOpts().parsed.security
{ "enableEncryption" : true, "encryptionKeyFile" : "/data/key/mongodb.key" }

MongoDB中的传输加密

MongoDB支持在客户端与节点之间以及集群中的节点之间使用传输加密 。 对流量进行加密可确保没有人可以“嗅探”网络上的敏感数据。 例如,诸如Wireshark或Tcpdump之类的工具可以轻松捕获未加密的敏感数据,例如用户名和密码。

MongoDB支持与安全的TLS / SSL连接一起使用的X.509证书身份验证。 成员可以使用X.509证书来验证其副本集的成员身份。

为了使用加密,必须在所有节点上创建证书,并具有对它们进行签名的证书颁发机构(CA)。 因为使用证书颁发机构可能会非常昂贵,所以也可以使用自签名证书。 在私有基础架构中不必使用公共CA。

要设置SSL,必须修改配置文件:

# /etc/mongod.conf
net:
 port: 27017
 ssl:
 mode: <disabled|allowSSL|preferSSL|requireSSL>
 PEMKeyFile: /etc/ssl/mongo

MongoDB中的授权

在MongoDB部署上启用访问控制会强制执行身份验证,要求用户标识自己。 访问启用了访问控制的MongoDB部署时,用户只能执行由其角色确定的那些操作。 此外,启用访问控制后,副本集和分片群集要求成员之间进行内部身份验证。 遵循最小特权原则很重要。 任何人都不应获得超出其工作所需权限的权限,甚至DBA也应使用非提升帐户登录。

MongoDB通过基于角色的授权来授予对数据和命令的访问权限,并包括内置角色,这些角色提供了数据库系统中通常需要的不同访问级别。 此外,可以创建用户定义的角色。

在MongoDB中创建角色并将其添加到用户:

db.createRole({
role : 'write_foo2_Collection',
privileges : [ {resource : {db : "percona", collection : "foo2"}, actions : ["insert","remove"]}
],
roles : ["read"]
})

db.updateUser('client_read', roles : ['write_foo2_Collection'])

MongoDB中的身份验证

发生大多数涉及MongoDB的违规事件是因为默认情况下禁用了身份验证。 MongoDB为每个数据库级别的身份验证提供支持。 用户存在于单个逻辑数据库的上下文中。 但是,MongoDB不支持密码复杂性,基于年龄的轮换以及用户角色与服务功能的集中和标识之类的项目。

值得庆幸的是,可以使用LDAP来弥补许多空白。 许多连接器都允许使用Windows Active Directory(AD)系统与LDAP通讯。

LDAP支持在MongoDB Enterprise中可用,但在MongoDB Community Edition中不可用。 但是,它可在MongoDB的其他开源版本中使用,例如Percona Server for MongoDB。

为了在Percona Server for MongoDB中设置LDAP身份验证,请执行以下步骤:

1.将mongod.conf文件配置到/ etc / sasl2文件夹(作为根目录):

Shell
# mkdir -p /etc/sasl2
# echo 'pwcheck_method: saslauthd
saslauthd_path: /var/run/saslauthd/mux
log_level: 5
mech_list: plain' > /etc/sasl2/mongod.conf

2.编辑mongod.conf或添加启动参数,以便使用sasauthd库验证用户和密码。 如果使用配置文件:

setParameter:
   authenticationMechanisms: PLAIN,SCRAM-SHA-1

如果使用启动参数:

--setParameter authenticationMechanisms=PLAIN,SCRAM-SHA-1

以root用户身份创建第一个用户。 考虑到该过程已启动并正在运行,有必要创建一个管理员用户。 对于此示例,将创建一个具有根角色的名为admin的用户(这意味着该用户可以在数据库中执行任何操作):

mongo > use admin
mongo > db.createUser({user : 'admin', pwd: '1234', roles :['root']})

使用LDAP身份验证创建标准用户。 执行下一个操作时,管理员数据库上没有保存密码。 以下命令创建一个基于LDAP的用户,并且密码验证在数据库外部执行。 Cyrus库对验证的回答为OK或NOK,并且授权文档(角色)仍由数据库管理:

use admin
> db.auth('admin','1234')
1
> db.getSiblingDB("$external").createUser({
user : 'support1',
roles: [ {role : "read", db: 'percona'} ]
})
Successfully added user: {
"user" : "support1",
"roles" : [
  {
    "role" : "read",
    "db" : "percona"
}
  ]
}

MongoDB中的审核

审核并不是为了减轻安全威胁而设计的,而是在调查未经授权的访问或跟踪数据访问和修改时提供帮助。 一般的数据库审计概念是关于跟踪数据库记录和权限的使用。 在审核数据库时,可以监视对数据的每个操作并将其记录到审核跟踪中,包括有关触摸了哪个数据库对象或数据记录,执行该操作的帐户以及何时进行该活动的信息。

MongoDB Atlas本机提供审核日志记录,而Percona Server for MongoDB将此功能扩展到了MongoDB Community Edition。 要在命令行或配置文件中为Pergoa Server for MongoDB 启用审核日志 ,请在命令行中添加以下条目:

mongod --dbpath /var/lib/mongodb --auditDestination file --auditFormat BSON --auditPath /var/lib/mongodb/auditLog.bson

或在MongoDB配置文件中:

auditLog:
   destination: file
   format: BSON
   path: /var/lib/mongodb/auditLog.bson

MongoDB喜欢防火墙

必须将任何数据库服务器置于防火墙之后,尤其是当它包含个人身份信息(PII)或受保护的健康信息(PHI)时。 使用默认端口,允许匿名登录以及将数据库暴露于Internet会创建一个完美的漏洞风暴。 防火墙是第一道防线,尤其是在公共云中运行MongoDB时。

最后,值得一提的是,MongoDB 最近雇用了有史以来第一位首席信息安全官Lena Smart,这对MongoDB安全的未来是个好兆头。 Smart拥有20年的网络安全经验,履历令人印象深刻,最近担任国际金融科技公司Tradeweb的全球首席信息安全官。 我们可以预期MongoDB的安全性将继续提高。

Vinicius Grippa在Percona担任MongoDB和MySQL的支持工程师, Percona是企业级MySQL,MongoDB和PostgreSQL解决方案和服务的提供商。

-

新技术论坛提供了一个以前所未有的深度和广度探索和讨论新兴企业技术的场所。 选择是主观的,是基于我们选择的技术,我们认为这些技术对InfoWorld读者来说是重要的,也是他们最感兴趣的。 InfoWorld不接受发布的营销担保,并保留编辑所有贡献内容的权利。 将所有查询发送到 newtechforum@infoworld.com

翻译自: https://www.infoworld.com/article/3397136/6-keys-to-mongodb-database-security.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值