介绍

亚马逊 VPC牙齿,在 AWS 上构建虚拟网络这是一项可以完成的服务。
VPC 数概述与理论关于下面的文章详细解释。

另一方面,”实践和理论一样重要!"
我认为有很多人认为
在这篇文章中,我们实际上使用 VPC 构建了一个虚拟网络我将解释如何做到这一点。

作为施工指南,以下尽可能遵循最佳实践我想继续。

尤其是 VPC 流日志、VPC 对等互连、VPN 等。设置复杂我容易上瘾,非常容易理解的解释我会去做,所以我希望它会是一篇你可以高效学习构造方法的文章。

本文构建的VPC的配置

我将解释如何使用如下所示的配置(上面文章开头介绍的配置)构建VPC,以及实际的控制台操作方法。

【ベストプラクティス】Amazon VPC の構築方法を分かりやすく解説

上述配置的意图作为 VPC1 (用于 Web 应用程序的 VPC) 和 VPC2 (模拟内部网络的 VPC) 通过结合用于发布应用程序和内部网络的网络的伪复制我的目标是
(本次就不介绍了,因为跑题了,但是在实际操作中,请结合WAF或者IDS等防御产品,或者采取获取证书、切换到HTTPS等措施来增加安全性等级。)

这是一个漫长的过程,但是等到它完成的时候,我想你应该可以搭建一个VPC,相当于一个简单的业务网络,所以我希望你能加入我们。

VPC 安全最佳实践

在实际建造之前满足的最佳实践检查 (见 AWS 官方)

・最佳实践清单

最佳实践建议 相关功能
通过向多个 AZ 添加子网来确保高可用性(多 AZ 配置) AZ
子网
ELB
自动缩放
使用网络 ACL 控制对子网的访问,使用安全组控制子网内实例的流量 安全组
网络 ACL
使用 IAM 联合身份、用户和角色管理对 AWS VPC 资源和 API 的访问 IAM
使用 Amazon CloudWatch 和 VPC 流日志监控 IP 流量 安全组
网络 ACL

我会解释每一个

通过多可用区配置确保高可用性

在 VPC 中跨多个可用区并行将子网和实例放入多可用区配置通过构建一个可用区失败即使发生确保高可用性、弹性和可扩展性我能做到。

尤其是对于商业web应用来说,是可以说是必不可少的配置,ELB(ALB, NLB) 和自动缩放结合使用,即使在平时也可以根据访问次数,在AZ之间进行适当的负载均衡(ELB和Auto Scaling将在另一篇文章中详细介绍)

如下文所示,可以看出多AZ配置的运行方式的选择即使在过去的AWS故障中也对容错做出了很大贡献。

在本文中, ”VPC1“喜欢,在 2 个 AZ 中并行创建子网通过分别安装Web服务器、AP服务器、DB服务器,实现多可用区配置正在做


使用网络 ACL 控制对子网的访问,使用安全组控制子网内实例的流量

如前文所述,VPC 使用网络 ACL 和安全组充当防火墙VPC内部的访问控制将进行。

由于这些访问控制功能是 VPC 安全的基石,请务必根据您的用例进行设置.

两者的主要区别见下表。

姓名 外侧过滤器目标 过滤方式 处理退货沟通 内部过滤器目标
网络 ACL 外部IP地址+端口号+协议 白名单+黑名单 无国籍 每个子网
安全组 外部 IP 地址 (安全组 ID,也可以指定前缀列表)+端口号+协议 白名单 有状态的 每个实例(按安全组 ID 分组)

另外,虽然AWS官方没有提到,但是很多第三方文章比如下面,首选安全组而不是网络 ACL去做推荐它一直。

主要原因是它是无状态的,可以同时指定白名单和黑名单。设置网络ACL很复杂, 仅指定有状态和白名单安全组易于设置容易防止错误(另一个原因是安全组允许在每个实例的基础上进行更细粒度的访问控制,而网络 ACL 只能在每个子网的基础上设置规则。)

本文还使用安全组实现访问控制。(网络 ACL 使用默认设置)


使用 IAM 联合身份、用户和角色管理对 AWS VPC 资源和 API 的访问

这是关于 IAM 而不是 VPC (官方评论是 IAM 定义本身),但是VPC内外资源(实例或 S3 存储桶)有通过 IAM 适当授予权限需要这样做。

如果前面提到的网络ACL和安全组是“网络侧的访问控制”,那么这个IAM就是“主机端访问控制"等价于

有关详细信息,请参阅下面的 IAM 文章请给我

在本文中,IAM 设置将出现在 VPC 流日志和对 S3 的访问中。
像这样,CloudWatch、S3 等。使用 VPC 外部的服务进行访问控制特别是在IAM 发挥重要作用实现。


使用 Amazon CloudWatch 和 VPC 流日志监控 IP 流量

作为安全措施,保存日志以后能够追踪攻击或故障的原因非常重要。

在 VPC 中,VPC 流日志履行此角色。

可以选择 CloudWatch 和 S3 作为 VPC 流日志的存储位置。
这个网站据我所知,正确使用这两个存储位置似乎很好,如下所示。

流日志存储位置 用法
CloudWatch 日志 检测网络流量中的某些访问趋势并发出警报
S3 累积流日志并使用 Athena 分析它们时,或者当您想要降低成本时

最佳实践建议保存到 CloudWatch Logs。

本文此外,设置流日志保存到 CloudWatch



具体施工方法

从这里,我们将解释具体的构造方法。
同样,我们将构建以下 VPC 配置以满足最佳实践。

【ベストプラクティス】Amazon VPC の構築方法を分かりやすく解説

按照以下步骤构建

  • 创建 VPC 和子网 (VPC1)
  • 创建安全组 (VPC1)
  • 路由表配置(VPC1)
  • 创建 EC2 实例 (VPC1)
  • 创建流日志 (VPC1)
  • 创建 ELB (VPC1)
  • 创建 RDS (VPC1)
  • 创建 S3 存储桶 (VPC1)
  • 确认与每个实例 (VPC1) 的通信
  • 创建 VPC 和子网 (VPC2)
  • 创建安全组 (VPC2)
  • 创建 EC2 实例 (VPC2)
  • 创建 VPC 对等互连 (VPC1 & 2)
  • 路由表配置(VPC2)
  • 代理服务器设置 (VPC2)
  • 创建 VPN (VPC2)
  • 确认与每个实例的通信 (VPC2)

长,但是假设 Web 应用程序在 VPC 构建中发生几乎相同的流程(除了 Lambda 等面向 serverless 的配置),所以如果您从现在开始使用 VPC,请阅读它。


创建 VPC 和子网 (VPC1)

首次创建 VPC 时,您可以随 VPC 创建子网、终端节点等。VPC 向导很有用。

VPC 向导可以按照“VPC 向导”→“创建 VPC”的顺序进行操作,如下图所示。

【ベストプラクティス】Amazon VPC の構築方法を分かりやすく解説

*您也可以从“您的 VPC”选项卡中创建它,如下所示。

【ベストプラクティス】Amazon VPC の構築方法を分かりやすく解説

您可以在 VPC 向导中指定的设置

在 VPC 向导中,您可以指定下图所示的设置。

【ベストプラクティス】Amazon VPC の構築方法を分かりやすく解説

由于所选设置的VPC配置显示在“预览”中,方便在GUI中一一查看设置。

我会解释每一个

・创作资源

您可以选择“仅 VPC”或“VPC 等”,如果选择“VPC 等”,则可以同时创建子网和端点。

选择“VPC 等”会使设置更容易,因此最好先选择它。

・名称标签的自动生成

这里设置的名称会添加到VPC名称和内部资源名称(子网、路由表、IGW、NAT网关、端点)的开头(严格来说会注册在Name标签中)。

如果给一个代表VPC功能的名字,以后只按名字排序就方便了。

这一次,我们将它命名为for-web

・IPv4 CIDR 块

以 CIDR 表示法指定整个 VPC 的网络地址。

这次按照上面的配置图指定172.16.0.0/23

・IPv6 CIDR 块

在 IPv6 中指定整个 VPC 的网络地址

通常只使用 IPv4,所以最好选择“No IPv6 CIDR block”。

