VPC定义
VPC 是 Virtual Private Cloud。本质上,VPC 是云中的虚拟数据中心。Amazon VPC 是虚拟网络,与单个 AWS 区域关联,它也是一种服务,定义了客户选择部署的 AWS 服务和资源的边界以及这些服务和资源如何相互通信和与外部网络(如互联网)通信。AWS 支持混合云配置,这些配置有助于 Amazon VPC 与本地部署站点(如物理数据中心)之间的连接。
AWS 账户中有两种类型的 Amazon VPC:默认 Amazon VPC 和自定义 Amazon VPC。
默认 Amazon VPC
当您创建 AWS 账户时,每个受支持的 AWS 区域中将创建默认 Amazon VPC。使用默认 Amazon VPC,您可以立即开始部署资源,而不必考虑底层网络。
-
每个默认 Amazon VPC 在受支持区域内的每个可用区内创建一个公有子网。
-
每个公有子网针对入站和出站流量配置了默认路由,用于将 IP 流量路由到普通互联网。
-
AWS 设置了允许所有流量的配置,因此,默认情况下没有隐私和隔离。
-
每个区域只允许一个默认 Amazon VPC。
-
每个默认 Amazon VPC 都附带一个无类别域间路由 (CIDR) 范围,即给定的 IP 地址范围。
这个默认 Amazon VPC CIDR 定义了默认 Amazon VPC 可使用的 IP 地址的起始和结束范围。Amazon VPC 内的所有内容都使用此 CIDR 范围。与 Amazon VPC 的所有通信都需要使用 Amazon VPC CIDR,而传出通信将来自此 Amazon VPC CIDR。
所有默认 Amazon VPC 的配置都相同。为获得更高的弹性,默认 Amazon VPC 将被自动划分为跨可用区的若干子网。
-
每个默认 Amazon VPC 的配置为在所在区域的每个可用区中都有一个子网。
-
默认 Amazon VPC 中的每个子网都使用 Amazon VPC CIDR 的一部分 IP 地址范围。
-
每个子网的 IP 地址范围对其他子网的 IP 地址范围来说必须是唯一的,且不能重叠。
如果使用默认 Amazon VPC,其中一个可用区出现故障,关联的子网也会故障,但其他可用区中的其他子网仍可运行。
您的子网的 Amazon VPC IPv6 CIDR 范围为 /64,Amazon VPC CIDR 范围为 /56。本地路由用于在 Amazon VPC 内的子网之间进行通信。默认 Amazon VPC IPv4 CIDR 172.31.0.0/16 始终是相同的,并且设计和配置也相同。
自定义 Amazon VPC
自定义 Amazon VPC 是单个账户下受支持区域内逻辑隔离的虚拟网络,使其成为区域服务。
-
与默认 Amazon VPC 不同,自定义 Amazon VPC 的每个组件都必须在创建时得到明确定义;如果没有明确配置,则不允许传入或传出。
-
之后无法修改某些决策,例如 IPv4 和 IPv6 支持以及 Amazon VPC 的 CIDR 块。
-
可根据需要修改 Amazon VPC 的其他功能,例如子网、路由和 VPC 终端节点。
自定义 Amazon VPC 类似于默认 Amazon VPC,提供了一个逻辑隔离的虚拟网络,该网络支持资源和服务的部署,这些资源和服务由创建的 Amazon VPC 所在区域支持。Amazon VPC 定义的虚拟网络提供完全控制。
这包括:
-
通过定义每个子网选择受支持的 IP 地址范围
-
管理网络内部流量
-
管理流量通过路由表和网络网关进出 Amazon VPC 的方式
在本课程的后面部分,您将了解如何配置公有子网,以允许应用程序或资源访问互联网,以及如何使用私有子网(无外部网络访问权限的子网)来帮助保护数据库或后端系统。您还可以了解通过 Amazon VPC 提供的多层安全性以及 Amazon VPC 的使用方式;例如,通过网络 ACL 和安全组控制允许哪些人员访问部署在 Amazon VPC 内部的哪些资源。
AWS 支持通过以下方法在 Amazon VPC 与本地部署网络之间建立安全连接,从而扩展 AWS 环境:
-
AWS Direct Connect
-
AWS 站点到站点虚拟专用网络 (VPN)
-
AWS Client VPN
默认VPC
每个 AWS 账户都附带一个默认 Amazon VPC,使客户能够立即开始在AWS Cloud 中构建环境。
默认 Amazon VPC 最初配置有 /16 IPv4 CIDR 块、区域可用区的 /20 默认子网、互联网网关、到互联网网关的默认路由、默认安全组、默认网络 ACL 以及默认动态主机配置协议 (DHCP) 选项集。
通往互联网网关的默认路由可确保默认 Amazon VPC 中的所有初始子网都有一条到互联网的出站路由,并配置为分配在默认 Amazon VPC 内启动的任何 Amazon Elastic Compute Cloud (Amazon EC2) 实例,带公有和私有 IP 地址。
下图说明了默认 Amazon VPC 的所有功能。例如,请注意,默认 Amazon VPC 的 CIDR 块始终为 172.31.0.0/16。
自定义VPC
在每个 AWS 账户中,您还可以构建自定义 Amazon VPC,它是一个隔离网络,与默认 Amazon VPC 不同。使用自定义 Amazon VPC,如果没有明确配置,则不允许传入或传出。
不同于创建 AWS 账户时 AWS 配置的默认 Amazon VPC,自定义 Amazon VPC 是完全可配置的。
自定义 Amazon VPC 与默认 Amazon VPC 之间的另一个区别是,使用自定义 Amazon VPC 时可选择默认租赁或专用租赁选项。默认租赁用于 Amazon VPC 内预置的资源,这些资源预置在与他人共享的硬件上。专用租赁选项是您专用的硬件。它不会与他人共享,但如果选择了专用租赁选项,之后则无法修改。届时需要删除 Amazon VPC 并重新配置才能选择默认租赁。专用主机成本更高,为了优化成本,请选择默认租赁,除非有特定的理由选择专用租赁选项。
自定义 Amazon VPC 还可以使用 IPv4 CIDR 块和公有 IP。在预置自定义 Amazon VPC 时,AWS 会分配私有 IPv4 CIDR 块。可选择的 CIDR 范围最大是 /16,有 65,536 个 IP 地址,最小是 /28,有 16 个 IP 地址。另外,对于自定义 Amazon VPC,还有一个可选的辅助 IPv4 地址数据块。自定义 Amazon VPC 也可以配置单个分配的 IPv6 /56 CIDR 块;与 IPv4 不同,IPv6 CIDR 由 AWS 自动分配。
自定义 Amazon VPC 还具有完全预置的域名系统 (DNS),即网络 +2 IP 地址。
总结
互联网网关有两个用途:
- 在 VPC 路由表中为互联网可路由流量提供目标
- 为已经分配了公有 IPv4 地址的实例执行网络地址转换 (NAT)
路由表中的每个路由都指定一个目的地和一个目标。如果路由表有多条路由,则使用与流量匹配的最具体路由来确定如何路由流量。
在提供的示例中,10.0.0.0/16 范围内的 IPv4 地址将路由到本地目标,所有发往 IPv4 地址目的地的流量都将路由到连接 Amazon VPC 的互联网网关。
IAM介绍
IAM 概览
创建 AWS 账户后,AWS 会创建一个账户根用户,该用户对该 AWS 账户拥有完全权限,且无法调整账户根用户的权限。但是,在大多数情况下,您组织中的其他人员需要获得 AWS 账户内部的权限。
组织有不同的用户,也许是存储团队、工程师、系统管理员,这些人员需要访问 AWS 账户,还需要访问 AWS 账户中的服务。遵循最小权限原则是 AWS 的最佳实践,这意味着只向 AWS 账户中的用户授予他们需要访问的特定服务的访问权限。AWS 账户中的用户只需要权限即可完成他们的任务;无关的权限会增加操作超出其单独角色范围的风险,并且可能对您的 AWS 环境造成不可预见的影响。
通过使用最小权限原则,您可以限制潜在风险,并确保用户只拥有所需的权限,不会越权。每个 AWS 账户都有一个根用户账户。账户根用户始终拥有对账户和 AWS 服务的完全访问权限,这使得根用户可以覆盖非根 IAM 账户实施的任何过于严格的安全控制措施。
-
IAM 用户代表需要访问 AWS 账户的人员和应用程序。
-
IAM 组是相关用户组,例如,您的开发团队、系统管理员、存储工程师和财务团队。
-
AWS 服务使用 IAM 角色。IAM 角色还可用于授予对您的 AWS 账户的外部访问权限以及对 AWS 账户中的资源和服务的访问权限。例如,AWS 账户内的 Amazon Elastic Compute Cloud (Amazon EC2) 实例需要对 Amazon CloudWatch、Amazon Simple Storage Service (Amazon S3) 等的可编程访问权限。
-
可使用 IAM 策略允许或拒绝对 AWS 服务的访问IAM 策略必须附加到 IAM 用户、IAM 组或 IAM 角色。AWS 提供了预配置的策略,即 AWS 托管策略,可根据需要分配这些策略。客户还可以创建自定义内联策略,允许或拒绝最适合客户 AWS 环境的独特权限组合。就其本身而言,策略就设置在那里,要采取行动,必须将其附加到用户、组或角色。
-
简要说来,IAM 充当身份提供者 (IdP),并管理 AWS 账户内的身份。IAM 对这些身份进行身份验证,便于 AWS 账户登录活动能够登录 AWS 账户,然后根据附加的策略授权这些身份访问资源或拒绝其对资源的访问。
安全功能
有状态控件对比无状态控件
网络 ACL 是无状态的,这意味着如果允许流量进入,则默认情况下不允许对该流量的出站响应。
-
对于网络 ACL 规则,需要明确添加入站和出站地址和端口。
-
网络 ACL 只能看到流量单向流动,因此如果有允许入站规则,还必须有允许出站的规则。然后,网络 ACL 需要明确了解允许入站的流量也被允许出站。
-
网络 ACL 将流量视为两个不同的流,需要两个规则,每个流都有一个规则。如果没有添加出站规则,则只允许流量进入。
但是,安全组是有状态的。如果允许流量进入,则会自动允许对该流量的出站响应。
-
安全组有入站和出站规则,但是由于安全组是有状态的,这意味着如果允许流量进入,则会自动允许该流量返回。
-
安全组将入站和出站流量视为同一信息流的一部分。
-
安全组和网络 ACL 之间的区别在于,安全组可识别 AWS 资源。因此,对于 Amazon EC2 实例,可以将实例 ID 添加到该实例的安全组规则中,以允许来自该实例的流量进出。客户还可以为其他安全组添加规则,或者为安全组自己添加规则。
-
另一个重大区别是,安全组有隐藏的显式拒绝,这意味着任何未明确允许的内容都将被拒绝。
其他 Amazon VPC 安全最佳实践
Elastic Load Balancer
负载均衡器是一种用于在一组服务器或服务之间分发传入连接的资源。传入连接将到达负载均衡器,负载均衡器随后会将这些连接分发给服务器或服务。负载均衡器非常适合与 AWS Auto Scaling 组配对,以增强应用程序的高可用性、容错能力和可扩展性。
Elastic Load Balancing (ELB) 自动在多个目标(例如 Amazon EC2 实例、容器、IP 地址、AWS Lambda 函数和虚拟设备)之间分发传入的应用程序流量。它可以在单个可用区中或跨多个可用区处理不同的应用程序流量负载。
所有 Elastic Load Balancer 都具有高可用性、弹性伸缩和稳健的安全性,可让您的应用程序实现容错。AWS 提供了四种类型的负载均衡器;每种类型都为特定的配置提供了一些优势。
Classic Load Balancer
Application Load Balancer
网络负载均衡器
Gateway Load Balancer
高可用方法
需要第二个子网
第一步是创建第二个子网,并在其中提供另一组类似于第一个子网的资源。这些资源可以始终可用,并占用一部分流量,以确保当一个资源由于某种原因而不可用时,您的应用程序仍然处于运行状态。
第二个子网也可用于冷故障转移选项。如果您的应用程序不可用,您可以使用 AWS Auto Scaling 指定一组新的资源自动启动到第二个子网中。当新的资源可用时,可以使用流量管理选项(例如 Elastic Load Balancing 或 Amazon Route 53)自动将您的用户重新路由到新的资源。
此选项可能会有一些停机时间,但您的成本可能低于第一个选项。
有关更多信息,请参阅 AWS Auto Scaling。
使用负载均衡器管理流量
现在您有两个子网,如何才能管理它们之间的流量?
Elastic Load Balancing 服务中的 Application Load Balancer (ALB) 可以在子网中的端点之间分发负载。您可以根据业务需求在这些资源之间拆分流量,也可以使用 ALB 执行 A/B 测试和蓝/绿部署。
有关更多信息,请参阅为蓝/绿部署配置负载均衡器。
使用多可用区方法
AWS 建议将第二个子网保留在单独的可用区中,以实现冗余和容错能力。这样会分散您的风险,因此如果一个可用区中的资源不可用,第二个可用区中的资源不会受到影响。
可以将路由表与多个子网关联
将同一个路由表与两个子网关联,因为它们将使用相同的路由。
请注意,尽管您可以将一个路由表与多个子网关联,但一个子网不能与多个路由表关联。
将运行状况不佳的资源负载转移到运行状况良好的资源
Elastic Load Balancing 还为相关的资源提供了运行状况检查,使您的基础设施能够自动将运行状况不佳的资源出现的连接故障转移到运行状况良好的资源。
注意事项
1、Amazon VPC 具有高可用性,这是因为每个 AWS 区域都有多个可用区 (AZ)。但高可用性的有效实施取决于客户的设计和基础设施实施。
2、为了实现高可用性,我们需要确保在多个可用区中提高弹性。
3、每个子网都必须与一个路由表关联,此路由表会指定允许出站流量通过哪些路由离开子网。创建的每个子网都会自动与 VPC 的主路由表关联。可以更改此关联,并修改主路由表的内容。
4、使用 Elastic Load Balancing 为基础设施提供以下功能:
不同子网中的资源之间的流量管理
自动将故障从运行状况不佳的连接转移到运行状况良好的连接
自动将运行状况良好的新实例注册到负载均衡器
生产就绪型:适用于 Amazon VPC 的多层架构
实施 AWS CAF 的安全性视角的第一步是从数据的角度考虑安全性。必须从一开始就知道并理解业务需求、业务目标和账户结构。客户必须在设计过程中尽早落实这一点,因为这样会将账户策略和账户设计推送回 AWS Well-Architected Framework 中。不要考虑本地部署和外部设计和数据安全性,而应考虑您正在保护的数据、数据存储方式以及哪些人员有权访问这些数据。
适用于应用程序架构设计的最佳实践是什么?
最佳实践:限制与资源接触
单层
多层

第 1 层:您的公有子网
这是一个 CIDR 为 10.0.0.0/20 的 Amazon VPC。它还有两个公有子网,每个子网都在 /24 范围内预留了 512 个 IP 地址。
AWS 建议为公有子网预留的 IP 地址少于为私有子网预留的 IP 地址(最佳实践是尽量减少公有子网中的资源)。
第 1 层:互联网访问资源
要限制与互联网的接触,您可以在架构中使用:
- 面向互联网的 Application Load Balancer,适用于传入的流量
- NAT 解决方案(例如 NAT 网关或者 Amazon EC2 上的 NAT 实例),适用于传出的流量
由于负载均衡器和 NAT 网关都是托管服务,而且默认情况下具有高可用性,因此您无需担心它们成为瓶颈。
第 2 层:私有子网中的应用程序
此 Amazon VPC 还有一层私有子网,供可能运行在 Amazon EC2 实例上的应用程序使用。这些子网中都预留了 1,024 个 IP 地址,以满足每个应用程序的扩容需求。随着企业的应用程序组合不断扩张,它还能够容纳新的应用程序。
连接到这两个公有子网的 Application Load Balancer 会在私有子网中的应用程序资源之间分配流量。
第 3 层:第二个私有子网中的数据
这种设计将数据资源放到第一个私有子网后面的第二个私有子网中。此示例预留的 IP 地址少于应用程序子网,但多于公有子网(您可能需要扩展应用程序资源,以使其多于应用程序背后的数据资源)。
但在规划您自己的 Amazon VPC 时,应始终根据应用程序和使用模式对 IP 的预计需求方式来预留 IP。
数据层可以是一个 Amazon RDS 部署,也可以是在 Amazon EC2 上运行的一个数据库。无论哪种情况,都可以使用多可用区配置,如下所示。辅助副本可能是一个只读副本,也可能是一个被配置为在出现故障时自动替换主副本的备用副本。
有关更多信息,请参阅 Amazon RDS。
预留额外的 IP 地址
尽管您应始终为已部署的基础设施预留足够多的 IP 地址,但在 Amazon VPC 中为网络架构的变更预留一些额外的 IP 地址也很重要。
在此示例中,架构在每个私有子网中预留了 1,024 个 IP 地址。如果您愿意,也可以不预留所有这些 IP 地址。
是否应该始终使用多层架构?
您可能遇到 Amazon VPC 不需要三层架构的情况。它甚至可能不需要两层架构。您甚至可能需要考虑将多个 Amazon VPC 连接在一起,而不是将全部内容放到一个 Amazon VPC 中。我们简要介绍一下您可能在哪些情况下考虑每一种这样的设计。
单层Amazon VPC设计
N层Amazon VPC设计
更复杂设计
其他 Amazon VPC 注意事项
路由表
系统会为您创建的每个 Amazon VPC 和子网创建默认路由表。
尽管账户中的每个 AWS 区域都有自己的默认 Amazon VPC 和自己的默认路由表,但这些路由表是按 Amazon VPC 而不是账户创建的。
虽然路由表可以引导流量进出 Amazon EC2 实例,但默认情况下,系统不为实例提供路由表。
尽管路由表中不应存在适用于同一个资源的相同条目,但 CIDR 块可以重叠。当路由表条目的 CIDR 块重叠时,更有针对性(范围更小)的 CIDR 块具有优先权。
ELB
默认情况下,ELB 将扩展以处理流量的变化,并检测和替换不可用的负载平衡节点,因此具有高可用性。
ELB 负载均衡器可以面向互联网,也可以面向内部。
尽管可以使用 ELB 负载均衡器在不同的子网和可用区中的资源之间进行路由,但它们无法在不同区域中的资源之间路由流量。
ELB 是一项托管服务,但它的负载均衡器需要启动到您的 Amazon VPC 中。如果您的 Amazon VPC 不可用,其中的任何负载均衡器也将不可用。
ELB 负载均衡器无需拥有自己的子网。它们可以与面向互联网的其他资源(例如网络地址转换 (NAT) 解决方案)共享子网。
尽管每个网络架构都可能有所不同,并应对其进行自定义以满足它们的工作负载需求,但基本的三层 VPC 架构遵循如下模式:
NAT 解决方案:公有
应用程序:私有,可路由到公有子网
数据:私有,无法路由到公有子网
按照可能需要最多 IP 地址到最少 IP 地址的顺序,三层 VPC 架构如下所示:
1.私有(应用程序)
2.私有(数据)
3.公有
为什么?
您的公有子网应当具有最小的受攻击面。
它们还应当尽量减少资源消耗。在可能的情况下,它们应当使用无需像 Amazon EC2 Auto Scaling 组或数据层那样多的 IP 地址的托管服务。
根据您的解决方案,数据层子网可能需要拥有多于公有子网但少于应用程序层子网的 IP 地址。
互联网网关 -> Application Load Balancer -> 应用程序 -> 数据 -> 应用程序 -> 网络地址转换 (NAT) 解决方案 -> 互联网网关
在 3 层架构示例中,面向互联网的 Application Load Balancer 部署到公有子网并直接路由到私有(应用程序)子网。
有用的链接
请参阅课程中的以下链接,以了解有关课程中涵盖的主题的更多信息。
- Amazon VPC 常见问题
- Amazon VPC 定价
- Amazon Virtual Private Cloud 文档
- 使用单个公有子网的 VPC
- 什么是 VPC 对等连接
- VPN 连接
- 什么是 AWS Direct Connect?
- VPC 终端节点
安全性合规性资源
有关更多信息,AWS 提供了以下资源以帮助您合规: