Atlas为您的数据库部署提供默认的安全网络配置,例如:
强制执行 TLS/SSL 连接加密
具有一个或多个专用集群的所有项目的VPC
使用 IP 访问列表进行身份验证,并且仅接受来自您明确声明的来源的数据库连接。
您可以进一步配置这些保护,以满足您独特的安全需求和偏好。
使用此页面上的建议来规划集群的网络安全配置。
Atlas 网络安全功能
Atlas 对与数据库的所有连接强制执行 TLS/SSL 加密。
我们建议使用 M10 + 专用集群,因为所有拥有一个或多个 M10 + 专用集群的 Atlas 项目都会获得自己的专用集群:
AWS 或 Google Cloud 上的 VPC。
Azure 上的 VNet。
Atlas 在此 VPC 或 VNet 内部署所有专用集群。
默认情况下,所有对您的集群的访问均被阻止。您必须通过以下方法之一明确允许入站连接:
添加私有端点, Atlas自动将其添加到您的IP访问列表中。不会自动添加其他访问权限。
使用 VPC 或 VNet 对等互连来添加私有 IP 地址。
将公共IP地址添加到IP访问列表。
您还可以同时使用多种方法以提高安全性。
TLS
Atlas 对数据库连接强制执行 TLS 加密。TLS 1.2 是默认协议。要了解更多信息,请参阅 Set Minimum TLS Protocol Version 配置其他设置部分。
IP 访问列表
作为 Atlas 管理员,您可以:
配置 IP 访问列表以限制哪些 IP 地址可以尝试对数据库进行身份验证。
仅允许从您添加到 IP 访问列表的 IP 地址和 CIDR 区块 IP 范围进行访问。我们建议您允许访问尽可能小的网络段,例如单个 /32 地址。
如果应用程序服务器和其他客户端的 IP 地址不在您的 IP 访问列表中,请拒绝其访问 Atlas 集群。
配置会在用户定义的期限后自动过期的临时访问列表条目。
防火墙配置
当从您的客户端应用程序服务器连接到 Atlas 并通过阻止出站网络连接的防火墙时,您还必须配置防火墙,以允许您的应用程序对 Atlas 托管上的 TCP 流量建立出站连接。这将授予您的应用程序访问您的集群的权限。
在大多数集群变化情况下,例如垂直扩展、拓扑结构更改或维护事件,Atlas 集群公共 IP 通常保持不变。然而,某些拓扑结构更改,例如从副本集转换为分片集群、添加分片或区域更改,需要使用新的 IP 地址。
在从副本集转换为分片集群的过程中,如果未能重新连接应用程序客户端,可能会导致应用程序出现数据服务中断。如果使用 DNS 种子列表连接字符串,应用程序将自动连接到分片集群的 mongos。如果使用标准连接字符串,则必须更新连接字符串,以反映新的集群拓扑结构。
在添加新分片的情况下,无法重新连接应用程序客户端可能会导致应用程序出现数据中断。
私有端点
私有端点可促进从您直接管理的 VPC 到 Atlas VPC 的单向连接,而不允许 Atlas 发起相互连接。这样一来,您可以使用 Atlas 的安全连接,而无需扩展您的网络信任边界。以下私有端点可用:
AWS PrivateLink,用于来自Amazon Web Services VPC 的连接
Microsoft Azure Private Link,用于来自Microsoft Azure VNet 的连接
Private Service Connect,用于来自 Google Cloud VPC 的连接
VPC/vNet 对等互连
网络对等互连允许您将自己的 VPC 与 Atlas VPC 连接,以私有方式路由流量,并将数据流与公共互联网隔离。Atlas 将 VPC 一对一地映射到 Atlas 项目。
通过 VPC 连接执行的大多数操作都源自应用程序环境,最大限度地减少了 Atlas 向对等 VPC 发出出站访问请求的需求。但是,如果您将 Atlas 配置为使用 LDAP 身份验证,则必须启用 Atlas 通过 LDAP 协议向外连接到对等 VPC 的身份验证终结点。请注意,LDAP 身份验证已在 Atlas 8.0 版本中被弃用。我们建议您改用 Workforce Identity Federation 和 Workload Identity Federation。
在部署第一个集群之前,您可以使用 VPC 对等互连向导选择Atlas CIDR 区块。Atlas VPC CIDR区块不得与您打算对等互连的任何VPC的 CIDR区块重叠。Atlas根据 CIDR 区块限制每个 VPC 的MongoDB实例数量。示例,CIDR区块为 /24的项目仅限于相当于 个273 节点副本集。
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私有端点。要学习;了解如何为集群设立私有端点,请参阅为专用集群设置私有端点。
云提供商特定指导
AWS:我们建议在所有需要连接到 Atlas 的自管理 VPC 之间进行 VPC 对等互连。利用全球私有端点。
Azure:我们建议在所有需要连接到 Atlas 的自管理 VNet 之间进行 VNet 对等互连。利用全球私有端点。
GCP:使用 GlobalConnect 时,您无需在自管理 VPC 之间建立对等互连。所有 Atlas 区域必须通过私有端点与您在每个区域的自管理 VPC 进行网络连接。
GCP 私有端点注意事项和限制
可通过 27015 至 27017 端口上的 GCP Private Service Connect 端点访问 Atlas 服务。端口可在特定情况下更改,包括(但不限于)集群更改。
GCP Private Service Connect 必须在部署多区域集群的所有区域中处于活动状态。如果 GCP Private Service Connect 在部分目标区域(而非所有目标区域)处于活动状态,您将收到错误消息。
为了维护可管理数量的内部存储连接字符串,允许驱动程序连接到多区域集群中的所有节点,这是为了确保驱动程序连接到集群内动态分配的主节点(副本集中的主节点)节点,从而可以对数据库执行所有操作,您只能执行以下操作之一:
在多个地区部署节点,并为每个地区配备一个私有端点。
在一个地区有多个私有端点,并且没有其他私有端点。
重要
这一限制适用于所有云提供商。例如,如果您在 GCP 的单个区域中创建多个私有端点,则无法在 AWS 或任何其他 GCP 区域中创建私有端点。
要了解更多信息,请参阅为什么区域化终结点只适用于分片集群?
在分片集群中,节点间的流量通过 mongos 进程进行路由,这些进程默认连接到集群内的所有节点。因此,您可以在给定区域创建任意数量的私有端点。请参阅(可选)多区域分片集群的区域化私有端点以了解更多信息。
Atlas 创建了 50 个服务附件,每个附件的子网掩码值均为 27。您可以通过设置一个项目限制 Atlas Administration API 端点来设置以下限制,以更改 Atlas 创建的服务附件和子网掩码的数量:
设置
atlas.project.deployment.privateServiceConnectionsPerRegionGroup限制以更改服务附件的数量。设置
atlas.project.deployment.privateServiceConnectionsSubnetMask限制以更改每个服务附件的子网掩码。
要了解更多信息,请参阅设置一个项目限制。
在单个区域中创建使用 GCP Private Service Connect 的 Atlas 项目时,您最多可以拥有 50 个节点。如果需要更改节点数,请执行以下操作之一:
删除现有的私有端点,然后使用设置一个项目限制 Atlas Administration API 端点来更改限制。
利用更多的项目或区域来连接超出这一限制的节点。
重要
IP 访问列表
我们建议您为API密钥和编程访问权限配置IP访问列表,以仅允许来自可信IP地址(例如 CI/CD管道或编排系统)的访问权限。这些IP访问权限列表是在预配服务帐户时在Atlas控制平面上设立的,并且与可在Atlas项目数据平面上设立用于连接到集群的IP访问权限列表分开。
配置IP访问列表时,我们建议您:
在团队成员需要从临时工作位置访问环境的情况下,或在需要人工干预以解决生产中断的紧急情况下,使用临时访问列表条目。建议您提前编写自动化脚本,以便在需要时快速授予临时访问权限,做好应对准备。
定义覆盖尽可能小的网段的IP访问列表条目。为此,请尽可能使用单个IP地址,并避免大型CIDR块。
VPC/vNet 对等互连
如果配置了VPC或 VNet 对等互连,我们建议您:
为了保持严格的网络信任边界,请配置安全组和 网络 ACL ,防止从 Atlas 端 VPC 对应用程序 VPC 内的系统进行入站访问权限。
创建新的VPC以充当敏感应用程序基础架构和Atlas VPC之间的中介。VPC是不及物的,允许您仅公开应用程序中需要访问权限Atlas 的组件。
自动化示例:Atlas 网络安全
以下示例使用IP访问权限列表、VPC对等互连和私有端点配置应用程序环境和Atlas集群之间的连接。
这些示例还应用其他推荐的配置,包括:
注意
在配置 Atlas CLI 连接之前,您必须:
创建 IP 访问列表条目
请对您想要允许的每个连接运行以下命令。将条目更改为使用适当的选项和您的实际值:
atlas accessList create 192.0.2.15 --type ipAddress --projectId 5e2211c17a3e5a48f5497de3 --comment "IP address for app server 2" --output json
有关此示例的更多配置选项和信息,请参阅Atlas accessLists create。
有关如何使用 AWS、GCP 和 Azure 创建 IP 访问列表条目的信息,请参阅为专用集群设置私有端点
创建 VPC 对等连接
为每个您想与 Atlas VPC 对等互连的 VPC 运行以下代码。将 aws 替换为 azure 或 gcp,并将选项和值更改为适合您的 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
有关此示例的更多配置选项和信息,请参阅:
Atlas网络对等互连为Amazon Web Services Services VPC创建Amazon Web Services Services
Atlas网络对等互连创建Azure,用于Microsoft Azure VNet
Atlas网络对等互连创建GCP,用于GCP VPC
创建私有端点
为要创建的每个私有端点运行以下命令。根据需要将 aws 替换为 azure 或 gcp,并将选项和值更改为适合您的VPC或 VNet:
atlas privateEndpoints aws create --region us-east-1 --projectId 5e2211c17a3e5a48f5497de3 --output json
有关此示例的更多配置选项和信息,请参阅:
Atlas privateEndpoints Amazon Web Services create,用于来自Amazon Web Services VPC 的连接
atlas privateEndpoints azure 创建,用于来自 Microsoft Azure VNets 的连接
atlas privateEndpoints gcp 创建,用于来自 GCP 私有服务连接的连接
注意
在使用 Terraform 创建资源之前,您必须:
创建您的付款组织并为该付款组织创建一个 API 密钥。请在终端中运行以下命令,将您的 API 密钥存储为环境变量:
export MONGODB_ATLAS_PUBLIC_KEY="<insert your public key here>" export MONGODB_ATLAS_PRIVATE_KEY="<insert your private key here>"
我们还建议为您的环境创建一个工作区。
创建 IP 访问列表条目
要向IP访问列表添加条目,请创建以下文件并将其放在要授予访问权限的项目的目录中。更改 ID 和名称以使用您的值:
accessEntryForAddress1.tf
# 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 对等连接
要在应用程序VPC和AtlasVPC之间创建对等互连,请创建以下文件并将其放在要授予访问权限的项目的目录中。更改 ID 和名称以使用您的值:
vpcConnection.tf
# 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 和名称以使用您的值:
privateLink.tf
resource "mongodbatlas_privatelink_endpoint" "test" { project_id = "<project-id>" provider_name = "AWS/AZURE" region = "US_EAST_1" timeouts { create = "30m" delete = "20m" } }
创建该文件后,导航到项目目录并运行以下命令以初始化 Terraform:
terraform init
运行以下命令以查看 Terraform 计划:
terraform plan
运行以下命令,将 PrivateLink 终结点从应用程序添加到项目。该命令使用文件和 MongoDB 和 HashiCorp Terraform 来添加条目。
terraform apply
当出现提示时,输入 yes 然后按 Enter 以应用配置。