・租赁

选择“默认”或“独家”。

如果您选择“专用”,您的 VPC 中的实例将具有专用实例适用(详情见EC2文章(建设中)将在中解释)

如果您选择默认,则专用实例不适用。由于成本将减少该数量,因此选择此“默认值”通常是一个好主意。

・可用区数

您可以选择 VPC 中的可用区数量。

为保证冗余,建议设置2个或更多(似乎选择 3 甚至可以提高可用性)

您还可以通过展开“自定义 AZ”来选择特定的 AZ 位置。

这次按照上面的配置图,选择“2”

・公共子网数

您可以选择 VPC 中的公有子网数量。子网默认均匀分布在每个AZ中(为了冗余)

这次根据上面的配置图,选择“2”

・私有子网数

您可以选择 VPC 中的私有子网数量。子网默认均匀分布在每个 AZ(为了冗余)

这次按照上面的配置图,选择“2”

・自定义子网 CIDR 块

您可以使用 CIDR 表示法为您创建的每个子网指定网络地址。

这一次,根据上面的配置图为四个子网中的每一个指定地址。

・NAT网关

选择要创建的 NAT 网关的数量。

选择无不创建 NAT 网关
如果选择“1AZ内”,则VPC内只会创建一个NAT网关。
选择“1 per AZ”为每个VPC创建一个NAT网关

这次根据上面的配置图,选择“无”。
(私有子网中的实例也可以通过 S3 的网关端点执行 yum 命令,因此可以实现最小更新应用程序。)

由于 NAT 网关需要一些维护成本,因此只有在私有子网中的实例需要 yum 以外的 Internet 访问时,我们才会每次创建它。

・VPC端点

选择是否为 S3 创建网关端点。

选择无不创建网关端点
选择“S3 Gateway”为 S3 创建网关端点

这次按照上面的配置图选择“S3网关”。

・DNS选项

详情请参考下文,但如果您想通过域名访问VPC中的公网IP地址的实例(使用Route53进行名称解析),请同时选择“启用DNS主机”和“启用DNS解析”。请检查

考虑到这次 Web 应用程序的使用情况,请检查“启用 DNS 主机”和“启用 DNS 解析”。



创建安全组 (VPC1)

通过遵循最佳实践并创建充当防火墙的安全组,提高 VPC 内的网络安全性.
(稍后您需要将其与 EC2 实例或启动模板相关联。)

这一次,我们将分别创建“1.Web服务器安全组”、“2.AP服务器安全组”和“3.RDS安全组”。
(创建 VPC 时还会创建默认安全组,但未使用。)

1. Web 服务器的安全组

要创建安全组,请按“安全组”→“创建安全组”,如下图所示。

【ベストプラクティス】Amazon VPC の構築方法を分かりやすく解説

可以在以下屏幕上创建安全组。

【ベストプラクティス】Amazon VPC の構築方法を分かりやすく解説

您基本上可以按照屏幕上的说明进行操作,但请注意以下事项:

  • 入站规则的”协议“牙齿,仅指定需要访问目标实例的协议是(不要指定不必要的协议)
  • 入站规则的”“牙齿,发件人Anywhere-IPv4(所有来源)、CIDR 块、安全组、前缀列表等都可以指定。在安全性方面优于 Anywhere-IPv4最好缩小范围
  • 出站规则默认情况下都允许。通常,它可以保持原样。但,高级安全(阻止与 C&C 服务器等的通信)如果你想达到
  • 安全组很难区分所以最好指定“名称”标签(例如,在创建 VPC 时指定类似于名称标签“for-web”的名称)

这一次,我们将使用它作为 Web 服务器,因此我们将允许 HTTP 和 HTTPS 进行 Web 通信,并允许 SSH 通信进行开发。
最初,我们将允许 Anywhere-IPv4 作为所有内容的来源,但由于允许所有 SSH 在安全方面有点危险,我们稍后将限制对 VPC2 内的访问。

2. AP服务器的安全组

为 AP 服务器创建一个安全组,如下所示

【ベストプラクティス】Amazon VPC の構築方法を分かりやすく解説

在入站规则中允许 SSH、HTTP 和 HTTPS,方式与 Web 服务器相同,但由于 HTTP 和 HTTPS 通信仅与 Web 服务器执行,请将源更改为 Web 服务器的安全组。

以上创建完成后,如下Self 作为 HTTP 和 HTTPS 通信的允许目标(AP服务器的安全组)添加去做
【ベストプラクティス】Amazon VPC の構築方法を分かりやすく解説

【ベストプラクティス】Amazon VPC の構築方法を分かりやすく解説【ベストプラクティス】Amazon VPC の構築方法を分かりやすく解説

稍后,我们会将 AP 服务器实例和 AP 服务器的 ELB 分配给该安全组。除非您将自己添加到允许的目标,否则不允许内部实例和 ELB 之间的通信因此,执行上述操作。
(在安全性方面,将instance和ELB安全组分开会更健壮。属于)

另外,和1一样,后面我们将把SSH通信的访问限制在VPC2的范围内。

3. RDS 的安全组

为 RDS 创建以下安全组。

【ベストプラクティス】Amazon VPC の構築方法を分かりやすく解説

这次假设使用 MySQL 作为 RDS DB 引擎,允许 MYSQL/Aurora 作为入站规则类型,并将源更改为 AP 服务器的安全组。

PostgreSQL 等使用其他数据库引擎时作为适当的更改类型请。

路由表配置(VPC1)

本来需要创建路由表并设置各个子网和路由与外部,但是VPC向导如果您使用创建 VPC,默认设置以下路由表,基本上,不需要更改设置。.

目标子网 创建的路由表数 路线到
公共子网的路由表 所有可用区中的 1 个 互联网网关,私有子网
私有子网的路由表 每个可用区 1 个 公共子网,S3 端点,(NAT 网关*)

*这次没有设置路由,因为没有创建NAT网关。

注意,稍后添加 NAT 网关和子网如果你这样做了,需要单独创建/修改路由表有。稍后将描述使用 NAT 网关的设置示例。



创建 EC2 实例 (VPC1)

为 Web 服务器和 AP 服务器创建一个实例。
详细的创建方法我就省略了(单独EC2 文章正在创建中),在图中创建4个实例(Web服务器2个+AP服务器2个),内容如下

  • 名称:“web-server-1”、“web-server-2”、“ap-server-1”、“ap-server-2”
  • AMI:Amazon Linux2 AMI (HVM)
  • 实例类型:选择默认t2.micro
  • 密钥对:是(如果未创建,则创建新的)
  • VPC:指定您之前创建的 VPC
  • 子网:选择您创建的与上图中的实例对应的子网
  • 自动分配公共 IP:为 Web 服务器启用,为 AP 服务器禁用
  • 防火墙:勾选“Select an existing security group”并为之前创建的Web服务器或AP服务器选择对应的安全组
  • 存储:选择默认 8GB gp2 (EC2 最佳实践理想情况下,最好附加多个 EBS,但这次我们将使用默认设置。)

如果您创建一个新的密钥对,请不要忘记在本地下载它,因为稍后您将需要它来进行 SSH 连接。



创建流日志 (VPC1)

遵循最佳实践,配置为在 CloudWatch 中存储流日志去做。

IAM 策略设置有点复杂,请同时参考 IAM 文章。

为流日志创建 CloudWatch 日志组

首先,从 CloudWatch 控制台进入日志组创建屏幕。

【ベストプラクティス】Amazon VPC の構築方法を分かりやすく解説

通过指定日志组名称等来创建日志组。

【ベストプラクティス】Amazon VPC の構築方法を分かりやすく解説

为流日志创建 IAM 策略

转到 IAM 控制台并单击“策略”->“创建策略”

【ベストプラクティス】Amazon VPC の構築方法を分かりやすく解説

打开 JSON 编辑器并粘贴以下策略

【ベストプラクティス】Amazon VPC の構築方法を分かりやすく解説
记录流日志的策略
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "logs:CreateLogGroup",
        "logs:CreateLogStream",
        "logs:PutLogEvents",
        "logs:DescribeLogGroups",
        "logs:DescribeLogStreams"
      ],
      "Resource": "*"
    }
  ]
}

