aws-doc/课程/第三阶段-安全与身份/第24天-VPC安全进阶.md

214 lines
7.0 KiB
Markdown
Raw Normal View History

2026-05-08 10:24:39 +08:00
# 第24天VPC 安全进阶——网络层面的防护
## 今天你将学到什么
第 14 天我们学了 VPC 的基础概念。今天深入学习 VPC 的安全功能:网络 ACL访问控制列表、VPC Flow Logs流量日志、VPC Endpoint私有连接。这些是在网络层面保护你资源的重要工具。
---
## 安全组 vs 网络 ACL
第 14 天学过安全组Security Group今天加上网络 ACLNetwork ACL看看它们的区别。
### 类比理解
想象你住在一个小区里:
- **网络 ACL** = 小区大门的保安。检查每一个进出小区的人,按照名单放行或拦截。
- **安全组** = 你家的门锁。只有你允许的人才能进你家。
两道防线,层层保护。
### 详细对比
| 特性 | 安全组 | 网络 ACL |
|------|--------|----------|
| 作用范围 | 实例级别(绑定到 EC2 | 子网级别(整个子网的流量) |
| 规则类型 | 只有允许规则 | 有允许和拒绝规则 |
| 状态 | 有状态(允许进就自动允许出) | 无状态(进和出要分别设置) |
| 规则评估 | 所有规则一起评估 | 按编号顺序评估,匹配即停止 |
| 默认行为 | 拒绝所有入站,允许所有出站 | 默认 ACL 允许所有流量 |
### "有状态"和"无状态"是什么意思?
**安全组(有状态)**
- 你允许了外部访问 80 端口(入站规则)
- 服务器的响应会自动被允许出去(不需要额外设置出站规则)
- 就像你邀请朋友来家里,他走的时候不需要再开一次门
**网络 ACL无状态**
- 你允许了外部访问 80 端口(入站规则)
- 还必须单独设置出站规则,允许响应流量出去
- 就像小区保安,进来要查一次证件,出去还要再查一次
### 网络 ACL 规则示例
```
入站规则:
规则# | 类型 | 端口 | 来源 | 允许/拒绝
100 | HTTP | 80 | 0.0.0.0/0 | 允许
110 | HTTPS | 443 | 0.0.0.0/0 | 允许
120 | SSH | 22 | 10.0.0.0/16| 允许
200 | 所有 | 所有 | 1.2.3.4/32 | 拒绝封禁恶意IP
* | 所有 | 所有 | 0.0.0.0/0 | 拒绝(默认拒绝)
```
规则按编号从小到大评估。规则 200 会拒绝来自 `1.2.3.4` 的所有流量,即使规则 100 允许了 HTTP。
---
## VPC Flow Logs——网络流量的"监控录像"
### 是什么
VPC Flow Logs 记录 VPC 中网络接口的流量信息。它不记录流量内容(不是抓包),而是记录"谁和谁通信了、用什么端口、多少数据、是否被允许"。
**类比**:如果 CloudTrail 是记录"谁做了什么操作",那 Flow Logs 就是记录"谁和谁通了电话、打了多久"。不记录通话内容,但记录通话记录。
### 记录什么信息
每条 Flow Log 记录包含:
| 字段 | 含义 | 举例 |
|------|------|------|
| 源 IP | 流量从哪来 | 203.0.113.50 |
| 目标 IP | 流量去哪里 | 10.0.1.25 |
| 源端口 | 发送方端口 | 49152 |
| 目标端口 | 接收方端口 | 443 |
| 协议 | TCP/UDP/ICMP | TCP (6) |
| 数据包数 | 传了多少包 | 15 |
| 字节数 | 传了多少数据 | 3500 |
| 动作 | 被允许还是拒绝 | ACCEPT / REJECT |
### 能用来做什么
**安全分析**
- 发现异常流量模式(某台服务器突然向外发送大量数据——可能是数据泄露)
- 检测端口扫描(大量来自同一 IP 的 REJECT 记录)
- 确认安全组规则是否生效
**故障排查**
- "为什么我的应用连不上数据库?"——查 Flow Logs 看流量是否被 REJECT
- "为什么响应这么慢?"——查看是否有大量重传
**合规审计**
- 证明敏感数据没有流向未授权的网络
- 记录所有跨 VPC 的通信
### 在哪里开启
Flow Logs 可以在三个级别开启:
- **VPC 级别**:记录整个 VPC 的所有流量
- **子网级别**:只记录某个子网的流量
- **网络接口级别**:只记录某台 EC2 的流量
日志可以发送到CloudWatch Logs 或 S3。
---
## VPC Endpoint——不走公网的私有连接
### 问题EC2 访问 S3 要绕路
默认情况下,私有子网的 EC2 要访问 S3流量路径是
```
EC2 → NAT Gateway → Internet Gateway → 公网 → S3
```
问题:
- 流量走了公网(虽然加密了,但有些合规要求不允许)
- 要付 NAT Gateway 的流量费
- 延迟更高
### 解决方案VPC Endpoint
VPC Endpoint 让你的 VPC 内部资源可以**直接**连接 AWS 服务,不经过公网。
```
EC2 → VPC Endpoint → S3全程在 AWS 内部网络)
```
**类比**:就像公司内部有一条专用通道直达银行金库,不需要走大马路。更安全、更快、更便宜。
### 两种 Endpoint 类型
| 类型 | 适用服务 | 费用 | 原理 |
|------|----------|------|------|
| 网关端点 | S3、DynamoDB | 免费 | 在路由表中添加一条路由 |
| 接口端点 | 其他大多数 AWS 服务 | 按小时 + 流量收费 | 在子网中创建一个网络接口 |
**建议**:如果你的 EC2 需要频繁访问 S3 或 DynamoDB一定要创建网关端点。免费且更安全。
---
## PrivateLink——安全地暴露服务
### 场景
你有一个内部 API 服务,想让其他 VPC可能是其他团队或其他公司安全地访问但不想把它暴露到公网。
### 传统方式(不安全)
把服务放在公网 → 任何人都能尝试访问 → 需要复杂的防火墙规则
### PrivateLink 方式
```
你的 VPC服务提供方
└── Network Load Balancer
PrivateLink
其他 VPC服务消费方
└── VPC Endpoint接口端点
```
消费方通过 VPC Endpoint 访问你的服务,流量全程在 AWS 内部网络,不经过公网。
**类比**:就像两栋大楼之间建了一条地下通道。住户可以安全地往来,不需要走外面的马路。
---
## 网络安全架构总结
一个安全的 VPC 网络架构应该包含:
```
互联网
网络 ACL子网级别的第一道防线
安全组(实例级别的第二道防线)
EC2 实例
VPC Endpoint访问 AWS 服务不走公网)
```
加上 VPC Flow Logs 记录所有流量,形成完整的网络安全体系。
---
## 今天的小测验
1. 安全组和网络 ACL 的"有状态"和"无状态"分别是什么意思?
2. VPC Flow Logs 记录什么信息?它能帮你解决什么问题?
3. 为什么建议使用 VPC Endpoint 而不是通过公网访问 S3
4. PrivateLink 解决了什么问题?
---
## 延伸阅读
- [网络 ACL 文档](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-network-acls.html)
- [VPC Flow Logs](https://docs.aws.amazon.com/vpc/latest/userguide/flow-logs.html)
- [VPC Endpoints](https://docs.aws.amazon.com/vpc/latest/privatelink/vpc-endpoints.html)
- [AWS PrivateLink](https://docs.aws.amazon.com/vpc/latest/privatelink/)
---
## 明天预告
明天是第三阶段的收尾:安全架构综合实战。我们会把 IAM、加密、WAF、CloudTrail、VPC 安全这些知识串联起来,设计一个完整的安全防护体系。