Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
MongoDB Branding Shape
Click here >
Docs 菜单

Atlas 网络安全指导

Atlas为您的数据库部署提供默认的安全网络配置,例如:

  • 强制 TLS 连接加密

  • 具有一个或多个专用集群的所有项目的VPC

  • 使用 IP 访问列表进行身份验证,并且仅接受来自您明确声明的来源的数据库连接。

您可以进一步配置这些保护,以满足您独特的安全需求和偏好。

使用此页面上的建议来规划集群的网络安全配置。

注意

MongoDB Atlas责任共担模型定义了MongoDB及其客户在维护安全和弹性数据环境方面的互补职责。在此框架下, MongoDB管理根本的平台的安全性和操作完整性,而客户则负责其特定部署的配置、管理和数据策略。有关安全性和卓越运营之间所有权的详细划分,请参阅责任共担模型。

Atlas对数据库的所有连接实施 TLS加密。

我们建议使用 M10 + 专用集群,因为所有拥有一个或多个 M10 + 专用集群的 Atlas 项目都会获得自己的专用集群:

  • AWS 或 Google Cloud 上的 VPC 。

  • Azure 上的 VNet

Atlas在此VPCVNet内部署所有专用集群。

默认情况下,所有对您的集群的访问均被阻止。您必须通过以下方法之一明确允许入站连接:

  • 添加私有端点, Atlas自动将其添加到您的IP访问列表中。不会自动添加其他访问权限。

  • 使用VPCVNet对等互连添加私有IP地址。

  • 将公共IP地址添加到IP访问列表。

您还可以同时使用多种方法以提高安全性。

Atlas对数据库连接执行强制TLS加密。TLS 1.2 是默认协议。要学习;了解更多信息,请参阅配置其他设置的Set Minimum TLS Protocol Version 部分。

作为 Atlas 管理员,您可以:

配置 IP 访问列表以限制哪些 IP 地址可以尝试对数据库进行身份验证。

仅允许从您添加到IP访问列表的IP地址和CIDR区块IP范围访问权限。我们建议您允许访问权限尽可能小的网段,例如单个 /32解决。

如果应用程序服务器和其他客户端的 IP 地址不在您的 IP 访问列表中,请拒绝其访问 Atlas 集群。

配置会在用户定义的期限后自动过期的临时访问列表条目

当从客户端应用程序服务器连接到Atlas并通过阻止出站网络连接的防火墙时,您还必须配置防火墙,允许应用程序与Atlas主机上的TCP流量建立出站连接。这将授予您的应用程序访问权限集群的权限。

在大多数集群变化情况下,例如垂直扩展拓扑结构更改或维护事件,Atlas 集群公共 IP 通常保持不变。然而,某些拓扑结构更改,例如从副本集转换为分片集群添加分片区域更改,需要使用新的 IP 地址。

从副本集转换为分片集群时,重新连接应用程序客户端失败可能会导致应用程序出现数据中断。如果您使用 DNS种子列表连接字符串,您的应用程序会自动连接到分片集群的 。如果使用标准连接字符串,则必须更新连接字符串以反映新的集群拓扑结构。

在添加新分片的情况下,无法重新连接应用程序客户端可能会导致应用程序出现数据中断。

私有端点促进从您直接管理的VPC到Atlas VPC的单向连接,而不允许Atlas启动相互连接。这样,您就可以利用与Atlas的安全连接,而无需扩展网络信任边界。以下私有端点可用:

“展示MongoDB Atlas私有端点工作方式的图像。”

网络对等互连允许您将自己的 VPC 与 Atlas VPC 连接,以私有方式路由流量,并将数据流与公共互联网隔离。Atlas 将 VPC 一对一地映射到 Atlas 项目。

通过VPC连接执行的大多数操作都源自您的应用程序环境,从而最大限度地减少Atlas向对等VPC发出出站访问权限请求的需要。但是,如果您将Atlas配置为使用 LDAP 身份验证,则必须启用Atlas能够通过 LDAP 协议出站连接到对等 VPC 的身份身份验证端点。请注意,附带 8.0 的Atlas已弃用LDAP身份验证。我们建议您改用 Workforce Identity FederationWorkload Identity Federation