如果需要,添加标签(这次不是)

【ベストプラクティス】Amazon VPC の構築方法を分かりやすく解説

为策略添加名称和描述以完成创建

【ベストプラクティス】Amazon VPC の構築方法を分かりやすく解説

流记录的角色创建

返回 IAM 控制台屏幕并单击“角色”→“创建角色”

【ベストプラクティス】Amazon VPC の構築方法を分かりやすく解説

选择受信任的实体类型“AWS 服务”,用例“EC2”,然后按下一步

【ベストプラクティス】Amazon VPC の構築方法を分かりやすく解説

附加您刚刚创建的策略

【ベストプラクティス】Amazon VPC の構築方法を分かりやすく解説

输入角色的名称和描述,然后单击“创建角色”

【ベストプラクティス】Amazon VPC の構築方法を分かりやすく解説【ベストプラクティス】Amazon VPC の構築方法を分かりやすく解説

返回 IAM 控制台屏幕并选择“角色”→ 创建的角色

【ベストプラクティス】Amazon VPC の構築方法を分かりやすく解説

单击信任关系选项卡 > 编辑信任策略

【ベストプラクティス】Amazon VPC の構築方法を分かりやすく解説

由于该角色最初是基于 EC2 的用例创建的,因此 EC2 也适用于信任策略权限转移目的地(“Principal”字段),但将其重写为 VPC 流日志如下。您保存

流日志的信任策略
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "vpc-flow-logs.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
} 

创建流日志

返回 VPC 控制台,选择适当的 VPC 并单击 Actions -> Create Flow Log

【ベストプラクティス】Amazon VPC の構築方法を分かりやすく解説

如下选择流日志的各种设置,完成创建

【ベストプラクティス】Amazon VPC の構築方法を分かりやすく解説

流日志设置现已完成。

*如果要将流日志保存到 S3

不是 CloudWatch将流日志保存到 S3如果你想用 Athena 分析它见下文

保存到 S3 比 CloudWatch 更好低价所以,我认为那些重视成本的人也应该考虑将 S3 作为一个选项。



创建 ELB (VPC1)

创建一个 ELB 以对流向您的 EC2 实例的流量进行负载平衡。

ELB的详细信息请参考以下文章

正在建设中的文章

这次在 ELB 中最常见ALB创建一个。
另外,虽然希望对加密的HTTPS通信进行负载均衡,但是证书注册等很多操作超出了本文的范围。

为 Web 服务器创建 ELB

创建一个链接到 Web 服务器实例的 ELB

・创建目标群体

创建连接实例的目标组。
EC2 控制台单击“目标组”→“创建目标组”

【ベストプラクティス】Amazon VPC の構築方法を分かりやすく解説

指定目标组设置如下

【ベストプラクティス】Amazon VPC の構築方法を分かりやすく解説【ベストプラクティス】Amazon VPC の構築方法を分かりやすく解説

在目标组中为 Web 服务器注册实例,如下所示

【ベストプラクティス】Amazon VPC の構築方法を分かりやすく解説

・创建负载均衡器 (ALB)

EC2 控制台单击“负载均衡器”→“创建负载均衡器”

【ベストプラクティス】Amazon VPC の構築方法を分かりやすく解説

选择应用程序负载均衡器 (ALB),如下所示

【ベストプラクティス】Amazon VPC の構築方法を分かりやすく解説

为 ALB 选择高级设置,如下所示

【ベストプラクティス】Amazon VPC の構築方法を分かりやすく解説【ベストプラクティス】Amazon VPC の構築方法を分かりやすく解説

*可以使用与 Web 的 EC2 实例设置的安全组相同的安全组。

* 如果您选中“AWS Global Accelerator”全球加速器您可以通过支付来设置加速

为 AP 服务器创建 ELB

・创建目标群体

与Web服务器的ELB一样,在目标组中注册AP服务器的实例
(名称标签例如“for-web-tg-ap”)

・创建负载均衡器 (ALB)

以与 Web 服务器的 ELB 相同的方式创建负载均衡器。请注意以下与 Web 服务器的不同之处

  • 为负载均衡器名称和名称标签使用与 Web 不同的名称(例如:负载均衡器名称“alb-ap”,名称标签“for-web-alb-ap”)
  • 对于 AP 服务器,只接受来自内部 Web 服务器的请求,因此“方案”选择“内部”
  • 请为子网指定私有子网
  • 请为 AP 服务器指定安全组
  • 请指定 AP 服务器的目标组


创建 RDS (VPC1)

创建一个 RDS 实例以用作 Web 应用程序的数据库。
RDS引擎可以使用Aurora、MySQL、PostgreSQL等,这次使用 MySQL我会做。

创建子网组

首先,要指定安装 RDS 的子网,子网组(由于RDS的功能,省略详细说明)。

RDS 控制台转到并单击子网组 → 创建数据库子网组

【ベストプラクティス】Amazon VPC の構築方法を分かりやすく解説

输入如下子网组设置,然后单击“创建”

【ベストプラクティス】Amazon VPC の構築方法を分かりやすく解説

创建 RDS 数据库

创建 RDS 数据库

在 RDS 控制台中,单击“数据库”->“创建数据库”

【ベストプラクティス】Amazon VPC の構築方法を分かりやすく解説

指定数据库的详细设置如下,点击“创建数据库”

【ベストプラクティス】Amazon VPC の構築方法を分かりやすく解説【ベストプラクティス】Amazon VPC の構築方法を分かりやすく解説【ベストプラクティス】Amazon VPC の構築方法を分かりやすく解説

* 如果您为数据库认证指定“密码和IAM数据库认证”,您可以通过授予IAM角色而不是密码来访问数据库,提高安全级别(参考)。另一方面,请注意,这种方法不适合大规模访问。



创建 S3 存储桶 (VPC1)

创建一个 S3 存储桶来存储非结构化数据

创建存储桶

转到 S3 控制台并单击 Buckets -> Create Bucket

【ベストプラクティス】Amazon VPC の構築方法を分かりやすく解説

指定bucket的详细设置如下,点击“Create Bucket”

【ベストプラクティス】Amazon VPC の構築方法を分かりやすく解説【ベストプラクティス】Amazon VPC の構築方法を分かりやすく解説

授予 IAM 角色以进行 S3 访问

以Web服务器为垫脚石,通过SSH连接AP服务器1,与后述的通信确认(4)相同,使用如下命令显示S3桶列表。

aws s3 ls

您可能会看到以下消息并且无法获取存储桶列表(请勿按照说明使用“aws configure”命令注册访问密钥)

Unable to locate credentials. You can configure credentials by running "aws configure".

为了从 EC2 访问 S3,需要将授予对 S3 的访问权限的角色(S3FullAccess 策略)附加到 EC2 实例。

请参阅此处和此处了解如何捐赠

*另外,由于本次EC2和S3是在同一个账户下创建的,所以不需要在bucket policy中明确权限。

到每个实例的通信确认 (VPC1)

VPC1 的创建现已完成。此时,您应该有一个如下所示的网络:

【ベストプラクティス】Amazon VPC の構築方法を分かりやすく解説

这个网络通讯检查设置是否符合预期去做。

具体来说,检查以下

① 可以从外部与 Web 服务器进行 SSH 通信 *
(2) 可以从外部到 Web 服务器的 HTTP 通信
(3) 可以通过ELB从外部到Web服务器进行HTTP通信
④ 可以从 Web 服务器到 AP 服务器的 SSH 通信*
⑤ 可以从 Web 服务器到 AP 服务器进行 HTTP 通信
⑥可以通过ELB从Web服务器到AP服务器进行HTTP通信
⑦ 无法通过 ELB 从外部与 AP 服务器进行 HTTP 通信
⑧ RDS中的数据可以从AP服务器获取
(9) S3中的数据可以从AP服务器获取

【ベストプラクティス】Amazon VPC の構築方法を分かりやすく解説

* 请注意①中的 SSH 通信将在创建 VPC2 后重新配置为禁用通信(因为能够从外部通过 SSH 连接有些危险)。同样,④在VPC2创建后会被阻塞。

确认与 Web 服务器的通信

① SSH 通信的确认

