使用Mongodb Atlas安全获取数据的最佳实践

时间:2019-06-25 22:29:10

标签: mongodb security mongodb-atlas

我有一个客户端反应应用程序,我需要从另一个人直接填充到源的MongoDB Atlas集合中获取信息。当我去检查连接字符串时,我注意到代码中需要提供用于数据库访问的用户密码:

(代表人数不足,无法发布图片) https://i.imgur.com/5Vs23WJ.png

现在很明显,如果我在前端代码中包含此权限,那么任何人都可以看到我的密码,这不好。但是我需要这个应用程序是自包含的,并且我不想只托管服务器来重新路由加载网站时调用的单个Get请求。

如果我创建一个具有只读特权的新用户,是否可以安全地将该用户的密码(显然是超级通用)保留在用于访问数据库的前端代码中?这有什么害处吗?我是否可以假设未列入白名单的IP地址无法向Atlas数据库发出请求?将被列入白名单的唯一地址是将托管Web应用程序的IP,因此我想我不必担心有人发送垃圾邮件请求增加我的Atlas帐户费用或进行其他恶意操作?

我是应届毕业生,所以我在安全部署方面没有太多经验,但我希望今年夏天能有所改变。

谢谢:)

1 个答案:

答案 0 :(得分:1)

我不确定“最佳”做法,但是我将尝试根据自己的回答:

  

将用户的密码(显然是超级通用)保留在用于访问数据库的前端代码中是否安全?

是的,您可以创建一个只读用户。使用超级用户进行读取通常不是一个好主意。我只会提供工作所需的权限。

  

我是否可以假设未列入白名单的IP地址无法向Atlas数据库发出请求?

正确。只有列入白名单的IP才能连接到Atlas实例。

回答后,我个人会:

  • 在数据库之上创建一个API层,以防止客户端应用程序直接访问数据库,或者
  • (如果适用)创建一个Stitch Webhook,在Atlas部署之上提供一个基于Stitch的REST API层。

此主意是通过限制外界对数据库的访问来提供安全性。使用白名单是安全的一层。使用REST API是进一步的安全层,从本质上讲,这将迫使需要数据库访问的所有内容都经过您控制下的安全门。

REST API网关的其他一些优点:

  • 如果将来更改Atlas URI,则无需在任何地方重新部署客户端应用程序。您只需重新配置REST API网关即可指向新的Atlas URI,而您的客户端应用程序仍可以使用现有的REST API地址而无需进行任何更改。
  • 将客户端连接限制为数据库本身。由于只有您的API网关可以直接连接到数据库,因此当您同时有许多客户端处于活动状态时,数据库意外被DDOS的可能性很小。

请注意,无论如何我都不认为上述是“最佳”实践。这就是我要做的。