更新时间:2024-01-18 GMT+08:00

安全最佳实践

安全性是华为云与您的共同责任。华为云负责云服务自身的安全,提供安全的云;作为租户,您需要合理使用云服务提供的安全能力对数据进行保护,安全地使用云。详情请参见责任共担

本文提供了DDS使用过程中的安全最佳实践,旨在为提高整体安全能力提供可操作的规范性指导。根据该指导文档您可以持续评估DDS的安全状态,更好的组合使用DDS提供的多种安全能力,提高对DDS的整体安全防御能力,保护存储在DDS的数据不泄露、不被篡改,以及数据传输过程中不泄露、不被篡改。

本文从以下几个维度给出建议,您可以评估DDS使用情况,并根据业务需要在本指导的基础上进行安全配置。

建议避免绑定EIP直接通过互联网访问DDS

避免DDS部署在互联网或者DMZ里,应该将DDS部署在公司内部网络,使用路由器或者防火墙技术把DDS保护起来,避免直接绑定EIP方式从互联网访问DDS。通过这种方式防止未授权的访问及DDos攻击等。不推荐绑定弹性公网IP,如果业务必需,请务必设置安全组

避免使用常用密码

新建/修改账号密码,密码需要为强密码,在满足安全密码复杂度要求的前提下,同时避免使用常用密码。通过这种方式防止黑客爆破密码、彩虹表攻击等。常用密码可以通过检查弱密码接口进行查询。

禁止使用默认端口号

MongoDB的默认端口是27017,使用默认端口容易被监听,存在安全隐患,DDS推荐使用非默认端口。详情请参见修改数据库端口

限制DDS的最大连接数

如果DDS的连接数过高,会消耗服务器过多的资源,导致OPS(query、insert、update、delete)等操作响应变慢,同时也要根据操作系统环境来设置最大连接数net.maxIncomingConnections,如果高于操作系统接收的最大线程数,设置无效。详情请参见参数调优

关闭IPv6功能

目前DDS不支持选择IPv6网段的子网,建议您在使用时创建实例时选择IPv4网段的子网。

关闭脚本运行功能

启用javascriptEnabled选项security.javascriptEnabled,可以在mongod 服务端运行javascript脚本,存在安全风险。禁用javascriptEnabled选项,mapreduce、group命令等将无法使用。如果您的应用中没有mapreduce等操作的需求,为了安全起见,建议关闭javascriptEnabled选项。详情请参见参数调优

建议开启审计功能

审计功能可以记录用户对数据库的所有相关操作。通过查看审计日志,您可以对数据库进行安全审计、故障根因分析等操作,提高系统运维效率。详情请参见审计日志

建议开启加密通信

如果未配置SSL加密通信,那么在Mongo客户端和服务器之间传输的数据,容易受到窃听、篡改和"中间人"攻击。为了提高数据传输的安全性,建议您开启SSL加密通信。详情请参见设置SSL数据加密

开启磁盘加密

建议您开启磁盘加密可以提供数据的安全性。详情请参见自定义购买中的“磁盘加密”说明。

开启备份功能

DDS实例支持自动备份和手动备份,您可以定期对数据库进行备份,当数据库故障或数据损坏时,可以通过备份文件恢复数据库,从而保证数据可靠性。详情请参见数据备份

设置秒级监控和告警规则

DDS默认支持对实例进行监控,当监控指标的值超出设置的阈值时就会触发告警,系统会通过SMN自动发送报警通知给云账号联系人,帮助您及时了解DDS实例的运行状况。请您结合实际的业务,设置合适的监控和告警规则。详情请参见监控与告警

版本升级

DDS支持补丁升级或者大版本升级,版本升级涉及新功能添加、问题修复,同时可以提升安全能力、性能水平。建议及时进行版本升级。

检查角色的合理性

DDS支持“基于角色”的方法授予账号对数据和命令的访问权限。建议管理员结合业务需要,遵从最低授权原则,创建合适的自定义角色,对账号进行授权。如果发现账号权限过大,请结合业务需要,对账号权限进行更新或者删除

表1 DDS高权限角色的描述

序号

检查项

描述

1

检查在用户表中存在userAdmin角色的用户

当在admin数据库定义了userAdmin角色的用户后,该用户被提供了任何用户的任何权限的能力,即拥有这个角色的用户可以在任何数据库上定义它们自己的权限。

2

检查在用户表中存在userAdminAnyDatabase角色的用户

当定义了userAdminAnyDatabase角色的用户后,该用户被提供了任何用户的任何权限的能力,即拥有这个角色的用户可以在任何数据库上定义它们自己的权限。

3

检查拥有anyAction动作权限的角色

当定义了anyAction动作权限的角色,该角色用户拥有对应数据库的任何操作,不利于权限的管理。

4

检查拥有anyResource动作权限的角色

当定义了anyResource动作权限的角色,该角色用户拥有对应数据库的所有操作资源,不利于权限的管理。

5

检查拥有changeCustomData动作权限的角色

当定义了changeCustomData动作权限的角色,该角色用户拥有对应数据库所有用户自定义信息的更改权限,不利于权限的管理。

6

检查拥有changePassword动作权限的角色

当定义了changePassword动作权限的角色,该角色用户即可拥有对应数据库所有用户密码的更改权限,不利于权限的管理。

7

检查拥有createRole动作权限的角色

当定义了createRole动作权限的角色,该角色用户即可拥有对应数据库中任意创建角色的权限,不利于权限的管理。

8

检查拥有createUser动作权限的角色

当定义了createUser动作权限的角色,该角色用户即可拥有对应数据库中任意创建用户的权限,不利于权限的管理。

9

检查拥有dropRole动作权限的角色

当定义了dropRole动作权限的角色,该角色用户即可拥有对应数据库中删除任意角色的权限,不利于权限的管理。

10

检查拥有dropUser动作权限的角色

当定义了dropUser动作权限的角色,该角色用户即可拥有对应数据库中删除任意用户的权限,不利于权限的管理。

11

检查拥有grantRole动作权限的角色

当定义了grantRole动作权限的角色,该角色用户即可拥有对应数据库中任何用户授予任意角色的权限,不利于权限的管理。

12

检查拥有revokeRole动作权限的角色

当定义了revokeRole动作权限的角色,该角色用户即可拥有对应数据库中任何用户取消任意角色的权限,不利于权限的管理。

13

检查拥有authSchemaUpgrade动作权限的角色

当定义了authSchemaUpgrade动作权限的角色,该角色用户即可拥有执行authschemaupgrade的权限,不利于权限的管理。authschemaupgrade命令可以修改用户认证转换格式。

14

检查拥有closeAllDatabases动作权限的角色

当定义了closeAllDatabases动作权限的角色,该角色用户即可拥有执行closeAllDatabases命令的权限,关闭所有数据库并释放MongoDB占用的内存,不利于权限的管理。

15

检查拥有dropDatabase动作权限的角色

当定义了dropDatabase动作权限的角色,该角色用户即可拥有执行dropDatabase命令的权限,删除任意的数据库,不利于权限的管理。

16

检查拥有getParameter动作权限的角色

当定义了getParameter动作权限的角色,该角色用户即可拥有执行getParameter命令的权限,任意查看命令行选项的值,不利于权限的管理。

17

检查拥有setParameter动作权限的角色

当定义了setParameter动作权限的角色,该角色用户即可拥有执行setParameter命令的权限,任意修改命令行选项的值,不利于权限的管理。

18

检查拥有shutdown动作权限的角色

当定义了shutdown动作权限的角色,该角色用户即可拥有执行shutdown命令的权限,清除所有数据库资源,然后终止进程,不利于权限的管理。

19

检查拥有getCmdLineOpts动作权限的角色

当定义了getCmdLineOpts动作权限的角色,该角色用户即可拥有执行getCmdLineOpts命令的权限,获得argv和parsed两个字段,argv包含用于调用mongod或mongos命令字符串,parsed包含所有运行时选项,不利于权限的管理。

20

检查拥有internal动作权限的角色

当定义了internal动作权限的角色,该角色用户即可拥有对应数据库进行任何操作的权限,不利于权限的管理。

21

检查拥有readWrite角色的用户

当定义了readWrite角色的用户,该角色用户即可拥有对应数据库进行读的权限加上更改数据的权限,不利于权限的管理。

22

检查拥有backup角色的用户

当定义了backup角色的用户,该角色用户即可拥有在admin数据库mms.bak文档中insert、update的权限,不利于权限的管理。

23

检查拥有clusterAdmin角色的用户

当定义了clusterAdmin角色的用户,该角色用户即可拥有最高集群管理的权限,这个角色包括了clusterManager,clusterMonitor,hostManager角色的权限,不利于权限的管理。

24

检查拥有clusterManager角色的用户

当定义了clusterManager角色的用户,在集群上管理和监视操作,该角色用户可以有权管理分别被用来共享、复制的设置本地数据库的权限,不利于权限的管理。

25

检查拥有clusterMonitor角色的用户

当定义了clusterMonitor角色的用户,该角色用户即可拥有为监视工具提供只读的权限,不利于权限的管理。

26

检查拥有dbAdmin角色的用户

当定义了dbAdmin角色的用户,该角色用户即可拥有对应数据库管理员的权限,不利于权限的管理。

27

检查拥有dbAdminAnyDatabase角色的用户

当定义了dbAdminAnyDatabase角色的用户,该角色用户即可拥有和dbAdmin角色一样的权限,除了适用于集群内所有数据库这个特性,这个角色也为整个集群提供listDatabases操作,不利于权限的管理。

28

检查拥有dbOwner角色的用户

当定义了dbOwner角色的用户,该角色用户即可拥有执行数据库所有管理操作的权限,这个角色合并了readWrite,dbAdmin,userAdmin角色的权限,不利于权限的管理。

29

检查拥有hostManager角色的用户

当定义了hostManager角色的用户,该角色用户即可拥有监视和管理服务器的权限,不利于权限的管理。

30

检查拥有readAnyDatabase角色的用户

当定义了readAnyDatabase角色的用户,该角色用户即可拥有读任何数据库的权限,这个角色也为整个集群提供listdatabases操作,不利于权限的管理。

31

检查拥有readWriteAnyDatabase角色的用户

当定义了readWriteAnyDatabase角色的用户,该角色用户即可拥有读写任何数据库的权限,这个角色也为整个集群提供listdatabases操作,不利于权限的管理。

32

检查拥有restore角色的用户

当定义了restore角色的用户,该角色用户即可拥有还原备份所需的权限,不利于权限的管理。

33

检查拥有root角色的用户

当定义了root角色的用户,该角色用户即可拥有所有资源的所有操作,包括readWriteAnyDatabase,dbAdminAnyDatabase,userAdminAnyDatabases,clusterAdmin,restore角色的权限,不利于权限的管理。

34

检查拥有userAdmin角色的用户

当定义了userAdmin角色的用户,该角色用户即可拥有授权任意用户的权限,包括它们自己的,不利于权限的管理。

35

检查拥有userAdminAnyDatabase角色的用户

当定义了userAdminAnyDatabase角色的用户,该角色用户即可拥有授权所有数据库任意用户的权限,包括它们自己的,不利于权限的管理。