按照以下步骤检查 Web 服务器的 EC2 实例 1(“web-server-1”)的全局 IP 地址。

【ベストプラクティス】Amazon VPC の構築方法を分かりやすく解説

从终端 (Mac) 或命令提示符 (Windows) 输入以下 SSH 连接命令

ssh ec2-user@[インスタンスのIPアドレス] -i [ダウンロードしたキーペア秘密鍵のパス]

如果出现以下消息,请输入“yes”并按 Enter

Are you sure you want to continue connecting (yes/no/[fingerprint])?

如果出现如下图所示的 Amazon Linux 启动标记,则表示成功。

       __|  __|_  )
       _|  (     /   Amazon Linux 2 AMI
      ___|\___|___|

对 Web 服务器实例 2(“web-server-2”)执行相同的操作以确认通信。

(2)HTTP通信检查(直接通信)

还有其他方法可以检查 HTTP 通信,例如使用 curl 命令,但是这一次,假设 Web 应用程序的实际运行,我们将检查 HTML 文件是否可以在浏览器中显示。

首先,使用以下命令安装 Apache HTTP Server (httpd),同时使用 SSH 连接到 Web 服务器实例 1(如果您想使用 nginx,这也可以)

sudo yum update -y
sudo yum install httpd -y

使用以下命令为网页显示创建 index.html

cd /var/www/html
sudo nano index.html

写入以下内容并用 ctrl + x 保存

索引.html
<html><h1>Web server 1</h1></html>

运行以下命令以使用 Apache HTTP Server 开始托管

sudo systemctl start httpd

使用以下命令使主机在重新启动后自动运行

sudo systemctl enable httpd

启动Chrome等浏览器,在地址栏输入http://Webサーバ用インスタンス1のIPアドレス,回车,如果显示如下则表示成功

【ベストプラクティス】Amazon VPC の構築方法を分かりやすく解説

对 Web 服务器实例 2(“web-server-2”)执行相同的操作以确认通信(将 index.html 的内容更改为“Web 服务器 2”)
如果在浏览器中显示如下则表示成功

【ベストプラクティス】Amazon VPC の構築方法を分かりやすく解説

(3) HTTP 通信的确认(通过 ELB)

在(2)中,我们通过指定IP地址直接访问每个Web服务器实例,但我们也将通过ELB检查访问,方法与实际操作时相同。

②完成(httpd安装index.html文件已安装),
EC2 控制台从“负载均衡器”→为 Web 服务器选择 ELB→复制并粘贴 DNS 名称

【ベストプラクティス】Amazon VPC の構築方法を分かりやすく解説

粘贴到浏览器地址栏回车(或者在开头加http,改成http://コピペしたDNS名),显示如下图②表示成功
(显示Web server 1Web server 2。)

【ベストプラクティス】Amazon VPC の構築方法を分かりやすく解説

使用 F5(在 Mac 上为 ctrl + R)刷新浏览器几次,如果您看到 Web server 1Web server 2 之间的随机切换,则 ELB 工作正常

与 AP 服务器的通信确认

④ SSH 通信检查(使用 Web 服务器作为垫脚石时)

AP 服务器实例“ap-server-1”是在私有子网上因为它存在于不能直接从外部访问.因此,为了访问AP服务器,在公共子网上用于网络服务器实例应该是垫脚石

首先,将密钥对私钥发送到 Web 服务器 1 的实例“web-server-1”(注意不要泄露私钥)。否则,无法执行公钥认证,也无法访问 AP 服务器。

scp -i [ダウンロードしたキーペア秘密鍵のパス] [ダウンロードしたキーペア秘密鍵のパス] ec2-user@[Webサーバ1のIPアドレス]:~/.ssh

以与①中相同的方式与 Web 服务器 1 的实例建立 SSH 连接。

ssh ec2-user@[Webサーバ1のIPアドレス] -i [ダウンロードしたキーペア秘密鍵のパス]

使用以下命令确认已上传的私钥已存储

ls .ssh

使用以下命令与 AP 服务器 1 建立 SSH 连接

ssh ec2-user@[APサーバ1のプライベートIPアドレス] -i [アップロードしたキーペア秘密鍵のパス]

* AP 服务器 1 的私有 IP 地址在 EC2 控制台“实例”中描述 → 单击 AP 服务器 1 的实例 ID →“私有 IPv4 地址”

如果出现如下图所示的 Amazon Linux 启动标记,则表示成功。

       __|  __|_  )
       _|  (     /   Amazon Linux 2 AMI
      ___|\___|___|

⑤ HTTP 通信检查(直接通信)

检查从 Web 服务器到 AP 服务器的 HTTP 通信。
②中,我们使用了浏览器,但是这次我们将使用curl命令来检查。

首先,使用与④中AP服务器的SSH连接,以与②中相同的方式创建httpd安装index.html文件。

httpdのインストールとindex.htmlファイルの作成コマンド
sudo yum update -y
sudo yum install httpd -y
cd /var/www/html
sudo nano index.html
索引.html
<html><h1>AP server 1</h1></html>
httpdの開始と再起動後の有効化
sudo systemctl start httpd
sudo systemctl enable httpd

* 可以通过 yum 安装没有 NAT 网关有点奇怪,但如上所述,通过 S3 的网关端点可以通过 yum 进行网络连接。)

执行以下命令断开与 AP 服务器的 SSH 连接并返回 Web 服务器。

exit

使用以下 curl 命令从 Web 服务器向 AP 服务器发送 HTTP 请求。

curl http://[APサーバのIPアドレス]

如果前面创建的index.html文件内容显示如下则表示成功

<html><h1>AP server 1</h1></html>

在AP服务器2“ap-server-2”(index.html的头部描述为“AP服务器2”)上执行同样的操作,index.html文件内容显示如下。

<html><h1>AP server 2</h1></html>

⑥检查HTTP通信(通过ELB)

还要检查从 Web 服务器实例通过 AP 服务器 ELB 到 AP 服务器实例的 HTTP 访问。

首先,从 EC2 控制台中,选择“负载均衡器”→ 为 AP 服务器选择 ELB → 复制并粘贴 DNS 名称

【ベストプラクティス】Amazon VPC の構築方法を分かりやすく解説

通过 SSH 连接到 Web 服务器,使用以下命令向 ELB 发送 HTTP 请求

curl http://コピペしたDNS名

AP服务器中index.html文件内容显示如下表示成功
(显示AP server 1AP server 2。)

<html><h1>AP server 1</h1></html>

多次执行相同的命令,如果在AP server 1AP server 2之间随机切换,ELB工作正常

⑦ 来自外部的 HTTP 非通信确认(通过 ELB)

在⑥中,我们确认了从Web服务器通过ELB访问AP服务器。

另一方面,如果 AP 服务器可以从外部访问,则安全性很差因此,AP 服务器通过 ELB 从外部对实例进行 HTTP 访问不能确保

从外部(没有 SSH 连接到 Web 服务器),键入以下命令

curl http://コピペしたDNS名

AP服务器中index.html文件的内容为如果你不回来成功。

与 RDS 的通信确认

⑧确认AP服务器与RDS通信

如(4),以Web服务器为垫脚石,通过SSH连接AP服务器1。

进入AP服务器1后,使用如下命令安装mysql(由于只用于通讯确认,确认完成后可以卸载)

sudo yum install mysql -y

检查是否可以使用以下命令访问 RDS 上的 MySQL

mysql -h [RDSのエンドポイント名] -u [RDSのユーザ名] -p

另外,RDS端点名称可以通过点击RDS控制台→“数据库”→对应数据库的DB标识符从以下确认

【ベストプラクティス】Amazon VPC の構築方法を分かりやすく解説

系统会提示您输入RDS密码,所以输入它,如果您可以输入如下所示的MySQL命令,您将成功。

Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MySQL connection id is 39
Server version: 8.0.28 Source distribution

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MySQL [(none)]> 

在 AP 服务器 2 上执行类似的操作

确认与 S3 的通信

(9) 检查从 AP 服务器到 S3 的通信

与第 4 步一样,使用 Web 服务器作为垫脚石,通过 SSH 连接到 AP 服务器 1,并使用以下命令执行 AWS CLI 的初始设置(不要输入访问密钥)。

aws configure
AWS Access Key ID [None]: 空欄のままEnter
AWS Secret Access Key [None]: 空欄のままEnter
Default region name [None]: ap-northeast-1
Default output format [None]: 空欄のままEnter

使用如下命令显示bucket列表,如果显示创建的S3 bucket则ok

aws s3 ls
显示内容示例
2022-08-08 00:24:28 for-web-bucket

VPC1(用于 Web 应用程序的 VPC)的创建已完成。



创建 VPC 和子网 (VPC2)

VPC2 从这里我们将继续创建一个(模拟内部网络的 VPC)。

首先,类似于创建 VPC 和子网 (VPC1),使用 VPC 向导创建 VPC去做。
使用以下设置创建 VPC

  • 要创建的资源:VPC 等。
  • 自动生成名称标签:将其命名为“for-internal”
  • IPv4 CIDR 块:172.16.2.0/24
  • IPv6 CIDR 块:无 IPv6 CIDR 块
  • 租约:默认
  • AZ数:1(如果想在内网也保证冗余,请选择2)
  • 自定义 AZ:ap-northeast-1a
  • 公有子网数:1
  • 私有子网数:1
  • 自定义子网 CIDR 块:172.16.2.0/26 用于公共,172.16.2.64/26 用于私有
  • NAT 网关:无
  • VPC端点:无(如果想提高S3访问的便利性,可以指定“S3网关”)
  • DNS 选项:选中“启用 DNS 主机名”和“启用 DNS 解析”
【ベストプラクティス】Amazon VPC の構築方法を分かりやすく解説

创建安全组 (VPC2)

1.代理服务器的安全组

要创建安全组,请从 VPC 控制台按“安全组”→“创建安全组”,就像对 VPC1 所做的那样。

为您的代理服务器创建一个安全组,如下所示

【ベストプラクティス】Amazon VPC の構築方法を分かりやすく解説

对于入站,初始设置只允许 SSH,默认允许出站。

允许所有 SSH 有点安全风险,所以在建立 VPN 连接后,我们限制入站到内部网络(私有子网 + VPN)。
这使得构建一个只能从内部网络访问的安全网络成为可能。

2.开发服务器的安全组

为开发服务器创建以下安全组

【ベストプラクティス】Amazon VPC の構築方法を分かりやすく解説

对于入站,仅允许来自代理服务器安全组的 SSH 进行初始设置(代理服务器扮演垫脚石的角色),对于出站,将所有内容保留为默认设置。

这也限制了 VPN 连接建立后对 VPN 的入站 SSH 通信权限,类似于代理服务器安全组。



创建 EC2 实例 (VPC2)

为代理服务器和开发服务器创建实例。

和VPC1一样,创建2个实例(1个代理服务器+1个开发服务器),内容如下。
名称:“代理服务器 1”、“开发服务器 1”
AMI:亚马逊 Linux2 AMI (HVM)
Instance Type:选择默认的t2.micro
密钥对:是(指定与VPC1相同,如需提高安全性可新建)
VPC:指定之前创建的 VPC2
子网:选择你创建的与开头配置图中的实例对应的子网
自动分配公共 IP:代理服务器“启用”,开发服务器“禁用”
防火墙:勾选“Select an existing security group”,为之前创建的代理服务器或开发服务器选择对应的安全组
存储:选择默认的8GB gp2(根据EC2最佳实践,最好附加多个EBS,但这次我们将使用默认设置)



创建 VPC 对等互连 (VPC2)

从 VPC2 到 VPC1 的连接路径创建 VPC 对等互连以确保

在 VPC 控制台中,单击“对等连接”→“创建对等连接”

【ベストプラクティス】Amazon VPC の構築方法を分かりやすく解説

输入对等连接的高级设置,如下所示,然后单击创建对等连接

【ベストプラクティス】Amazon VPC の構築方法を分かりやすく解説

返回VPC控制台,在“Peering Connections”选项卡中选择已创建的对等连接,点击“Action”→“Accept Request”

【ベストプラクティス】Amazon VPC の構築方法を分かりやすく解説

路由表配置(VPC2)

与 VPC1 一样,在创建 VPC 时默认设置以下路由表。同一 VPC 内的通信关于无需更改路由表.

目标子网 创建的路由表数 路线到
公共子网的路由表 所有可用区中的 1 个 互联网网关,私有子网
私有子网的路由表 每个可用区 1 个 公共子网,(NAT 网关,S3 的端点*)

*这次没有创建 NAT 网关和端点,所以没有设置路由。

另一方面,VPC2到VPC1的路由默认没有设置为了。在路由表中需要显式添加到 VPC 对等互连的路由有。

这一次,我们将修改路由表,使VPC2上的开发服务器可以访问VPC1上的Web服务器和AP服务器。

从 VPC2 到 VPC1 的路由

添加一条从开发服务器所属的 VPC2 的私有子网到 VPC 对等互连的路由。

首先,在VPC控制台点击“路由表”→VPC2私有子网的路由表

【ベストプラクティス】Amazon VPC の構築方法を分かりやすく解説

如下图所示,到 VPC peering 的路由不存在,点击“Edit route”

【ベストプラクティス】Amazon VPC の構築方法を分かりやすく解説

当destination是VPC1的CIDR(172.16.0.0/23)时,添加如下路由路由到VPC对等连接

【ベストプラクティス】Amazon VPC の構築方法を分かりやすく解説

从 VPC1 到 VPC2 的路由

这部分很容易忘记,因为路由表规范是无状态的,还必须明确指定返回路线。

这次我希望能够从VPC2(开发服务器)访问VPC1的所有子网(Web服务器和AP服务器),所以在VPC1下的3(public + private x 2)的路由表中返回到VPC2设置路线。

【ベストプラクティス】Amazon VPC の構築方法を分かりやすく解説

在上述所有三个路由表中,添加以下路由以在目的地为 VPC2 的 CIDR (172.16.2.0/24) 时路由到 VPC 对等连接

【ベストプラクティス】Amazon VPC の構築方法を分かりやすく解説

修改 VPC1 内的安全组设置

我创建了一个 VPC 对等互连并修改了路由表,但事实上VPC1 的安全组不允许来自 VPC2 的访问所以访问允许的修改是必须的。
另外,如上所述,能够从外部SSH进入Web服务器的状态在安全性方面比较弱,所以修改Web服务器和AP服务器的安全组,使其只能从开发中访问VPC2 中的服务器。

在 VPC 控制台中,单击“安全组”选项卡并修改以下两个安全组

【ベストプラクティス】Amazon VPC の構築方法を分かりやすく解説

1、修改web服务器的安全组

将入站规则的 SSH 源限制为 VPC2 中私有子网的 CIDR (172.16.2.64/26)

【ベストプラクティス】Amazon VPC の構築方法を分かりやすく解説

2、AP服务器安全组修改

对于Web服务器,将入站规则的SSH源限制为VPC2中私有子网的CIDR(172.16.2.64/26)

【ベストプラクティス】Amazon VPC の構築方法を分かりやすく解説

通讯确认

为了确认VPC对等、路由和安全组设置是否正确,检查创建的EC2实例和VPC1是否可以访问。

・确认与VPC2中的实例的通信

首先,使用以下命令在本地通过 SSH 连接到代理服务器实例

ssh ec2-user@[プロキシサーバのパブリックIPアドレス] -i [ローカルのキーペア秘密鍵のパス]

连接后,使用exit 命令断开连接,并使用以下命令将密钥对私钥发送到代理服务器实例。

scp -i [ローカルのキーペア秘密鍵のパス] [ローカルのキーペア秘密鍵のパス] ec2-user@[プロキシサーバのパブリックIPアドレス]:~/.ssh

成功发送密钥对私钥后,再次使用以下命令通过 SSH 连接到代理服务器实例。

ssh ec2-user@[プロキシサーバのパブリックIPアドレス] -i [ローカルのキーペア秘密鍵のパス]

从这里,使用以下命令 SSH 到开发服务器实例

ssh ec2-user@[開発用サーバのプライベートIPアドレス] -i [プロキシサーバ内のキーペア秘密鍵のパス]

*开发服务器的私有IP地址可以在EC2控制台“实例”→点击开发服务器实例ID→“私有IPv4地址”中找到。

如果显示 Amazon Linux 徽标,则表示成功

・确认与 VPC1 的通信

检查您是否可以通过 VPC 对等连接从开发服务器 SSH 到 VPC1(Web 服务器和 AP 服务器)。

首先,您需要将密钥对私钥发送到开发服务器,所以连接到代理服务器在中执行以下命令

scp -i [プロキシサーバ内のキーペア秘密鍵のパス] [プロキシサーバ内のキーペア秘密鍵のパス] ec2-user@[開発用サーバのプライベートIPアドレス]:~/.ssh

使用以下命令再次与开发服务器实例建立 SSH 连接

ssh ec2-user@[開発用サーバのプライベートIPアドレス] -i [プロキシサーバ内のキーペア秘密鍵のパス]

使用下面的命令,VPC1SSH 到 AP 服务器 1 中

ssh ec2-user@[APサーバ1のプライベートIPアドレス] -i [開発用サーバ内のキーペア秘密鍵のパス]

如果显示 Amazon Linux 徽标,则连接成功!

返回开发服务器并输入以下命令,VPC1SSH 到 Web 服务器 1 中

ssh ec2-user@[Webサーバ1のプライベートIPアドレス] -i [開発用サーバ内のキーペア秘密鍵のパス]

如果显示 Amazon Linux 徽标,则连接成功!
同理,检查 Web 服务器 2 和 AP 服务器 2 的通信。



代理服务器设置 (VPC2)

为了给VPC2的代理服务器一个代理功能,代理服务器软件乌贼安装

通过 SSH 连接到代理服务器时,使用以下命令安装 Squid (参考)

sudo yum update -y
sudo yum install squid -y

运行以下命令重启后自动运行

sudo systemctl enable squid
sudo systemctl restart squid

确保 Squid 正在使用端口 3128。

sudo lsof -i:3128
正常显示示例
COMMAND  PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
squid   3598 squid   11u  IPv6  25329      0t0  TCP *:squid (LISTEN)

修改代理服务器的安全组

之前设置的代理服务器的安全组只允许SSH通信,不允许其他通信。
由于该代理服务器起到中继来自开发服务器的 HTTP 和 HTTPS 通信的作用,因此需要在安全组中允许这些通信。

请注意,使用 Squid 代理时的端口 (3128) 与普通端口 (HTTP: 80, HTTPS: 443) 不同。
像这样使用特殊端口时,安全组的“类型”不是通常的“HTTP”或“HTTPS”,而是“自定义 TCP” 并直接指定端口

如下修复代理服务器安全组的入站规则去做

【ベストプラクティス】Amazon VPC の構築方法を分かりやすく解説

代理服务器的操作检查

确保您可以通过代理服务器从您的开发服务器(私有子网)访问互联网。

和以前一样,使用代理服务器作为垫脚石,通过 SSH 连接到开发服务器并键入以下命令。
-x 指定代理的选项)

curl http://www.example.com -x http://[プロキシサーバのプライベートIPアドレス]:3128

*请注意,代理服务器指定的是私有 IP 地址,而不是公共 IP 地址。

如果从http://www.example.com返回以下HTML则成功

<!doctype html>
<html>
<head>
    <title>Example Domain</title>
:
以下略


创建 VPN (VPC2)

由于假设 VPC2 将与本地内部网络集成,确保与本地的安全通信路径为了使用 VPN去做。

在 AWS 上使用 VPN 主要有 Site-to-Site VPN 和客户端 VPN,但这次无需在本地路由器端进行设置。易于部署Na(可以安装在笔记本电脑等上)客户端 VPN使用。

按照下面的官方教程继续构建客户端 VPN

颁发证书和密钥

由于VPN确保安全通信通道的特性,认证必须实施。

Client VPN 可以使用 Active Directory (AD) 或相互身份验证(使用公钥证书的客户端身份验证和服务器身份验证)作为身份验证方法,但这次也可以由个人轻松执行。使用 OpenVPN easy-rsa 进行相互身份验证采纳 (方法按照官方教程)

・什么是 OpenVPN easy-rsa?

为了构建强大的安全系统,用于认证的证书(SSL证书)必须从受信任的证书颁发机构(CA)购买。

