Atlas 网络安全指导
在此页面上
Atlas为您的数据库部署提供默认的安全网络配置,例如:
强制执行 TLS/SSL 连接加密
具有一个或多个专用集群的所有项目的VPC
使用IP访问权限列表且仅接受来自您明确声明的源的连接的身份验证
您可以进一步配置这些保护,以满足您独特的安全需求和偏好。
使用此页面上的建议来规划集群的网络安全配置。
Atlas 网络安全功能
Atlas 对与数据库的所有连接强制执行 TLS/SSL 加密。
我们建议使用 M10+ 专用集群,因为具有一个或多个 M10+ 专用集群的所有Atlas项目都会获得自己的专用: - Amazon Web Services或Google Cloud Platform上的VPC 。- Azure上的 VNet。
Atlas 在此 VPC 或 VNet 内部署所有专用集群。
默认情况下,所有对您的集群的访问均被阻止。您必须通过以下方法之一明确允许入站连接:
将公共IP地址添加到IP访问列表。
使用 VPC / VNet 对等互联添加私有 IP 地址。
添加私有端点, Atlas自动将其添加到您的IP访问列表中。不会自动添加其他访问权限。
您还可以同时使用多种方法以提高安全性。
TLS
Atlas 对数据库连接强制执行 TLS 加密。TLS 1.2 是默认协议。要了解更多信息,请参阅 Set Minimum TLS Protocol Version 配置其他设置部分。
IP 访问列表
作为 Atlas 管理员,您可以:
您可以配置 IP 访问列表,以限制哪些 IP 地址可以尝试对数据库进行身份验证。
您的Atlas集群只允许从您添加到IP访问列表中的IP地址和CIDR区块IP范围访问权限。如果应用程序服务器和其他客户端的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 的连接
私有服务连接,用于来自 Google Cloud VPC 的连接
VPC/vNet 对等互连
网络对等互连允许您将自己的VPC与Atlas VPC连接,以私下路由流量并将数据流与公共互联网隔离。Atlas将VPC一对一映射到Atlas项目。
通过VPC连接执行的大多数操作都源自您的应用程序环境,从而最大限度地减少Atlas向对等VPC发出出站访问权限请求的需要。但是,如果您将Atlas配置为使用 LDAP 身份验证,则必须启用Atlas能够通过 LDAP 协议出站连接到对等 VPC 的身份身份验证端点。请注意,附带 8.0 的Atlas上已弃用LDAP身份验证。我们建议您改用 Workforce Identity Federation 和 Workload Identity Federation。
在部署第一个集群之前,您可以使用 VPC 对等互连向导选择Atlas CIDR 区块。Atlas VPC CIDR区块不得与您打算对等互连的任何VPC的 CIDR区块重叠。Atlas根据 CIDR 区块限制每个 VPC 的MongoDB实例数量。示例,CIDR区块为 /24
的项目仅限于相当于 个273 节点副本集。
Atlas 网络安全建议
私有端点
我们建议您为所有新的预发布和生产项目设置私有端点,以限制网络信任边界的扩展。
通常情况下,我们建议每个 Atlas 项目都使用私有端点,因为它不仅能提供更精细的安全防护,还可避免因云网络扩展而带来的管理负担,例如维护 IP 访问列表和处理大量 IP 地址等问题。每个终结点会产生相应费用,对于较低层级的环境,可以考虑不采用私有端点,但对于较高层级的环境,应启用私有端点以有效控制网络信任边界的范围。
要学习;了解有关Atlas私有端点的更多信息,包括限制和注意事项,请参阅了解Atlas私有端点。要学习;了解如何为集群设立私有端点,请参阅为专用集群设置私有端点。
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 网络安全
请参阅 Terraform 示例,以在 Github 的一个位置跨所有支柱实施预发布/生产建议。
以下示例使用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
以应用配置。