# 第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 记录所有流量,形成完整的网络安全体系。 --- ## 今天的小测验 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 安全这些知识串联起来,设计一个完整的安全防护体系。