另一方面,个人和小型组织自己搭建CA颁发的证书,所谓的“ole ole 证书”经常被使用。

在这个人一个可以设置证书颁发机构并颁发oleore证书的工具其中之一是 OpenVPN easy-rsa。

・安装 OpenVPN easy-rsa

在本地输入一个合适的文件夹并使用以下命令下载OpenVPN easy-rsa

git clone https://github.com/OpenVPN/easy-rsa.git

・证书和密钥发行

进入下载OpenVPN easy-rsa的文件夹,使用以下命令初始化PKI基础设施(一组证书颁发机构、证书等操作公钥证书所必需的)。

cd easy-rsa/easyrsa3
./easyrsa init-pki

使用以下命令构建证书颁发机构 (CA)(当询问您是否要继续时输入“yes”)

./easyrsa build-ca nopass

使用以下命令生成服务器证书和密钥

./easyrsa build-server-full server nopass

使用以下命令生成客户端证书和密钥

./easyrsa build-client-full client1.domain.tld nopass

使用以下命令将生成的文件收集到一个文件夹中

mkdir 送信先フォルダのパス
cp pki/ca.crt 送信先フォルダのパス
cp pki/issued/server.crt 送信先フォルダのパス
cp pki/private/server.key 送信先フォルダのパス
cp pki/issued/client1.domain.tld.crt 送信先フォルダのパス
cp pki/private/client1.domain.tld.key 送信先フォルダのパス
cd 送信先フォルダのパス

* 每个文件的含义如下

  • ca.crt:根 CA 证书
  • server.crt:服务器证书
  • server.key:服务器私钥(key)
  • client1.domain.tld.crt:客户端证书
  • client1.domain.tld.key:客户端私钥(key)

将证书和密钥上传到 ACM

将服务器证书和密钥以及客户端证书和密钥上传到 ACM。

【ベストプラクティス】Amazon VPC の構築方法を分かりやすく解説

・上传服务器证书和密钥

粘贴打开的证书(server.crt)、密钥(server.key)和证书链(ca.crt)

【ベストプラクティス】Amazon VPC の構築方法を分かりやすく解説

至于如何查看要粘贴的证书和CA的内容,用nano编辑器(如Windows上的记事本)打开,将-----BEGIN CERTIFICATE-----的部分复制粘贴到下面列出的-----END CERTIFICATE-----,方便

cd 証明書が格納されているフォルダ
nano server.key
【ベストプラクティス】Amazon VPC の構築方法を分かりやすく解説

同样,将私钥从-----BEGIN PRIVATE KEY----- 复制并粘贴到-----END PRIVATE KEY-----

如果需要,请添加标签,然后按“下一步”

【ベストプラクティス】Amazon VPC の構築方法を分かりやすく解説

点击“导入”完成导入

【ベストプラクティス】Amazon VPC の構築方法を分かりやすく解説

・下载客户端证书和密钥

与服务器分开,以类似的方式上传客户端证书(server.crt)、密钥(server.key)和证书链(ca.crt)的内容

创建客户端 VPN 终端节点

成为VPC端VPN的出口,客户端 VPN 终端节点创建一个。

在 VPC 控制台中,单击“客户端 VPN 终端节点”→“创建客户端 VPN 终端节点”

【ベストプラクティス】Amazon VPC の構築方法を分かりやすく解説

指定如下设置以完成创建客户端 VPN 终端节点
(注意客户端的CIDR块必须大于/22(较小的数字),这次指定172.16.4.0/22)

【ベストプラクティス】Amazon VPC の構築方法を分かりやすく解説【ベストプラクティス】Amazon VPC の構築方法を分かりやすく解説

选择已创建的客户端 VPN 终端节点,并通过以下操作将 VPC2 的私有子网绑定为目标网络。

【ベストプラクティス】Amazon VPC の構築方法を分かりやすく解説【ベストプラクティス】Amazon VPC の構築方法を分かりやすく解説【ベストプラクティス】Amazon VPC の構築方法を分かりやすく解説

