从头开始构建安全 AWS VPC 指南

学习如何从头开始构建安全 AWS 虚拟私有云 (VPC)。本综合指南涵盖了 CIDR 块、子网和路由表等基本概念。发现创建公有子网和私有子网的分步说明,配置 Internet网关和NAT网关,并使用安全组和 NACL 实现关键安全措施,以实现最佳网络隔离和保护。

28 浏览量

从零开始构建安全 AWS VPC 指南

亚马逊网络服务(AWS)虚拟私有云(VPC)是在云端部署应用程序和资源的基本构建块。它提供了 AWS 云中逻辑隔离的部分,您可以在其中启动您定义的虚拟网络中的 AWS 资源。从零开始构建安全的 VPC 对于保护您的数据和应用程序免受未经授权的访问至关重要。本指南将引导您完成设计和配置新 VPC 的基本步骤,涵盖子网、路由表等关键组件,以及实现最佳网络分段和隔离的关键安全注意事项。

设计良好的 VPC 是安全云基础设施的基础。它允许您控制网络环境、定义访问规则,并根据资源的敏感性和功能对其进行分段。通过仔细规划和实施您的 VPC,您可以显著增强 AWS 部署的安全态势,减少攻击面并防止意外数据暴露。本指南将为您提供创建符合您特定需求的强大而安全的 VPC 所需的知识。

理解核心 VPC 概念

在深入配置步骤之前,了解 AWS VPC 的基本概念至关重要:

  • VPC (Virtual Private Cloud): 专用于您的 AWS 账户的虚拟网络。它是 AWS 云中逻辑隔离的部分,您可以在其中启动 AWS 资源。
  • 子网 (Subnet): VPC 中的 IP 地址范围。您可以将 AWS 资源启动到您创建的子网中。子网由其 CIDR 块定义,该 CIDR 块是 VPC 的 CIDR 块的子集。
  • 路由表 (Route Table): 一组规则(称为路由),用于确定来自您的子网或网关的网络流量的导向位置。
  • 互联网网关 (Internet Gateway, IGW): 一个 VPC 组件,允许您的 VPC 与互联网之间进行通信。它使您的 VPC 中的实例能够连接到互联网,反之亦然。
  • NAT 网关 (Network Address Translation): 一种高可用、可扩展的 NAT 服务,允许私有子网中的实例访问互联网,同时阻止从互联网发起的入站连接。
  • 安全组 (Security Group): 充当您实例的虚拟防火墙,用于控制入站和出站流量。它在实例级别运行。
  • 网络访问控制列表 (Network Access Control List, NACL): 您的 VPC 的可选安全层,充当防火墙,用于控制进出一个或多个子网的流量。它在子网级别运行。

VPC 分步创建流程

让我们开始构建您的安全 VPC。

1. 规划 IP 地址方案

第一步也是最关键的一步是规划您的 VPC 及其子网的 IP 地址范围。这涉及到为您的 VPC 选择一个无类别域间路由 (CIDR) 块。

  • VPC CIDR 块: 选择一个私有 IP 地址范围,该范围不应与您的本地网络或您可能通过 VPN 或 Direct Connect 连接的任何其他 AWS VPC 重叠。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

2. 创建您的 VPC

导航到 AWS 管理控制台中的 VPC 控制面板并创建一个新 VPC。

  1. 转到 VPC 控制面板 > 您的 VPC > 创建 VPC
  2. 名称标签: 为您的 VPC 指定一个描述性名称(例如,MySecureVPC)。
  3. IPv4 CIDR 块: 输入您计划的 CIDR 块(例如,10.0.0.0/16)。
  4. IPv6 CIDR 块: 如果需要,您可以选择启用 IPv6 CIDR 块。
  5. 租期 (Tenancy): 对于大多数用例,默认 (Default) 即可。专用 (Dedicated) 以更高的成本提供硬件隔离。
  6. 点击 创建 VPC

3. 创建子网

现在,在 VPC 内创建您的公共和私有子网。

  1. 转到 VPC 控制面板 > 子网 > 创建子网
  2. VPC ID: 选择您刚刚创建的 VPC。
  3. 子网名称: 提供一个名称(例如,MyPublicSubnet-AZ1)。
  4. 可用区 (Availability Zone): 选择一个可用区 (AZ)。最佳实践是将资源部署到多个可用区以实现高可用性。
  5. IPv4 CIDR 块: 输入此子网的 CIDR 块(例如,10.0.1.0/24)。
  6. 点击 创建子网

