在 AWS 上建立一个内外网分离的生产环境,可以减少应用服务的暴露面,有效的保证你的应用服务器的安全。通常我们会将web应用放在外网的子网内,数据库服务器等放在内网的子网。我们将按照下图来部署动手实践环境,实现在public subnet的EC2虚拟机可以直接通过互联网可以访问,在Private subnet的EC2虚拟机不能通过互联网直接访问,但是却可以在内部来访问互联网安装应用等等。
![](https://file.jishuzhan.net/article/1780757134800064513/34dd74e9bfabcc4315faef190441d807.webp)
下面是动手实践详细的操作步骤:
如果没有AWS的实验账号,请大家参考下面链接免费申请:
想学习云计算么?教你如何免费白嫖微软和AWS的云资源一年_免费使用azure一年-CSDN博客
一、创建VPC
- 在AWS管理控制台中,找到并选择"VPC"服务。点击"创建VPC",输入VPC的名称,选择一个合适的IPv4 CIDR块。例如,
10.0.0.0/16
。然后选择右下角的 Create VPC按钮创建
二、配置互联网网关
创建互联网网关并将其附加到 VPC,以允许公有子网中的资源访问互联网。
![](https://file.jishuzhan.net/article/1780757134800064513/1967f78cbd2102c16b949e8cd8c75750.webp)
![](https://file.jishuzhan.net/article/1780757134800064513/aa8b35c561e9058bde88fb3843b9785c.webp)
![](https://file.jishuzhan.net/article/1780757134800064513/a580b30215ac9cdcde741a8d32802ab4.webp)
选择mytest-vpc,附加网关
三、公共子网(用于Web服务器)
VPC内创建一个子网,选择之前创建的VPC,分配一个CIDR块,例如10.0.1.0/24
。
如下图:在AWS Console VPC的左边菜单栏,选择Subnets 菜单,然后在右上角选择Create Subnet
在Subnet创建的界面中,选择刚才创建的VPC mytest-vpc
输入子网的名称 public-subnet1, 子网CIDR
10.0.1.0/24,然后选择"create subnet"
![](https://file.jishuzhan.net/article/1780757134800064513/bd4c6eb0a1ce9f77b8138bd8622147bd.webp)
四、私有子网(用于内部资源)
- 重复创建子网的步骤来创建另一个子网,用于内部资源,选择相同的VPC,分配一个不同的CIDR块,例如
10.0.2.0/24
。创建完成后,我们有两个子网在VPC内
五、NAT 网关
在公有子网中创建 NAT 网关,以允许私有子网中的资源访问互联网。
如下图,选择public-subnet,然后分配IP地址,
六、配置路由表
创建两个路由表,一个用于公有子网,另一个用于私有子网。公有子网路由表应包含到互联网网关的路由,私有子网路由表应包含到 NAT 网关的路由。
![](https://file.jishuzhan.net/article/1780757134800064513/6fe5fb1e9a119e8c06f92357e6fc678c.webp)
1、创建public-subnet的路由表
在AWS Console 的VPC找到左侧菜单的Route Table 菜单项目,然后选择Create routes
![](https://file.jishuzhan.net/article/1780757134800064513/8bbf3817138b1e259fbd8d83d745888d.webp)
路由表创建完毕后,选择Edit Route table,增加一条指向0.0.0.0/0的指向互联网的路由,如下图:
选择子网关联(Subnet associations)TAB页,然后选择 "Edit subnet associations"
![](https://file.jishuzhan.net/article/1780757134800064513/a9b0237614a2ce275fda7875c239a6fe.webp)
在Available subnets 中选择public-subnet1,然后选择save associations
![](https://file.jishuzhan.net/article/1780757134800064513/355eb572a7a512fcea295d6bf2fd5e9e.webp)
2、创建private-subnet的路由表
在AWS Console 的VPC找到左侧菜单的Route Table 菜单项目,然后选择Create routes
![](https://file.jishuzhan.net/article/1780757134800064513/85215356839e818f7e16042be29ca1e0.webp)
创建完毕后选择编辑路由表,然后增加一条指向互联网0.0.0.0/0的路由,Target选择NAT Gateway,然后选择保存,如下图:
![](https://file.jishuzhan.net/article/1780757134800064513/c79db66bf7ce6d7ff8d76e2e6a6b0c62.webp)
![](https://file.jishuzhan.net/article/1780757134800064513/bfd30b0c1807385a7874247c52eafdd4.webp)
创建路由表的子网关联,如下图:选择"Edit subnet associations" 按钮
![](https://file.jishuzhan.net/article/1780757134800064513/9b911f7c1c8622ffb0231c761f45ea53.webp)
在Available subnets选择 private-subnet1,如下图
![](https://file.jishuzhan.net/article/1780757134800064513/254ec16e4246cfeb6d9fae8b7b0201a7.webp)
七、分别在public subnet和private subnet 创建EC2虚拟机
1、在public subnet 创建EC2虚拟机
如下图:选择免费的t2.micro linux 实例.选择之前创建好的VPC,选择自动分配公有IP,
![](https://file.jishuzhan.net/article/1780757134800064513/1b0d1aba2b8dfd54b660c704b7ca6774.webp)
2、在Private subnet 创建EC2虚拟机
如下图:选择免费的t2.micro linux 实例.选择之前创建好的VPC,选择禁用自动分配公有IP,
![](https://file.jishuzhan.net/article/1780757134800064513/1fc18abd8fd23144148d0e40f654c41a.webp)
- 创建安全组以控制对 EC2 实例的入站和出站流量。
- 为公有实例和私有实例创建单独的安全组。
八、访问两个不同的EC2进行测试
选择public subnet的EC2实例,通过Putty来访问EC2实例,是可以访问的。
![](https://file.jishuzhan.net/article/1780757134800064513/dbd1bda4146226f1c86ddde845be6ae0.webp)
由于Private subnet上的EC2实例只有私网地址,所以是无法直接通过Putty 通过internet直接访问的,我们在public subnet上的这台主机来访问 private subnet 上的EC2实例。
首先上传.pem 文件到 public subnet上的EC2 实例,然后用ssh 命令来访问
找到private subnet ec2实例的连接信息,如下图:
![](https://file.jishuzhan.net/article/1780757134800064513/025168090411f4fc91ba9f515f257a8d.webp)
拷贝实例连接命令行:
![](https://file.jishuzhan.net/article/1780757134800064513/aac5618c5255fac5bfedaa15e99e3ab4.webp)
结果如下图:登录到private subnet 的EC2虚拟机上在内部是可以访问internet的。
![](https://file.jishuzhan.net/article/1780757134800064513/df96d200bc451ccf83836aa901ce2239.webp)
通过这种设置,公有 EC2 实例可以直接访问互联网,而私有实例则只能通过 NAT 网关访问互联网。所有对外的流量都必须经过公有实例(如 Web 服务器或负载均衡器)。这样可以增强安全性,因为私有实例不直接暴露在互联网上。
需要注意的是,还需要根据具体需求配置安全组规则、路由表以及其他 AWS 服务(如 RDS、ElastiCache 等)。此外,还应考虑使用 AWS 的其他安全服务,如 AWS WAF、AWS Shield 等,以提高整体安全性。