添加认证规则

在客户端 VPN 上,除了安全组VPN 到 VPC必须明确授予访问权限有。这是通过“身份验证规则”实现的(它们被称为“身份验证”,但实际上是授权)。

和以前一样,选择客户端 VPN 端点并单击“授权规则”→“添加身份验证规则”

【ベストプラクティス】Amazon VPC の構築方法を分かりやすく解説

启用对 VPC2 的 CIDR (172.16.2.0/24) 的访问。

【ベストプラクティス】Amazon VPC の構築方法を分かりやすく解説

修改安全组

虽然通过上述操作可以建立 VPN 连接本身,但是由于当前的安全组没有配置假设从 VPN 通信,一些通信会被拒绝。

因此,修改安全组以允许来自 VPN 的通信(SSH 连接到开发服务器和代理服务器,以及代理连接到代理服务器)。

从 VPC 端,来自 VPN 的流量可被视为来自客户端 VPN 端点因此,请记住这一点来修复设置。

・为客户端 VPN 端点创建安全组

当您使用默认设置创建客户端 VPN 终端节点时,它与 VPC 默认安全组相关联。
由于客户端 VPN 端点是通信的中转点,不会是通信的最终目的地,因此无需在关联的安全组中明确允许入站通信。为以下目的创建并关联专用安全组

  • 对于其他安全点的入站规则源设置
  • 防止更改 VPC 默认安全组设置时出现意外影响

如下,为入站和出站规则创建具有默认设置的安全组去做。

【ベストプラクティス】Amazon VPC の構築方法を分かりやすく解説

返回客户端 VPN 端点选项卡,选择适当的客户端 VPN 端点并单击应用安全组

【ベストプラクティス】Amazon VPC の構築方法を分かりやすく解説

选择创建的安全组并应用

【ベストプラクティス】Amazon VPC の構築方法を分かりやすく解説

・开发服务器安全组的修改

开发服务器安全组目前只允许来自代理服务器安全组的 SSH 通信。因此,为了从 VPN 建立 SSH 连接,有必要从客户端 VPN 端点添加入站权限设置。

源允许客户端 VPN 端点的安全组中的 SSH 通信,如下所示到开发服务器安全组的入站规则

【ベストプラクティス】Amazon VPC の構築方法を分かりやすく解説

・代理服务器的安全组修正

关于代理服务器,除了SSH通信外,之前添加的代理通信的3128端口的入站规则也必须添加到允许的目标中(允许通过VPN连接到互联网)。

此外,由于原本全许可的 SSH 通信设置在安全性方面存在漏洞,因此我们将更改源范围以缩小到仅开发服务器(以及上述 VPN)。

如下源允许客户端 VPN 端点的安全组中的 SSH 通信和自定义 TCP 端口 3128 通信到开发服务器安全组的入站规则

【ベストプラクティス】Amazon VPC の構築方法を分かりやすく解説

通过上述变化,通过 VPN 缩小到 VPC2 的连接路径(将无法直接从 Internet 连接到 SSH),因此可以实现更安全的网络。

下载客户端 VPN 终端节点配置文件

AWS端客户端 VPN 端点和本地端VPN客户端软件来自结盟使...能够下载客户端 VPN 终端节点配置文件去做。

返回客户端 VPN 端点选项卡,选择适当的客户端 VPN 端点并单击下载客户端设置

【ベストプラクティス】Amazon VPC の構築方法を分かりやすく解説【ベストプラクティス】Amazon VPC の構築方法を分かりやすく解説

使用 nano 或记事本等编辑器打开下载的-client-config.ovpn 文件

nano ダウンロードしたdownloaded-client-config.ovpn

既然写成

前略
:
-----END CERTIFICATE-----

</ca>

reneg-sec 0

在tag和tag中描述客户端证书(client1.domain.tld.crt)和客户端密钥(client1.domain.tld.key)的内容如下
(将-----BEGIN CERTIFICATE-----复制到-----END CERTIFICATE-----的部分作为证书,将-----BEGIN PRIVATE KEY-----复制到-----END PRIVATE KEY-----的部分作为密钥)

前略
:
-----END CERTIFICATE-----

</ca>

<cert>
クライアント証明書の内容
</cert>

<key>
クライアントキーの内容
</key>

reneg-sec 0

安装 OpenVPN 客户端

在将成为客户端的本地 PC 上安装 OpenVPN 客户端软件。

我的PC是Mac(M1),所以作为客户端软件隧道布里克(对于 Windows 使用OpenVPN 图形用户界面ETC。)

使用以下命令从 HomeBrew 安装 TunnelBlick

brew install --cask tunnelblick

运行 VPN 连接

*这是运行 TunnelBlick 的示例。外部 Mac官方文档在这里请参阅

打开 TunnelBlick 并将您之前下载的客户端 VPN 端点配置文件 (downloaded-client-config.ovpn) 拖放到出现的屏幕上的“连接到”字段中。

【ベストプラクティス】Amazon VPC の構築方法を分かりやすく解説

选择是为“个人使用”还是“为所有用户”安装连接目的地。如果您只使用特定用户登录,则应选择“个人”

【ベストプラクティス】Amazon VPC の構築方法を分かりやすく解説

单击“连接”以启动 VPN 连接。

【ベストプラクティス】Amazon VPC の構築方法を分かりやすく解説

请注意,一旦 VPN 连接启动,您将无法连接到 Internet。
按“断开连接”终止 VPN 连接。

在那之后通过检查通信确认 VPN 连接已正确设置。



到每个实例的通信确认 (VPC2)

与 VPC1 一样,VPC2 也会检查设置是否符合预期。

具体来说,检查以下

⑩ 从 VPN 到开发服务器的 SSH 通信是可能的
(11) 可以从开发服务器到代理服务器的 SSH 通信
⑫ 可以从 VPN 到代理服务器的 SSH 通信
⑬ 通过代理服务器从 VPN 到 Internet 的 HTTP 通信
⑭ 从外部到代理服务器的 SSH 通信不能
(15) 从开发服务器到 Web 服务器的 SSH 通信是可能的
⑯ 可以从开发服务器到 AP 服务器的 SSH 通信
(1)从外部到Web服务器的SSH通信不能
④ Web 服务器到 AP 服务器的 SSH 通信不能

【ベストプラクティス】Amazon VPC の構築方法を分かりやすく解説

*如果可能,最好再次确认上述②至③和⑤至⑨。

VPN操作检查

(10) 检查从 VPN 到开发服务器的 SSH 通信

确认您可以通过 VPN SSH 到开发服务器

在之前的 VPN 连接中按下“连接”按钮(启用 VPN 连接),使用以下命令从本地连接的 VPN SSH 到开发服务器。

ssh ec2-user@[開発用サーバのプライベートIPアドレス] -i [ローカルのキーペア秘密鍵のパス]

如果显示 Amazon Linux 启动标记,则表示成功。

本来用私网IP是不能从本地访问云的,但是可以看到可以通过VPN访问。 VPN很棒!

(11) 确认从开发服务器到代理服务器的 SSH 通信

使用通过 VPN 通过 SSH 连接的开发服务器作为垫脚石,确认您可以通过 SSH 连接到代理服务器。

⑩中通过SSH连接到开发服务器,使用以下命令SSH到代理服务器。

ssh ec2-user@[プロキシサーバのプライベートIPアドレス] -i [開発用サーバ内のキーペア秘密鍵のパス]

如果显示 Amazon Linux 启动标记,则表示成功。

⑫ 确认从 VPN 到代理服务器的 SSH 通信

当前的代理服务器安全组设置允许来自 VPN 的 SSH 连接,因此您应该能够直接从 VPN 进行 SSH,而无需使用开发服务器作为垫脚石。

在之前的 VPN 连接中按下“连接”按钮,使用以下命令从本地连接的 VPN SSH 到开发服务器。

ssh ec2-user@[プロキシサーバのプライベートIPアドレス] -i [ローカルのキーペア秘密鍵のパス]

注意拒绝从VPN到代理服务器的SSH连接(强制开发服务器作为垫脚石)更安全,所以请根据要满足的安全级别适当更改安全组设置。

