我们将创建以下结构:
- 一个 VPC:10.0.0.0/16
- 一个 公有子网:10.0.1.0/24(可以访问互联网)
- 一个 私有子网:10.0.2.0/24(不能直接访问公网)
- 一个 Internet Gateway(IGW):让公有子网 EC2 可以访问互联网
- 一个 NAT 网关:让私有子网 EC2 能出网
- 一个 跳板机(Bastion Host):部署在公有子网,用于登录私有子网 EC2
🧱 步骤一:创建 VPC
- 登录 AWS 中国区控制台(https://console.amazonaws.cn)
- 搜索并进入 “VPC” 服务
- 点击左侧“你的 VPC” → 右上角点击【创建 VPC】
- 创建方式选择 “仅限 VPC”
- 配置如下:
- 名称标签:My-VPC
- IPv4 CIDR 块:10.0.0.0/16
- 点击【创建 VPC】
🧱 步骤二:创建两个子网
- 左侧点击“子网” → 点击【创建子网】
- 选择刚刚创建的 My-VPC
➤ 创建公有子网:
- 子网名称:Public-Subnet
- 可用区:任选一个(如 cn-northwest-1a)
- 子网 CIDR 块:10.0.1.0/24
➤ 创建私有子网:
- 子网名称:Private-Subnet
- 可用区:同上
- 子网 CIDR 块:10.0.2.0/24
点击【创建子网】
🧱 步骤三:创建并附加 Internet 网关(IGW)
- 左侧点击“Internet 网关” → 点击【创建 Internet 网关】
- 名称标签:My-IGW → 点击【创建】
- 创建完成后,点击【操作】→【附加到 VPC】
- 选择刚才创建的 My-VPC → 确认
🧱 步骤四:配置公有子网的路由表
- 左侧点击“路由表”
- 找到自动创建的与 My-VPC 关联的路由表 → 改名为 Public-RT
- 点击该路由表 → 切换到“路由” → 点击【编辑路由】
- 添加一条路由:目标地址:0.0.0.0/0,目标:选择 Internet 网关(IGW)
- 点击【保存】
- 切换到“子网关联”→【编辑子网关联】
- 勾选 Public-Subnet → 保存
🧱 步骤五:创建 NAT 网关
- 左侧点击“弹性 IP” → 【分配弹性 IP 地址】
- 点击【分配】
- 左侧点击“NAT 网关” → 点击【创建 NAT 网关】
- 名称:My-NAT
- 子网:选择 Public-Subnet
- 绑定刚刚分配的弹性 IP 地址
- 点击【创建 NAT 网关】
- 等待 NAT 状态变为 “可用”
🧱 步骤六:配置私有子网的路由表
- 左侧点击“路由表” → 【创建路由表】
- 名称标签:Private-RT
- VPC:选择 My-VPC
- 点击【创建】
- 打开该路由表 → 点击“路由” → 【编辑路由】
- 添加目标:0.0.0.0/0,目标类型:选择 NAT 网关
- 点击【保存】
- 点击“子网关联” → 【编辑子网关联】
- 勾选 Private-Subnet → 保存
🧱 步骤七:创建 EC2 实例进行测试
➤ 公有子网:创建跳板机
- 进入 EC2 控制台 → 点击【启动实例】
- 名称:Bastion-Host
- 镜像:选择 Amazon Linux 2
- 实例类型:t3.micro(免费额度)
- 网络:选择 My-VPC,子网:选择 Public-Subnet
- 勾选“自动分配公网 IP”
- 配置 SSH 密钥对
- 安全组规则:
- 入站规则:允许 SSH(端口 22),来源可以设为 0.0.0.0/0 或你自己的公网 IP
- 启动实例
➤ 私有子网:创建业务 EC2 实例
- 名称:Private-EC2
- 子网:选择 Private-Subnet
- 不要分配公网 IP
- 安全组规则:
- 入站:允许 SSH,来源设为 10.0.1.0/24(跳板机所在子网)
- 启动实例
🧪 步骤八:测试验证
➤ 登录跳板机:
ssh -i your-key.pem ec2-user@跳板机公网IP
➤ 从跳板机内登录私有子网 EC2:
ssh -i your-key.pem ec2-user@私有EC2的内网IP
➤ 在私有子网 EC2 上测试出网能力(通过 NAT):
ping 8.8.8.8
curl ifconfig.me
sudo yum update -y
✅ 搭建完成
✅ 场景目标
你希望实现以下架构(基于 AWS 中国区域):
- 网络结构:
- 一个 VPC,包含:
- 公有子网:用于跳板机(Bastion Host)与 Memcached
- 私有子网:用于部署 EC2(含 MySQL)
- 一个 VPC,包含:
- EC2 实例:
- 私有子网的 EC2 可以访问:
- S3 拉取与上传数据(通过 NAT 网关)
- MySQL 本地服务
- Memcached 服务(部署在公有子网)
- 私有子网的 EC2 可以访问:
- S3 Bucket:
- 私有子网 EC2 可通过 AWS CLI 访问 S3(如:aws s3 cp)
- 其他组件:
- 一个 NAT 网关用于私有子网出网
- 合理配置 IAM、Security Group、子网路由表等
🧱 第一部分:VPC 和网络架构配置
步骤 1:创建 VPC(略,参考上面指南)
- 名称:MyVPC
- CIDR:10.0.0.0/16
步骤 2:创建子网
子网名称 | CIDR | 类型 |
Public-Subnet | 10.0.1.0/24 | 公有子网 |
Private-Subnet | 10.0.2.0/24 | 私有子网 |
步骤 3:创建 Internet 网关 + 附加 VPC
- 名称:MyIGW
- 并关联到 VPC
步骤 4:创建 NAT 网关
- 在 Public-Subnet 中创建
- 使用弹性 IP
- 供私有子网出网用
步骤 5:配置路由表
- Public-RT
- 关联:Public-Subnet
- 添加路由:0.0.0.0/0 → IGW
- Private-RT
- 关联:Private-Subnet
- 添加路由:0.0.0.0/0 → NAT 网关
🧱 第二部分:部署 EC2、MySQL、Memcached、S3 访问
步骤 6:创建公有子网 EC2(跳板机)
- 子网:Public-Subnet
- 类型:Amazon Linux 2
- 自动分配公网 IP:是
- 安全组入站规则:
- SSH:22端口,来源你自己公网 IP
步骤 7:创建私有子网 EC2
- 子网:Private-Subnet
- 不分配公网 IP
- 安全组入站规则:
- SSH 来自 Public-Subnet(如 10.0.1.0/24)
- TCP 3306(MySQL),来源本安全组或跳板机
- TCP 11211(Memcached),来源本安全组或跳板机
🧱 第三部分:配置 MySQL、Memcached、S3 访问
步骤 8:在私有 EC2 中安装 MySQL
sudo yum update -y
sudo yum install -y mariadb-server
sudo systemctl start mariadb
sudo systemctl enable mariadb
初始化数据库并设置密码:
sudo mysql_secure_installation
可通过:
mysql -u root -p
来登录 MySQL。
步骤 9:在公有 EC2 中部署 Memcached
sudo yum install -y memcached
sudo systemctl enable memcached
sudo systemctl start memcached
默认监听 11211 端口,确保安全组允许。
步骤 10:配置私有 EC2 访问 S3(拉取和上传)
10.1 安装 AWS CLI
sudo yum install -y awscli
10.2 配置访问凭据
执行:
aws configure
输入你的 Access Key、Secret、区域(如 cn-northwest-1),格式如下:
AWS Access Key ID [None]: <你的 Access Key>
AWS Secret Access Key [None]: <你的 Secret>
Default region name [None]: cn-northwest-1
Default output format [None]: json
10.3 验证 S3 访问
aws s3 ls s3://your-bucket-name/
aws s3 cp file.txt s3://your-bucket-name/
aws s3 cp s3://your-bucket-name/file.txt .
✅ 若 EC2 没有配置访问凭证,可以通过 IAM Role 赋予 EC2 访问权限。
✅ 总结构图(简略版)
[VPC: 10.0.0.0/16]
├── [Public Subnet: 10.0.1.0/24]
│ ├── EC2: Bastion Host(公网 IP)
│ └── EC2: Memcached(TCP 11211)
│
├── [Private Subnet: 10.0.2.0/24]
│ └── EC2: 应用主机(MySQL、S3 拉取)
│
├── IGW(Internet Gateway)→ 公网
├── NAT Gateway(私有子网出网)
└── S3(服务端存储,非用户控制)
🛠 可选:IAM 权限建议
如果你使用 IAM Role 分配给 EC2,建议附加如下策略:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:PutObject",
"s3:ListBucket"
],
"Resource": [
"arn:aws-cn:s3:::your-bucket-name",
"arn:aws-cn:s3:::your-bucket-name/*"
]
}
]
}
搭建完成