在部署第一个集群之前,您可以使用 VPC 对等互连向导选择Atlas CIDR 区块。Atlas VPC CIDR区块不得与您打算对等互连的任何VPC的 CIDR区块重叠。Atlas根据 CIDR 区块限制每个 VPC 的MongoDB实例数量。示例,CIDR区块为 /24的项目仅限于相当于 个273 节点副本集。

“展示MongoDB Atlas VPC/VNet 对等互联工作原理的图像。”

仅适用于单区域部署的建议

单区域部署在 Atlas 网络安全方面没有特别的考虑。

仅适用于跨多个区域或多个云提供商部署的建议

使用私有端点保护的多区域部署具有以下独特注意事项:

  • 对于全球私有端点,Atlas 会自动生成一个指向所有 Atlas 集群节点的 SRV 记录。MongoDB 驱动程序尝试连接到您的应用程序中的每个 SRV 记录。这使驱动程序能够处理故障转移事件,无需等待 DNS 复制,也无需您更新驱动程序的连接字符串。

  • 为了便于为 Atlas 集群中的所有节点自动生成SRV记录,您必须在应用程序VPC之间建立VPC对等互连,并且必须使用 PrivateLink 或等效工具将应用程序VPC连接到 MongoDB VPC

  • 您必须在已部署 Atlas 集群的每个区域启用私有端点。

  • Google Cloud Private Service Connect 是针对特定区域的。但是,您可以配置全球访问权限以访问来自不同地区的私有终结点。

    若要了解详细信息,请参阅多区域支持

以下建议适用于所有部署范式。

我们建议您为所有新的预发布和生产项目设置私有端点,以限制网络信任边界的扩展。

通常情况下,我们建议每个 Atlas 项目都使用私有端点,因为这种方法不仅能提供更精细的安全防护,还可避免因云网络扩展而带来的管理负担,例如维护 IP 访问列表和处理大量 IP 地址等问题。每个端点都有相关的成本。因此,您在较低环境中可能不需要私有端点,但在较高环境中应利用它们来限制网络信任边界的扩展。

如果部署您的应用程序的 VPC 或 VNet 无法彼此对等互连(可能是由于本地部署和云部署的组合),您可能需要考虑使用区域私有端点。

使用区域私有端点,您可以执行以下操作:

  • 将单个私有端点连接到多个 VNet 或 VPC,而无需将它们直接对等互连。

  • 缓解区域内一个或多个服务发生故障的部分区域故障。

要与区域终结点联网,您必须执行以下操作:

  • 定期进行稳健的健康检查,以帮助验证集群与应用程序之间的连接和操作是否成功。您可以使用 db.runCommand("ping") 命令对集群进行网络探测操作以快速确认连接,或者运行 rs.conf() 来获取有关集群中每个节点的详细信息。

  • 为每个区域使用不同的连接字符串。

  • 使用到Atlas的跨区域路由,在Atlas VPC断开连接时保持可用性。

要学习;了解有关Atlas私有端点的更多信息,包括限制和注意事项,请参阅了解Atlas私有端点。要学习;了解如何为集群设立私有端点,请参阅为专用集群设置私有端点。

  • Amazon Web Services:我们建议在所有需要连接到 Atlas 的自我管理 VPC 之间建立 VPC 对等互连。利用全球私有端点。

  • Azure:我们建议在所有需要连接到Atlas 的自我管理 VNet 之间建立 VNet 对等互连。利用全球私有端点。

  • GCP:使用 GlobalConnect 时,无需跨自我管理的 VPC 对对等互连。所有Atlas区域都必须通过私有端点与每个地区中的自管理VPC联网。

