跳到主要内容

C2-02-03-Security-Group与单台-EC2-为什么不够?

本篇是《C2-02-EC2与基础计算服务》的第3个分篇,主要包含:Security-Group、单台-EC2-为什么不够。

6-★★★★★-Security-Group

Security Group:安全组。

最简单的理解:

EC2 等 VPC 资源前面的虚拟防火墙。

例如:

Internet

│ HTTPS :443

Security Group


EC2

Security Group 控制:Inbound、Outbound。

即:谁可以进来、谁可以出去。

AWS 官方当前仍将 Security Group 定义为控制资源 Inbound / Outbound Traffic 的虚拟防火墙,并且 Security Group 是 Stateful。

(AWS Documentation)


6.1-Inbound/Outbound

Inbound:入站流量。

例如:

User

EC2

Outbound:出站流量。

例如:

EC2

Internet / Other Service

GlobalShop:

ALB Security Group
允许:
Internet → 443

EC2 Security Group
允许:
ALB → 8080

而不是

Internet
→ 直接访问 EC2:8080

6.2-Stateful

Stateful:有状态。

假设 Security Group 允许:

Client
→ EC2:443

EC2 返回响应:

EC2
→ Client

这个响应流量会被允许返回,不需要再人为写一条完全对应的反向规则。

这是 Security Group 与 Network ACL 后面非常重要的区别。

Security Group
→ Stateful

Network ACL
→ Stateless

Network ACL 会在 C2-06 详细讲。

(AWS Documentation)


6.3-★★★★★-IAM-Role-for-EC2

正式名称:IAM:Identity and Access Management,即身份与访问管理。

完整 IAM 在 C2-08。

这里重点解释 EC2 为什么需要 IAM Role。


6.4-EC2-访问-S3-的错误方法

假设:GlobalShop EC2。

需要读取:S3 Product Images Bucket。

一种非常危险的方式:

AWS_ACCESS_KEY_ID = "AKIA..."
AWS_SECRET_ACCESS_KEY = "..."

写到:代码、.env、配置文件、AMI。

这是非常差的做法。

因为。

Credential 泄漏

攻击者得到长期 Access Key

访问 AWS Resource

6.5-正确方式:IAM-Role

EC2

│ assumes / uses

IAM Role

│ temporary credentials

S3

AWS 专门设计 EC2 IAM Role 来解决:

应用运行在 EC2 上,但又需要调用 AWS API 时,如何避免在 Instance 中保存长期 Credentials。

Instance 中的应用可以取得临时 Credentials,权限来自绑定的 IAM Role。

(AWS Documentation)


6.6-GlobalShop-示例

例如:

GlobalShop Product EC2

│ IAM Role:
│ Allow s3:GetObject

ProductImagesBucket

EC2 不需要保存:长期 Access Key,而是。

IAM Role

temporary credentials

访问 S3

这也是题库 Q4 的直接考点:

EC2 如何安全访问 S3?

→ IAM Role

6.7-★★★★-User-Data

User Data:用户数据。

名字看起来很奇怪。

它不是用户的订单数据,而是。

创建 EC2 时交给 Instance 的启动配置或启动脚本。

例如:

#!/bin/bash
dnf install nginx -y
systemctl start nginx

Instance 启动以后执行这些命令。


6.8-User-Data-为什么存在?

假设每次启动 EC2 都需要:安装软件、下载配置、启动服务、注册监控。

如果人工操作:

创建 1 台
→ SSH
→ 安装

创建 100 台
→ SSH 100 次

显然不可行。

于是:AMI + User Data。

配合使用。

例如:

AMI
→ 提供基础系统

User Data
→ 在 Launch 时进行最后的动态配置

AWS 官方也明确给出了“通用 AMI + User Data 在 Launch 时进行个性化配置”的模式。

(AWS Documentation)


6.9-AMI-vs-User-Data

AMI
=
服务器“基础模板”

User Data
=
服务器启动时执行的初始化信息

例如 GlobalShop:

AMI:
Linux
Node
Nginx
Application

User Data:
ENV=production
REGION=ap-northeast-1
启动 Product Service

6.10-★★★-Instance-Metadata

Metadata:元数据。

可以理解为:

描述这台 Instance 自身的信息。

例如:Instance ID、Hostname、Security Group、Instance identity等。

EC2 内部的程序可以通过:Instance Metadata Service:实例元数据服务。

获取相关信息。

(AWS Documentation)


6.11-Metadata-不要理解成业务数据

商品价格
订单信息
用户地址

≠ Metadata

Metadata 是:“关于这台 EC2 自己的信息”


6.12-★★★-Elastic-IP

Elastic IP Address

简称:EIP:弹性 IP 地址。

它是一种:

可以保留在 AWS Account 中并重新关联到不同资源的静态公有 IPv4 地址。

普通 Public IPv4 可能因为 Instance Stop / Start 等生命周期变化而改变。

而 Elastic IP 可以保留并重新映射。

(AWS Documentation)


6.13-为什么叫-Elastic-IP?

并不是说 IP 会自动变大变小,而是 IP 与某一台物理服务器不必永久绑定。

可以:

EIP


EC2 A

EC2 A Failure

EIP


EC2 B

因此具备一定“重新映射”的弹性。


6.14-[UPDATED]-Public-IPv4-收费规则

这一点旧教材非常容易过时。

当前 AWS:

所有 Public IPv4 Address 都会收费,包括运行中 EC2 所使用的 Public IPv4 和 Elastic IP。

因此不要再背旧规则:

EIP 绑定运行中的 EC2
→ 免费

当前已经不成立。

(AWS Documentation)。

但 CLF 层面更重要的技术区别仍然是:

普通 Public IPv4
→ 不应视为永久固定地址

Elastic IP
→ Static Public IPv4


7-单台-EC2-为什么不够?

现在假设 GlobalShop:

User

EC2

这有三个严重问题。


7.1-问题-1:性能

如果

100 users
→ 没问题

1,000,000 users
→ EC2 扛不住

7.2-问题-2:Single-Point-of-Failure

SPOF:Single Point of Failure,即单点故障。

如果唯一的 EC2:

EC2
X

整个系统:DOWN


7.3-问题-3:流量变化

平时:20 EC2 的能力够用。

双十一:需要 300 EC2。

活动结束:又只需要 20。

如果始终运行 300 台 EC2,会严重浪费成本。

所以需要 Amazon EC2 Auto Scaling 根据业务负载自动调整 EC2 实例数量。


7.4-★★★★★-Amazon-EC2-Auto-Scaling

正式名称:Amazon EC2 Auto Scaling

简称:通常写作 EC2 Auto Scaling,不要与服务统称 Auto Scaling 混淆。

中文:Amazon EC2 自动扩缩

核心功能:

根据需求自动增加或减少 EC2 Instance 数量,并维护期望数量的 Instance。

例如:

Normal
20 EC2

Traffic ↑

50

100

300 EC2

Traffic ↓

100

50

20 EC2

7.5-Scale-Out/Scale-In

Scale Out:横向增加实例。

2 EC2

4 EC2

8 EC2

Scale In:横向减少实例。

8 EC2

4 EC2

2 EC2

不要和:Scale Up / Scale Down。

混淆。

后者一般指:单台机器变大 / 变小。


7.6-Auto-Scaling-Group

简称:Auto Scaling Group:自动扩缩容组。

可以配置:Minimum Capacity、Desired Capacity、Maximum Capacity。

例如:

Min = 20
Desired = 20
Max = 300

意思是:

最少:
20

正常希望:
20

最多:
300

7.7-★★★★-Launch-Template

Auto Scaling 创建新 EC2 时必须知道:使用哪个 AMI?

什么 Instance Type?

什么 Security Group?

什么 User Data?

什么存储?

因此需要:= 启动模板。

当前 AWS 官方建议使用 Launch Template。

旧的 Launch Configuration 已经进入明显的历史兼容阶段,新 Account 已不能按旧方式创建 Launch Configuration,因此新教材应该把 Launch Template 作为主线。

(AWS Documentation)


7.8-Launch-Template-与-AMI-的关系

不要混淆:

AMI
→ 操作系统 / 软件镜像

Launch Template
→ 如何创建整个 EC2 Instance 的配置模板

Launch Template 可以包含:AMI、Instance Type、Security Group、Key Pair、Storage、User Data、其他 Launch Parameters。

(AWS Documentation)。

所以:

Launch Template

├── AMI
├── Instance Type
├── Security Group
├── User Data
└── Storage


Auto Scaling Group


EC2

7.9-CloudWatch-+-Auto-Scaling

Amazon CloudWatch:AWS 的监控与可观测性服务之一。

完整内容放在 C2-10。

这里先理解:

CloudWatch

│ Metric

Auto Scaling


增加 / 减少 EC2

例如:

CPU Utilization > 70%
持续一段时间

Scale Out

或者:

CPU Utilization < 20%

Scale In

Amazon EC2 Auto Scaling 的 Dynamic Scaling 支持 Target Tracking、Step Scaling、Simple Scaling 等策略。

(AWS Documentation)


7.10-Target-Tracking

Target Tracking Scaling:目标跟踪扩缩容。

思想很像空调恒温器。

例如:

目标 CPU
= 50%

系统尝试:

CPU 太高
→ 增 EC2

CPU 太低
→ 减 EC2

目标是让整体指标尽量接近:50%。

AWS 官方也直接用 thermostat,也就是恒温器,来说明这种机制。

(AWS Documentation)


7.11-Auto-Scaling-不只是“性能功能”

它同时解决:Scalability、Elasticity、Availability、Cost Optimization。

例如:

实例坏掉

ASG 检测到

创建 replacement instance

AWS 官方教程明确展示了:人为 Terminate Auto Scaling Group 中的 Instance 后,Auto Scaling 会检测并补充新的 Instance,以保持预期容量。

(AWS Documentation)


7.12-只有-Auto-Scaling-还不够

现在有:EC2 1、EC2 2、EC2 3、EC2 4、...。

问题来了:

用户应该访问哪一台?

难道:

user1 → EC2-1
user2 → EC2-2
user3 → EC2-3

由客户端自己决定?

不行。

因此需要 Elastic Load Balancing 提供统一访问入口,接收客户端请求,再把流量分发到健康的 EC2 实例。

下一篇将继续说明 ALB、NLB、健康检查以及 ELB 与 Auto Scaling 的配合。


本篇概述

  • 本篇梳理了Security-Group相关的核心知识、适用场景与判断要点。
  • 本篇梳理了单台-EC2-为什么不够?

相关的核心知识、适用场景与判断要点。

返回本章总述查看本章概述