(13) 通过代理服务器确认从 VPN 到 Internet 的 HTTP 通信

代理服务器安全组设置允许来自 VPN 的代理通信(自定义 TCP 端口 3128),因此您应该能够通过代理服务器从 VPN 到 Internet 的 HTTP。

在上一个 VPN 连接中按下“连接”按钮,通过代理服务器执行 HTTP 通信,从连接的 VPN 本地执行以下 curl 命令

curl http://www.example.com -x http://[プロキシサーバのプライベートIPアドレス]:3128

如果从http://www.example.com返回以下HTML,则表示成功

<!doctype html>
<html>
<head>
    <title>Example Domain</title>
:
以下略

前面我说过,“一旦VPN连接开始,你将无法连接到互联网。”通过将你的浏览器设置为通过这个代理服务器,你可以从VPN连接到互联网。

不过默认设置下速度慢,而且HTTPS不好用,不实用,所以请调squid提高代理的运行速度。

⑭ 确认从外部到代理服务器的 SSH“不通”

通过之前更改代理服务器的安全组设置,我们将与代理服务器的 SSH 连接设置为仅允许通过开发服务器或 VPN。

所以不通过 VPN 无法从外部 SSH 到代理服务器检查一下。

在VPN断开本地的情况下输入以下命令,通过互联网SSH到代理服务器

ssh ec2-user@[プロキシサーバのパブリックIPアドレス] -i [ローカルのキーペア秘密鍵のパス]

与更改安全组设置前向 VPC2 中的实例进行通信确认的命令完全相同,但与以前不同的是,您可以看到无法连接。
可以说,安全级别提高了,因为不再可以通过 Internet 进行 SSH 连接。

检查通过 VPN 与 VPC1 的通信

使用 VPC2 的开发服务器作为 VPN 的垫脚石,确认您可以通过 SSH 连接到 VPC1 的每个实例。

(15) 确认从开发服务器到 Web 服务器的 SSH 通信

内容与“确认与VPC1的通信”几乎相同,但确认可以通过VPN连接。

在之前的 VPN 连接中按下“连接”按钮,使用以下命令从本地连接的 VPN SSH 到开发服务器。

ssh ec2-user@[開発用サーバのプライベートIPアドレス] -i [ローカルのキーペア秘密鍵のパス]

使用以下命令 SSH 到 VPC1 中的 Web 服务器 1

ssh ec2-user@[Webサーバ1のプライベートIPアドレス] -i [開発用サーバ内のキーペア秘密鍵のパス]

如果显示 Amazon Linux 徽标,则连接成功!
同样,也要检查与 Web 服务器 2 的通信。

⑯ 确认从开发服务器到 AP 服务器的 SSH 通信

从连接到开发服务器的 SSH 开始,然后使用以下命令 SSH 到 VPC1 中的 AP 服务器 1。

ssh ec2-user@[APサーバ1のプライベートIPアドレス] -i [開発用サーバ内のキーペア秘密鍵のパス]

如果显示 Amazon Linux 徽标,则连接成功!
同样,检查 AP 服务器 2 的通信。

直连VPC1的非通信确认

在构建 VPC1 后,可以立即通过 Internet 与 VPC1 建立 SSH 连接,但由于安全组设置的更改,它不再可能(安全级别已提高)。

(1) 确认从外部到 Web 服务器的 SSH “不通”

(1) 确认从外部到 Web 服务器的 SSH 连接没有连接到 Internet → 到 Web 服务器的 SSH 连接没有连接。

在 VPN 断开连接的情况下,使用以下命令通过 SSH 连接到 Web 服务器。

ssh ec2-user@[WebサーバのパブリックIPアドレス] -i [ローカルのキーペア秘密鍵のパス]

如果没有返回响应则成功。

④ 确认从 Web 服务器到 AP 服务器的 SSH“无法通信”

(4) 确认从 Web 服务器到 AP 服务器的 SSH 连接已连接到 Internet → 来自 Web 服务器的 SSH 连接未连接。

在之前的 VPN 连接中按下“连接”按钮,使用以下命令从本地连接的 VPN SSH 到开发服务器。

ssh ec2-user@[開発用サーバのプライベートIPアドレス] -i [ローカルのキーペア秘密鍵のパス]

使用以下命令 SSH 到 VPC1 中的 Web 服务器 1

ssh ec2-user@[Webサーバ1のプライベートIPアドレス] -i [開発用サーバ内のキーペア秘密鍵のパス]

使用以下命令与 AP 服务器 1 建立 SSH 连接

ssh ec2-user@[APサーバ1のプライベートIPアドレス] -i [Webサーバ1内のキーペア秘密鍵のパス]

如果没有返回响应,则表示成功。
让我们以同样的方式检查 AP 服务器 2 的非通信情况。

由于网络服务器的性质是对公众开放,可以说它被攻击劫持的风险很高。因此,为了防止损害蔓延到其他内部服务器,拒绝从 Web 服务器到具有安全组的其他服务器的 SSH 连接然后更多安全系统可以实现。

另外,由于当前向每台服务器分发相同的私钥,当其中一台服务器被劫持时,它将处于危险状态。所以,删除开发服务器以外的服务器的私钥我们开始做吧。




以上,通讯确认及本文所有工作已完成做过。

时间很长,但是我能够在 AWS 上构建以下复杂网络是不是很多人都被这个感动了? (好像说是印象派的推销……哈哈)

【ベストプラクティス】Amazon VPC の構築方法を分かりやすく解説

*CrowdFront 和 Route53 是 VPC 之外的服务,所以本文不再提及,但我想在以后的另一篇文章中发布它们。



[参考] 费用

供你参考,本次创建的整个 VPC 的空载成本结构现在看起来像这样:
(测量 3 天,所有天的成本结构大致相同)

【ベストプラクティス】Amazon VPC の構築方法を分かりやすく解説
服务(功能)名称 每天的费用 每月转换 比率
客户端 VPN 3.6 美元 108 美元 41.9%
EC2 2.2 美元 65.7 美元 25.5%
RDS 1.2 美元 37.5 美元 14.6%
ELB 1.2 美元 35.1 美元 13.6%
EBS 0.2 美元 5.7 美元 2.2%
其他(RDS存储等) 0.2 美元 5.5 美元 2.1%
全部的 8.6 美元 257.5 美元 100%

客户端 VPN 占了大部分,你可以看到即使没有负载,VPN 也会花费一定的费用。

另一方面,如果访问负载增加,则需要增加 Web 服务器和 RDS 实例的数量(或增加实例类型),因此这些成本预计会增加。


[参考] 创建 NAT 网关

由于上面的配置没有NAT网关,乍一看好像不能从私有子网上网,但是像下面这个站点yum 命令可以通过 S3 的网关端点执行是。

因此,可以在没有 NAT 网关的情况下完成最小的软件包更新,如果你想从私有子网而不是 yum 命令访问 Internet在公共子网中如下创建 NAT 网关是必须的。

【ベストプラクティス】Amazon VPC の構築方法を分かりやすく解説【ベストプラクティス】Amazon VPC の構築方法を分かりやすく解説

NAT网关可以从其他AZ的私有子网访问,所以如果不考虑冗余,只需要创建一个即可。

另外,由于没有设置到创建的 NAT 网关的路由,并且您无法访问 Internet,所以私有子网路由表(0.0.0.0/0 用于互联网连接)指定 NAT 网关作为目标需要这样做。

【ベストプラクティス】Amazon VPC の構築方法を分かりやすく解説【ベストプラクティス】Amazon VPC の構築方法を分かりやすく解説【ベストプラクティス】Amazon VPC の構築方法を分かりやすく解説

想法

已经很久了,我累了...

但是,如果您在本地设置动态路由和 FW,并使其与 VRRP 和生成树冗余,我认为这将比这困难得多。轻松的冗余配置和增强的安全性可以实现云的浪费我能感觉到

对于持续开发,它是可重现的并减少错误。使用 IaC 实现自动化我想要
我想写一篇关于未来如何使用 IaC (Terraform) 构建 VPC 的文章。


原创声明:本文系作者授权爱码网发表,未经许可,不得转载;

原文地址:https://www.likecs.com/show-308623308.html

相关文章: