暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

[译文] 如何使用加密保护 MongoDB 数据

原创 Agus Syafaat 2021-07-30
2867

由于数据库中存储了多种数据,有时我们可能会处理机密数据,其中可能包括信用卡数据、财务记录、个人信息。这些 PII(个人身份信息)数据受监管,例如我们需要保护和确保机密性、完整性和可用性的 PCI DSS、HIPAA 或 GDPR。

数据加密是构建 MongoDB 以在生产环境中实现安全性的一部分。数据加密的目的是为数据的安全性添加更多保护措施,尤其是免受内部威胁。我们锁定数据库的服务和端口,维护一个访问控制列表,记录谁可以访问和执行对数据库的哪些操作,并启用加密以防止在网络传输期间或存储数据时被嗅探。在这篇文章中,我们将讨论如何在 MongoDB 中使用加密。

传输中的数据加密

传输中的数据加密确保MongoDB 数据在客户端(即应用程序服务器)和数据库服务器之间以及在 MongoDB ReplicaSet 或 ShardedCluster 架构中的数据库服务器之间是安全的。MongoDB 使用 SSL/TLS 证书,生成自签名证书或由证书颁发机构颁发的证书。

最好的方法是使用来自证书颁发机构的证书,因为它允许 MongoDB 驱动程序通过证书颁发机构检查主机,这意味着将验证服务器身份以避免中间人攻击。您仍然可以在受信任的网络中使用自签名证书。

MongoDB SSL/TLS 加密必须使用具有至少 128 位密钥的 TLS/SSL 密码。从 MongoDB 4.2 及以上版本开始,有一个名为net.tls的新参数。它提供与 net.ssl 相同的功能。mongod.conf 文件中的配置如下:

net:<font></font> tls:<font></font> mode: requireTLS<font></font> certificateKeyFile: /etc/ssl/mongodb.pem

而如果我们想添加客户端证书验证,我们只需要添加参数CAFile 如下:

net:<font></font> tls:<font></font> mode: requireTLS<font></font> certificateKeyFile: /etc/ssl/mongodb.pem<font></font> CAFile: /etc/ssl/caClientCert.pem

通过上述配置,MongoDB SSL/TLS 连接需要来自客户端的有效证书,并且客户端必须指定 SSL/TLS 连接并提供证书密钥文件。

在上面的配置中,我们使用了 MongoDB 4.2 上存在的 net.tls。对于上面的版本,我们可以使用net.ssl配置,如下:

net:<font></font> ssl:<font></font> mode: requireSSL<font></font> PEMKeyFile: /etc/ssl/mongodb.pem

添加客户端证书验证与 net.tls 配置类似。只需添加参数 CAFile ,如下所示:

net:<font></font> ssl:<font></font> mode: requireSSL<font></font> PEMKeyFile: /etc/ssl/mongodb.pem<font></font> CAFile: /etc/ssl/caClientCert.pem

静态数据加密

说到静态数据加密,MongoDB 数据加密有以下几种方法:

  • 数据库存储引擎加密

MongoDB 在WiredTiger 存储引擎上提供本机加密。数据剩余加密需要对数据进行两个密钥保护,分别是用于加密数据的主密钥和用于加密数据库密钥的主密钥。加密使用 AES256-CBC 高级加密标准。它使用与加密和解密数据相同的密钥的非对称密钥。它仅在 3.2 及以上版本的企业版中可用。

Percona Server for MongoDB 具有静态数据加密,它是开源服务器的一部分,从 3.6 版开始引入。当前版本不包括密钥管理互操作性协议 (KMIP) 或 Amazon KMS。我们可以使用本地密钥文件或第三方密钥管理服务器,例如 Hashicorp Vault。

Percona Server for MongoDB 中与加密相关的参数是encryptionCipherMode,我们可以通过选择以下密码模式之一进行配置:

  • AES256-CBC

  • AES256-GCM

如果您未明确应用上述密码之一,则默认密码为 AES256-CBC。我们可以在新的 Percona Server 上为 MongoDB 安装启用静态数据加密,但它不支持现有的 MongoDB 服务。

  • 磁盘/存储加密

存储加密是对存储介质的加密。我们可以使用基于 Linux 的磁盘加密,例如 LUKS 来加密磁盘的数据量,或者如果我们使用云环境,可能会有一个加密选项。例如,在 AWS 中,可以有加密的块存储以及 S3 存储。

  • 基于 API 的加密

基于 API 的加密使用第三方加密软件或应用程序提供算法在数据存储到 MongoDB 数据库之前对其进行加密。整个过程由应用层处理。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论