7.0 KiB
第24天:VPC 安全进阶——网络层面的防护
今天你将学到什么
第 14 天我们学了 VPC 的基础概念。今天深入学习 VPC 的安全功能:网络 ACL(访问控制列表)、VPC Flow Logs(流量日志)、VPC Endpoint(私有连接)。这些是在网络层面保护你资源的重要工具。
安全组 vs 网络 ACL
第 14 天学过安全组(Security Group),今天加上网络 ACL(Network 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 记录所有流量,形成完整的网络安全体系。
今天的小测验
- 安全组和网络 ACL 的"有状态"和"无状态"分别是什么意思?
- VPC Flow Logs 记录什么信息?它能帮你解决什么问题?
- 为什么建议使用 VPC Endpoint 而不是通过公网访问 S3?
- PrivateLink 解决了什么问题?
延伸阅读
明天预告
明天是第三阶段的收尾:安全架构综合实战。我们会把 IAM、加密、WAF、CloudTrail、VPC 安全这些知识串联起来,设计一个完整的安全防护体系。