从零开始构建安全AWS VPC的指南
通过规划CIDR范围、公有和私有子网、路由表、NAT、安全组和流日志,构建一个安全的AWS VPC。
从零开始构建安全AWS VPC的指南
AWS VPC为您的云资源提供了一个私有网络边界,但默认配置通常不足以满足生产环境需求。如果您将数据库放在公有子网中,重用重叠的CIDR范围,或开放宽泛的安全组规则,可能会造成日后难以解决的问题。
本指南将向您展示如何从零开始构建一个安全的AWS VPC,包括用于入口点的公有子网、用于应用程序和数据库工作负载的私有子网、路由表、NAT、安全组以及基本监控。
理解核心VPC概念
在深入配置步骤之前,掌握AWS VPC的基本概念至关重要:
- VPC(虚拟私有云): 专属于您AWS账户的虚拟网络。它是AWS云中一个逻辑隔离的部分,您可以在其中启动AWS资源。
- 子网: VPC中的IP地址范围。您可以将AWS资源启动到您创建的子网中。子网由其CIDR块定义,该块是VPC CIDR块的子集。
- 路由表: 一组规则(称为路由),用于确定子网或网关的网络流量去向。
- 互联网网关(IGW): 一个VPC组件,允许具有公有IP地址和网关路由的资源进行互联网可路由流量。
- NAT网关(网络地址转换): 一种高可用且可扩展的NAT服务,使私有子网中的实例能够访问互联网,同时阻止来自互联网的入站连接。
- 安全组: 作为实例的虚拟防火墙,用于控制入站和出站流量。它在实例级别运行。
- 网络访问控制列表(NACL): VPC的可选安全层,作为防火墙控制进出单个或多个子网的流量。它在子网级别运行。
逐步创建VPC
让我们开始构建您的安全VPC。
1. 规划您的IP地址方案
第一步也是最关键的一步是规划VPC及其子网的IP地址范围。这涉及为您的VPC选择一个无类别域间路由(CIDR)块。
VPC CIDR块: 选择一个不与您的本地网络或您可能通过VPN或Direct Connect连接的其他AWS VPC重叠的私有IP地址范围。AWS建议使用RFC 1918 IP地址范围(10.0.0.0/8、172.16.0.0/12或192.168.0.0/16)。CIDR块可以从/16(65,536个IP地址)到/28(16个IP地址)。
- 示例:
10.0.0.0/16为您的VPC提供了较大的地址空间。
- 示例:
子网CIDR块: 将VPC的CIDR块划分为更小的CIDR块用于子网。确保每个子网的CIDR块是VPC CIDR块的子集,并且不与其他子网重叠。
- **示例(如果VPC为
10.0.0.0/16):- 公有子网1:
10.0.1.0/24 - 公有子网2:
10.0.2.0/24 - 私有子网1:
10.0.10.0/24 - 私有子网2:
10.0.11.0/24
- 公有子网1:
- **示例(如果VPC为
2. 创建您的VPC
导航到AWS管理控制台中的VPC仪表板,创建一个新的VPC。
- 转到VPC仪表板 > 您的VPC > 创建VPC。
- 名称标签: 为您的VPC提供一个描述性名称(例如
MySecureVPC)。 - IPv4 CIDR块: 输入您规划的CIDR块(例如
10.0.0.0/16)。 - IPv6 CIDR块: 如果需要,您可以选择启用IPv6 CIDR块。
- 租户: 对于大多数用例,默认是合适的。专用提供硬件隔离,但成本更高。
- 点击创建VPC。
3. 创建子网
现在,在VPC内创建您的公有和私有子网。
- 转到VPC仪表板 > 子网 > 创建子网。
- VPC ID: 选择您刚刚创建的VPC。
- 子网名称: 提供一个名称(例如
MyPublicSubnet-AZ1)。 - 可用区: 选择一个可用区(AZ)。最佳实践是将资源部署到多个AZ以实现高可用性。
- IPv4 CIDR块: 输入此子网的CIDR块(例如
10.0.1.0/24)。 - 点击创建子网。
重复此过程以创建所有规划的公有和私有子网,确保它们位于不同的可用区以实现弹性。
4. 创建互联网网关(IGW)
您的公有子网需要IGW才能访问互联网。
- 转到VPC仪表板 > 互联网网关 > 创建互联网网关。
- 名称标签:
MyVPCInternetGateway。 - 点击创建互联网网关。
- 创建后,选择IGW,点击操作,然后选择附加到VPC。选择您的VPC并点击附加互联网网关。
5. 创建路由表
路由表引导VPC内的流量。您通常至少需要两个:一个用于公有子网,一个用于私有子网。
a. 公有路由表:
- 转到VPC仪表板 > 路由表 > 创建路由表。
- 名称标签:
MyPublicRouteTable。 - VPC: 选择您的VPC。
- 点击创建路由表。
- 选择新创建的
MyPublicRouteTable。 - 在路由选项卡下,点击编辑路由。
- 点击添加路由。
- 目标:
0.0.0.0/0(所有IPv4流量)。 - 目标: 选择互联网网关并选择您的IGW。
- 点击保存路由。
- 关联子网: 转到子网关联选项卡,点击编辑子网关联,并将您的公有子网与此路由表关联。
b. 私有路由表(带NAT网关):
为了允许私有子网中的实例启动到互联网的出站连接(例如用于软件更新),而无需直接从互联网访问,您将使用NAT网关。
创建NAT网关:
- 转到VPC仪表板 > NAT网关 > 创建NAT网关。
- 名称:
MyNATGateway。 - 子网: 选择您的公有子网之一。
- 连接类型:
公有。 - 弹性IP分配ID: 点击分配弹性IP以创建并分配一个新的弹性IP地址。
- 点击创建NAT网关。
- 注意:NAT网关会产生费用。对于基本的出站连接,请确保您的公有子网中有足够的IP地址可用于NAT网关。
创建私有路由表:
- 转到VPC仪表板 > 路由表 > 创建路由表。
- 名称标签:
MyPrivateRouteTable。 - VPC: 选择您的VPC。
- 点击创建路由表。
- 选择
MyPrivateRouteTable。 - 在路由选项卡下,点击编辑路由。
- 点击添加路由。
- 目标:
0.0.0.0/0。 - 目标: 选择NAT网关并选择您的NAT网关。
- 点击保存路由。
- 关联子网: 转到子网关联选项卡,点击编辑子网关联,并将您的私有子网与此路由表关联。
6. 配置安全组
安全组在实例级别充当有状态防火墙。它们根据您定义的规则允许或拒绝流量。
- 最佳实践: 为不同类型的资源(例如Web服务器、数据库服务器、应用服务器)创建特定的安全组。避免使用过于宽松的规则。
示例:Web服务器安全组(WebServerSG)
- 转到VPC仪表板 > 安全组 > 创建安全组。
- 安全组名称:
WebServerSG。 - 描述:
允许HTTP和HTTPS访问。 - VPC: 选择您的VPC。
- 入站规则:
- 类型:
HTTP,协议:TCP,端口范围:80,源:0.0.0.0/0(或更具体的可信IP范围)。 - 类型:
HTTPS,协议:TCP,端口范围:443,源:0.0.0.0/0(或更具体的可信IP范围)。 - (可选) 类型:
SSH,协议:TCP,端口范围:22,源:您的可信IP地址/范围(对于管理至关重要)。
- 类型:
- 出站规则: 默认情况下,允许所有出站流量(
0.0.0.0/0)。如果需要,您可以限制此规则。 - 点击创建安全组。
示例:数据库服务器安全组(DatabaseSG)
- 创建一个名为
DatabaseSG的新安全组。 - 入站规则:
- 添加一条规则,允许流量到达数据库的默认端口(例如MySQL的
3306,PostgreSQL的5432)仅来自应用服务器的安全组(例如WebServerSG或AppServerSG)。 - 源: 选择自定义,然后输入您的应用服务器安全组的ID。
- 添加一条规则,允许流量到达数据库的默认端口(例如MySQL的
- 出站规则: 通常允许所有出站流量。
7. 配置网络访问控制列表(NACL)
NACL是无状态防火墙,在子网级别运行。它们作为额外的防御层。
有状态与无状态: 安全组是有状态的(如果您允许入站流量,出站响应会自动允许)。NACL是无状态的(您必须明确为入站和出站流量定义规则)。
最佳实践: 除非需要特定的子网级别访问控制,否则NACL通常保留默认配置。它们可能难以管理。
如果您需要使用NACL:
- 转到VPC仪表板 > 网络ACL > 创建网络ACL。
- 名称标签:
MyNacl。 - VPC: 选择您的VPC。
- 点击创建网络ACL。
- 选择NACL,在入站规则下,添加规则。
- 规则编号: NACL按顺序评估规则,从编号最小的规则开始。使用像
100、200、300这样的编号,以便将来插入规则。 - 允许/拒绝: 指定是允许还是拒绝流量。
- 协议、端口范围、源/目标: 定义流量参数。
- 记得配置相应的出站规则。
- 通过转到子网关联选项卡,将NACL与您的子网关联。
示例部署场景
考虑一个典型的Web应用程序:
VPC:
10.0.0.0/16公有子网1(
us-east-1a):10.0.1.0/24(与MyPublicRouteTable和IGW关联)公有子网2(
us-east-1b):10.0.2.0/24(与MyPublicRouteTable和IGW关联)私有子网1(
us-east-1a):10.0.10.0/24(与MyPrivateRouteTable和NAT网关关联)私有子网2(
us-east-1b):10.0.11.0/24(与MyPrivateRouteTable和NAT网关关联)互联网网关: 附加到VPC。
NAT网关: 部署在
公有子网1中,带有一个弹性IP。公有路由表: 将
0.0.0.0/0指向IGW。与公有子网关联。私有路由表: 将
0.0.0.0/0指向NAT网关。与私有子网关联。负载均衡器的安全组(在公有子网中): 允许来自
0.0.0.0/0的HTTP/HTTPS。Web服务器的安全组(在私有子网中): 允许来自负载均衡器SG的HTTP/HTTPS,以及来自您可信IP的SSH。
数据库的安全组(在私有子网中): 允许来自Web服务器SG的MySQL/PostgreSQL。
关键安全考虑
- 最小权限原则: 仅授予安全组和NACL必要的权限。尽可能限制源IP地址。
- 使用多个可用区: 将子网和资源分布到多个AZ以实现高可用性和灾难恢复。这通过在不同AZ创建子网并将其与适当的路由表关联来实现。
- 定期审查安全组和NACL: 随着应用程序的发展,您的安全规则也应随之变化。定期审计和更新它们。
- 避免将敏感资源放在公有子网中: 数据库、应用服务器和其他敏感资源应位于私有子网中。只有需要直接互联网访问的资源(如负载均衡器或堡垒主机)才应放在公有子网中。
- 考虑堡垒主机: 如果您需要通过SSH进入私有子网中的实例,请考虑在公有子网中使用加固的堡垒主机。将堡垒主机的SSH访问限制为已知IP地址。
- VPC流日志: 启用VPC流日志以捕获进出VPC网络接口的IP流量信息。这对于安全监控和故障排除非常宝贵。
- 网络分段: 使用不同的VPC和子网来分段环境(例如开发、预发布、生产)以及应用程序的不同层级。
最终要点
围绕流量流向构建VPC:公有子网应仅暴露负载均衡器、NAT网关或严格控制访问的堡垒主机,而应用程序和数据库资源保持私有。启动后,持续审查安全组、路由表和VPC流日志,以确保网络与应用程序的实际运行方式保持一致。