重复此过程创建所有计划的公共和私有子网,确保它们位于不同的可用区以提高弹性。

4. 创建互联网网关 (IGW)

您的公共子网需要 IGW 来访问互联网。

  1. 转到 VPC 控制面板 > 互联网网关 > 创建互联网网关
  2. 名称标签: MyVPCInternetGateway
  3. 点击 创建互联网网关
  4. 创建后,选择 IGW,点击 操作 (Actions),然后选择 附加到 VPC (Attach to VPC)。选择您的 VPC,然后点击 附加互联网网关

5. 创建路由表

路由表指导您的 VPC 内的流量。您通常至少需要两个:一个用于公共子网,一个用于私有子网。

a. 公共路由表:

  1. 转到 VPC 控制面板 > 路由表 > 创建路由表
  2. 名称标签: MyPublicRouteTable
  3. VPC: 选择您的 VPC。
  4. 点击 创建路由表
  5. 选择新创建的 MyPublicRouteTable
  6. 路由 (Routes) 选项卡下,点击 编辑路由 (Edit routes)
  7. 点击 添加路由 (Add route)
  8. 目标 (Destination): 0.0.0.0/0(所有 IPv4 流量)。
  9. 目标 (Target): 选择 互联网网关 (Internet Gateway) 并选择您的 IGW。
  10. 点击 保存路由 (Save routes)
  11. 关联子网 (Associate Subnets): 转到 子网关联 (Subnet associations) 选项卡,点击 编辑子网关联 (Edit subnet associations),并将您的公共子网与此路由表关联。

b. 私有路由表(使用 NAT 网关):

为了允许私有子网中的实例发起对互联网的出站连接(例如,用于软件更新),同时阻止来自互联网的直接访问,您将使用 NAT 网关。

  1. 创建 NAT 网关:

    • 转到 VPC 控制面板 > NAT 网关 > 创建 NAT 网关
    • 名称: MyNATGateway
    • 子网: 选择您的其中一个 公共 子网。
    • 连接类型: 公共 (Public)
    • 弹性 IP 分配 ID (Elastic IP allocation ID): 点击 分配弹性 IP (Allocate Elastic IP) 以创建并分配一个新的弹性 IP 地址。
    • 点击 创建 NAT 网关
    • 注意:NAT 网关会产生费用。对于基本的出站连接,请确保您的公共子网中有足够的 IP 地址可用于 NAT 网关。
  2. 创建私有路由表:

    • 转到 VPC 控制面板 > 路由表 > 创建路由表
    • 名称标签: MyPrivateRouteTable
    • VPC: 选择您的 VPC。
    • 点击 创建路由表
    • 选择 MyPrivateRouteTable
    • 路由 (Routes) 选项卡下,点击 编辑路由 (Edit routes)
    • 点击 添加路由 (Add route)
    • 目标: 0.0.0.0/0
    • 目标: 选择 NAT 网关 (NAT Gateway) 并选择您的 NAT 网关。
    • 点击 保存路由 (Save routes)
    • 关联子网: 转到 子网关联 (Subnet associations) 选项卡,点击 编辑子网关联 (Edit subnet associations),并将您的 私有 子网与此路由表关联。

6. 配置安全组

安全组充当实例级别的有状态防火墙。它们根据您定义的规则允许或拒绝流量。

  • 最佳实践: 为不同类型的资源(例如,Web 服务器、数据库服务器、应用服务器)创建特定的安全组。避免使用过于宽松的规则。

示例:Web 服务器安全组 (WebServerSG)

  1. 转到 VPC 控制面板 > 安全组 > 创建安全组
  2. 安全组名称: WebServerSG
  3. 描述: 允许 HTTP 和 HTTPS 访问
  4. VPC: 选择您的 VPC。
  5. 入站规则:
    • 类型:HTTP,协议:TCP,端口范围:80,源:0.0.0.0/0(或更具体的受信任 IP 范围)。
    • 类型:HTTPS,协议:TCP,端口范围:443,源:0.0.0.0/0(或更具体的受信任 IP 范围)。
    • (可选) 类型:SSH,协议:TCP,端口范围:22,源:您的受信任 IP 地址/范围(对管理至关重要)。
  6. 出站规则: 默认情况下,允许所有出站流量 (0.0.0.0/0)。如果需要,您可以限制此项。
  7. 点击 创建安全组

示例:数据库服务器安全组 (DatabaseSG)

  1. 创建名为 DatabaseSG 的新安全组。
  2. 入站规则:
    • 添加一条规则,允许流量通过您的数据库的默认端口(例如,MySQL 为 3306,PostgreSQL 为 5432 来自您的应用服务器的安全组(例如,WebServerSGAppServerSG)。
    • 源: 选择 自定义 (Custom),然后输入您的应用服务器安全组的 ID。
  3. 出站规则: 通常允许所有出站流量。

7. 配置网络访问控制列表 (NACL)

NACL 是在子网级别运行的无状态防火墙。它们充当额外的防御层。

  • 有状态 vs. 无状态: 安全组是有状态的(如果允许入站流量,则自动允许出站响应)。NACL 是无状态的(您必须明确定义入站和出站流量的规则)。

  • 最佳实践: 除非需要特定的子网级别访问控制,否则 NACL 通常保留默认配置。它们管理起来可能很复杂。

如果您需要使用 NACL:

  1. 转到 VPC 控制面板 > 网络 ACL > 创建网络 ACL
  2. 名称标签: MyNacl
  3. VPC: 选择您的 VPC。
  4. 点击 创建网络 ACL
  5. 选择 NACL,并在 入站规则 (Inbound Rules) 下添加规则。
  6. 规则编号: NACL 按顺序评估规则,从编号最低的规则开始。使用 100200300 等数字,以便将来插入规则。
  7. 允许/拒绝 (Allow/Deny): 指定是允许还是拒绝流量。
  8. 协议、端口范围、源/目标: 定义流量参数。
  9. 记住配置相应的 出站规则 (Outbound Rules)
  10. 通过转到 子网关联 (Subnet Associations) 选项卡,将 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 服务器的安全组(位于私有子网中): 允许来自负载均衡器安全组的 HTTP/HTTPS,以及来自您受信任 IP 的 SSH。
  • 数据库的安全组(位于私有子网中): 允许来自 Web 服务器安全组的 MySQL/PostgreSQL。

关键安全注意事项

  • 最小权限原则 (Principle of Least Privilege): 仅授予您的安全组和 NACL 必要的权限。尽可能限制源 IP 地址。
  • 使用多个可用区: 将您的子网和资源分布在多个可用区 (AZ) 中,以实现高可用性和灾难恢复。这通过在不同的 AZ 中创建子网并将它们与适当的路由表关联来实现。
  • 定期审查安全组和 NACL: 随着应用程序的发展,您的安全规则也应随之发展。定期审计和更新它们。
  • 避免将敏感资源置于公共子网中: 数据库、应用服务器和其他敏感资源应位于私有子网中。只有需要直接互联网访问的资源(例如负载均衡器或堡垒主机)才应位于公共子网中。
  • 考虑使用堡垒主机 (Bastion Hosts): 如果您需要通过 SSH 连接到私有子网中的实例,请考虑在公共子网中使用经过强化的堡垒主机。将对堡垒主机的 SSH 访问限制为已知的 IP 地址。
  • VPC 流日志 (VPC Flow Logs): 启用 VPC 流日志以捕获进出您的 VPC 中网络接口的 IP 流量信息。这对于安全监控和故障排除非常宝贵。
  • 网络分段 (Network Segmentation): 使用不同的 VPC 和子网来分段环境(例如,开发、预生产、生产)和应用程序的不同层级。

结论

从零开始构建安全的 AWS VPC 涉及对其核心组件进行仔细的规划和配置。通过理解 CIDR 块、子网、路由表,并有效利用安全组和 NACL,您可以为您的 AWS 资源建立一个强大且隔离的网络环境。请记住,安全是一个持续的过程,因此持续的监控、审查和遵循最佳实践对于维护安全的云基础设施至关重要。