可通过 1024 开始的端口上的GCP Private Service Connect 终结点访问Atlas服务。端口可能会在特定情况下发生变化,包括(但不限于)集群更改。

  • GCP Private Service Connect 必须在部署多区域集群的所有区域中处于活动状态。如果 GCP Private Service Connect 在部分目标区域(而非所有目标区域)处于活动状态,您将收到错误消息。

  • 为了维护可管理数量的内部存储连接字符串,允许驱动程序连接到多区域集群中的所有节点,这是为了确保驱动程序连接到集群内动态分配的主节点(副本集中的主节点)节点,从而可以对数据库执行所有操作,您只能执行以下操作之一:

    • 在多个地区部署节点,并为每个地区配备一个私有端点。

    • 在一个地区有多个私有端点,并且没有其他私有端点。

      重要

      此限制适用于所有云提供商。示例,如果您在GCP的单个地区中创建多个私有端点,则无法在Amazon Web Services或任何其他GCP地区中创建私有端点。

    要了解更多信息,请参阅为什么区域化终结点只适用于分片集群?

    在分片集群中,节点间的流量通过 mongos 进程进行路由,这些进程默认连接到集群内的所有节点。因此,您可以在给定区域创建任意数量的私有端点。请参阅(可选)多区域分片集群的区域化私有端点以了解更多信息。

  • 多个区域部署使用GCP Private Service Connect 的Atlas项目时,您最多可以有 40 个节点。此总数不包括以下实例:

    • 相互通信的GCP区域

    • 免费集群或共享集群

  • 可寻址目标包括:

    • 副本集部署中的每个实例(不包括分片的片集群)。

    • 分片集群部署中的每个实例。

    • 项目中所有专用集群的 Atlas 实例的每个 BI Connector。

  • GCP Private Service Connect 支持每个虚拟机最多 1024 个传出连接。因此,从单个GCP虚拟机到Atlas 集群的连接不能超过 1024 个。

    要学习;了解更多信息,请参阅GCP 云 NAT 文档。

  • GCP Private Service Connect 是针对特定区域的。但是,您可以配置全局访问权限,以从不同地区访问权限私有端点。

    若要了解详细信息,请参阅多区域支持

我们建议您为API密钥和编程访问权限配置IP访问列表,以仅允许来自可信IP地址(例如 CI/CD管道或编排系统)的访问权限。这些IP访问权限列表是在预配服务帐户时在Atlas控制平面上设立的,并且与可在Atlas项目数据平面上设立用于连接到集群的IP访问权限列表分开。

配置IP访问列表时,我们建议您:

  • 在团队成员需要从临时工作位置访问环境的情况下,或在需要人工干预以解决生产中断的紧急情况下,使用临时访问列表条目。建议您提前编写自动化脚本,以便在需要时快速授予临时访问权限,做好应对准备。

  • 定义尽可能覆盖最小网络段的 IP 访问列表条目。为此,请尽可能使用单个 IP 地址,并避免使用大型 CIDR 区块。

如果您配置 VPC 或 VNet 对等互连,我们建议您:

  • 为了保持严格的网络信任边界,请配置安全组和 网络 ACL ,防止从 Atlas 端 VPC 对应用程序 VPC 内的系统进行入站访问权限。

  • 创建新的VPC,由其充当敏感应用程序基础设施与您的 Atlas VPC之间的中介。VPC 是不可传递的,允许您仅公开应用程序中需要访问 Atlas 的组件。

以下示例使用IP访问权限列表、VPC对等互连和私有端点配置应用程序环境和Atlas集群之间的连接。

这些示例还应用其他推荐的配置,包括:

  • 集群层已为开发/测试环境设置为 M10。使用集群大小指南了解适合应用程序大小的推荐集群层。

  • 单区域,3 节点副本集/分片部署拓扑结构。

我们的示例交替使用Amazon Web ServicesAzure和Google Cloud Platform。您可以使用这三个云提供商中的任何一个,但必须更改地区名称以匹配云提供商。要学习;了解云提供商及其地区,请参阅云提供商。

  • 集群层已设置为 M30,适用于中型应用程序。使用集群大小指南了解适合应用程序大小的推荐集群层。

  • 单区域,3 节点副本集/分片部署拓扑结构。

我们的示例交替使用Amazon Web ServicesAzure和Google Cloud Platform。您可以使用这三个云提供商中的任何一个,但必须更改地区名称以匹配云提供商。要学习;了解云提供商及其地区,请参阅云提供商。

注意

请对您想要允许的每个连接运行以下命令。将条目更改为使用适当的选项和您的实际值:

atlas accessList create 192.0.2.15 --type ipAddress --projectId 5e2211c17a3e5a48f5497de3 --comment "IP address for app server 2" --output json

有关此示例的更多配置选项和信息,请参阅Atlas accessLists create。

有关如何使用Amazon Web ServicesGCPAzure创建IP访问列表条目的信息,请参阅为专用集群设置私有端点

为您想要与Atlas VPC 对等互连的每个 VPC 运行以下代码。根据需要将 aws 替换为 azuregcp,并将选项和值更改为适合您的VPC或 VNet:

atlas networking peering create aws --accountId 854333054055 --atlasCidrBlock 192.168.0.0/24 --region us-east-1 --routeTableCidrBlock 10.0.0.0/24 --vpcId vpc-078ac381aa90e1e63

有关此示例的更多配置选项和信息,请参阅:

为要创建的每个私有端点运行以下命令。根据需要将 aws 替换为 azuregcp,并将选项和值更改为适合您的VPC或 VNet:

atlas privateEndpoints aws create --region us-east-1 --projectId 5e2211c17a3e5a48f5497de3 --output json

有关此示例的更多配置选项和信息,请参阅:

注意

在使用 Terraform 创建资源之前,您必须:

  • 创建您的付款组织并为该付款组织创建一个 API 密钥。请在终端中运行以下命令,将您的 API 密钥存储为环境变量:

    export MONGODB_ATLAS_PUBLIC_KEY="<insert your public key here>"
    export MONGODB_ATLAS_PRIVATE_KEY="<insert your private key here>"

我们还建议为您的环境创建一个工作区。

要向IP访问列表添加条目,请创建以下文件并将其放在要授予访问权限的项目的目录中。更改 ID 和名称以使用您的值:

# Add an entry to your IP Access List
resource "mongodbatlas_access_list_api_key" "address_1" {
org_id = "<org-id>"
ip_address = "2.3.4.5"
api_key_id = "a29120e123cd"
}

创建文件后,导航到项目目录,运行以下命令来初始化 Terraform:

terraform init

运行以下命令以查看 Terraform 计划:

terraform plan

运行以下命令,向项目的IP访问列表添加一个条目。该命令使用该文件以及MongoDB和 HashiCorp Terraform来添加条目。

terraform apply

当出现提示时,输入 yes 然后按 Enter 以应用配置。

要在应用程序VPC和AtlasVPC之间创建对等互连,请创建以下文件并将其放在要授予访问权限的项目的目录中。更改 ID 和名称以使用您的值:

# Define your application VPC
resource "aws_default_vpc" "default" {
tags = {
Name = "Default VPC"
}
}
# Create the peering connection request
resource "mongodbatlas_network_peering" "mongo_peer" {
accepter_region_name = "us-east-2"
project_id = local.project_id
container_id = one(values(mongodbatlas_advanced_cluster.test.container_id))
provider_name = "AWS"
route_table_cidr_block = "172.31.0.0/16"
vpc_id = aws_default_vpc.default.id
aws_account_id = local.AWS_ACCOUNT_ID
}
# Accept the connection
resource "aws_vpc_peering_connection_accepter" "aws_peer" {
vpc_peering_connection_id = mongodbatlas_network_peering.mongo_peer.connection_id
auto_accept = true
tags = {
Side = "Accepter"
}
}

创建该文件后,导航到项目目录并运行以下命令以初始化 Terraform:

terraform init

运行以下命令以查看 Terraform 计划:

terraform plan

运行以下命令,添加从应用程序到项目的VPC对等连接。该命令使用该文件以及MongoDB和 HashiCorp Terraform来添加条目。

terraform apply

当出现提示时,输入 yes 然后按 Enter 以应用配置。

要创建从应用程序VPC到AtlasVPC的 PrivateLink,请使用以下特定于云提供商的模块之一。创建以下文件并将其放在要连接到的项目的目录中。更改 ID 和名称以使用您的值:

For Amazon Web Services:

module "atlas_aws" {
source = "terraform-mongodbatlas-modules/atlas-aws/mongodbatlas"
version = "~> 0.3"
project_id = "<project-id>"
privatelink_endpoints = [
{
region = "<aws-region>"
subnet_ids = ["<subnet-id>"]
}
]
}

对于 Azure,请使用带有 atlas-azure 模块privatelink_endpoints 属性。有关完整示例,请参阅 atlas-azure privatelink 示例。

创建该文件后,导航到项目目录并运行以下命令以初始化 Terraform:

terraform init

运行以下命令以查看 Terraform 计划:

terraform plan

运行以下命令,将 PrivateLink 终结点从应用程序添加到项目。该命令使用文件和 MongoDB 和 HashiCorp Terraform 来添加条目。

terraform apply

当出现提示时,输入 yes 然后按 Enter 以应用配置。