AWS架构:弹性、高性能与安全指南
1. 弹性架构
1.1 可用性指标
不同的可用性百分比对应着不同的停机时间:
| 可用性百分比 | 每月停机时间 | 每年停机时间 |
| ---- | ---- | ---- |
| 99% | 超过7小时 | - |
| 99.9% | 超过43分钟 | - |
| 99.95% | 约22分钟 | 4小时23分钟 |
| 99.999% | 少于30秒 | - |
1.2 组件可用性计算
对于冗余的EC2实例,计算其可用性时,需将组件故障率相乘,再用100%减去该乘积。若数据库为硬依赖,则需将EC2实例的可用性与RDS实例的可用性相乘。例如,两个EC2实例的故障率均为10%,则其可用性为100% - (10% × 10%) = 99%;若RDS实例的可用性为95%,则整个系统的可用性为99% × 95% = 94.05%。
1.3 数据库选择
- DynamoDB :提供99.99%的可用性和低延迟,数据分布在多个可用区,使用全局表可实现99.999%的可用性。
- Multi - AZ RDS :以Aurora为例,可提供低延迟性能,但保证的可用性上限为99.95%。
- 自建SQL数据库 :理论上可实现高可用性,但需投入大量时间和精力。
1.4 Auto Scaling相关要点
- 维护实例数量 :Auto Scaling会尽力维护期望容量设置中的实例数量。若未设置期望容量,则会维护最小组大小指定的实例数量。例如,期望容量为5时,若手动终止两个实例,Auto Scaling会创建两个新实例进行替换,且不会调整期望容量或最小组大小。
- 健康检查 :Auto Scaling使用ELB或EC2实例和系统检查来监控组内实例的健康状况,不能使用Route 53健康检查。
-
缩放策略
:
- 计划操作 :可按计划调整最小和最大组大小以及期望容量,适用于有可预测负载模式的应用。
- 步进缩放策略 :根据组的聚合CPU利用率按比例添加更多实例。
- 目标跟踪策略 :调整组的期望容量,使给定指标的阈值接近预定义值。
- 简单缩放策略 :当定义的CloudWatch警报触发时添加更多实例,但添加的实例数量与指标值不成比例。
1.5 存储相关
- 版本控制 :启用版本控制可通过保留每个对象的前后副本,防止数据损坏和删除。
- 存储类 :标准存储类可将对象复制到区域内的多个可用区,防止整个可用区故障。
- 数据生命周期管理 :Data Lifecycle Manager可自动每12或24小时创建EBS卷的快照,并保留多达1000个快照。
1.6 数据库复制
不同数据库支持的副本数量不同:
| 数据库类型 | 支持的最大副本数量 |
| ---- | ---- |
| Aurora | 15 |
| MariaDB、MySQL、PostgreSQL | 5 |
1.7 网络相关
- 子网选择 :若有50个EC2实例,每个实例有两个私有IP地址,则子网需容纳100个IP地址,再加上AWS为每个子网保留的5个IP地址,子网至少需容纳105个IP地址。例如,172.21.0.0/25和10.0.0.0/21足够大,而172.21.0.0/26只能容纳63个IP地址,10.0.0.0/8虽足够大,但子网前缀长度至少应为/16。
- Direct Connect :提供一致的速度和延迟,绕过公共互联网,更安全。可选1 Gbps或10 Gbps速度,但不会增加带宽,对最终用户体验无影响。
- VPC连接 :连接VPC到外部网络时,确保IP地址范围不重叠。
1.8 消息队列
- SQS和Kinesis Data Streams对比 :SQS用于临时保存小消息,直到单个消费者处理;Kinesis Data Streams用于为多个消费者提供大数据流的持久存储和回放。
-
SQS特性
:
- 可见性超时 :消费者获取消息后,消息在可见性超时期间对其他消费者不可见,超过保留期后自动从队列中删除。
- 默认设置 :默认可见性超时为30秒,可配置为0秒到12小时;默认保留期为4天,可设置为1分钟到14天。
- 消息定时器 :可使用消息定时器将消息隐藏长达15分钟。
- 队列类型 :标准队列可处理多达120,000个飞行中消息,FIFO队列可处理约20,000个。FIFO队列按接收顺序传递消息,标准队列通常也如此,但不保证。标准队列可能偶尔重复传递消息,FIFO队列不会。
- 长轮询 :短轮询可能偶尔无法传递消息,使用长轮询可确保消息传递。
- 死信队列 :用于处理消费者无法处理的消息,需创建与源队列类型相同的队列,并设置maxReceiveCount。
以下是一个简单的mermaid流程图,展示Auto Scaling维护实例数量的过程:
graph LR
A[开始] --> B{期望容量设置?}
B -- 是 --> C[维护期望容量实例数量]
B -- 否 --> D[维护最小组大小实例数量]
C --> E{手动终止实例?}
E -- 是 --> F[创建新实例替换]
E -- 否 --> G[保持实例数量]
D --> E
F --> G
G --> H[结束]
2. 高性能架构
2.1 实例类型参数
ECUs、vCPUs和Intel AES - NI加密集是实例类型参数,而每请求的聚合累积成本是常见的关键绩效指标(KPI),读副本是数据库引擎的功能。
2.2 Auto Scaling必要元素
通常,指向EC2 AMI的启动配置和关联的负载均衡器是Auto Scaling操作的必要元素。在运行时传递启动脚本可能并非必要,特别是当应用已作为AMI的一部分设置好时。OpsWorks堆栈是编排自动化工具,对成功的Auto Scaling并非必需。
2.3 不同配置的作用
- Auto Scaling配置 :定义容量指标、最小和最大实例数以及负载均衡器。
- 启动配置 :定义AMI。
2.4 部署平台选择
弹性容器服务是微服务的良好平台,Lambda函数执行时间短(最长15分钟),不适合此类部署;Beanstalk操作对微服务不理想;ECR是容器镜像仓库,本身不是部署平台。
2.5 RAID优化
RAID优化是操作系统级别的配置,只能在操作系统内执行。
2.6 数据传输和复制
- 跨区域复制 :可提供低延迟和弹性。
- CloudFront和S3 Transfer Acceleration :提供低延迟,但不提供弹性。
- RAID阵列 :仅在EBS卷上可提供低延迟和弹性。
2.7 负载均衡器
- 网络负载均衡器 :适用于任何基于TCP的应用,可保留源IP地址。
- 应用负载均衡器 :终止HTTP和HTTPS连接,适用于VPC中的应用,但不保留源IP地址。
- 经典负载均衡器 :适用于任何基于TCP的应用,但不保留源IP地址。
- 网关负载均衡器 :用于虚拟设备工作负载。
2.8 CloudFormation相关
- 有用元素 :CloudFormation向导、预建模板和JSON格式对CloudFormation部署有用。CloudDeploy和Systems Manager不是CloudFormation模板的良好来源。
- 嵌套堆栈 :父堆栈定义类型为AWS::CloudFormation::Stack的资源,指向用于生成嵌套堆栈的模板,无需直接在创建父堆栈的模板中定义VPC资源,也无需导出堆栈输出值或使用Fn::ImportValue函数。
- 变更集 :可在更新堆栈前查看CloudFormation将进行的更改,直接更新则无法提前查看。
2.9 监控工具
- Dashboards和SNS :是资源监控的重要元素。
- 不同工具作用 :Config是审计工具,CloudTrail跟踪API调用,CloudWatch监控系统性能,CodePipeline是持续集成/持续部署(CI/CD)编排服务。
2.10 缓存
- ElastiCache :可使用Redis或Memcached。Varnish和Nginx是缓存引擎,但未集成到ElastiCache中。
- Redis和Memcached对比 :Redis适用于需要持久会话状态或更大灵活性的操作,但配置学习曲线较陡;若追求速度,Memcached通常能提供更快的服务。
2.11 堆栈组织
最佳实践是按生命周期(如开发、测试、生产)和所有权(如网络团队、开发团队)组织堆栈。可将多个堆栈的模板存储在同一存储桶中,按资源成本组织堆栈无优势。
2.12 参数使用
参数可在创建堆栈时将自定义值输入模板,避免硬编码。例如,AMI ID和EC2密钥对名称通常不会硬编码在模板中。
以下是一个展示应用不同缩放策略的mermaid流程图:
graph LR
A[开始] --> B{应用负载模式可预测?}
B -- 是 --> C[使用计划操作]
B -- 否 --> D{根据CPU利用率缩放?}
D -- 是 --> E[使用步进缩放策略]
D -- 否 --> F{按指标阈值缩放?}
F -- 是 --> G[使用目标跟踪策略]
F -- 否 --> H[使用简单缩放策略]
C --> I[结束]
E --> I
G --> I
H --> I
3. 安全架构
3.1 密码策略
密码策略可指定最小密码长度,防止用户重用之前使用过的密码,要求密码包含数字,还可要求管理员批准重置过期密码,但不能指定最大密码长度,也不能防止用户使用其他用户用过的密码。
3.2 IAM策略条件
在IAM策略中,Condition元素可用于要求MFA来授予策略中定义的权限,Resource和Action元素定义权限内容,Principal元素不用于基于身份的策略。
3.3 策略版本与日志记录
- IAM为每个客户管理的策略保留五个版本。
- 当CloudTrail配置为记录全局管理事件时,会在CreatePolicyVersion操作的请求参数中记录任何策略更改。不存在策略快照,CloudTrail数据事件日志不会记录IAM事件。
3.4 IAM用户角色假设
当IAM用户假设一个角色时,用户会获得该角色分配的权限,但会失去IAM用户本身分配的权限。例如,若角色可在us - east - 1区域执行RunInstances操作,用户假设该角色后可在该区域创建新实例,但不能执行其他操作。
3.5 KMS密钥访问
授予用户使用KMS密钥解密数据的访问权限,需要将用户添加到密钥策略中作为密钥用户。仅将用户添加为密钥管理员或使用IAM策略授予访问权限是不够的,将用户添加到存储桶策略中可授予访问加密对象的权限,但不一定能解密这些对象。
3.6 日志记录
- VPC流日志 :记录进入VPC的流量的源IP地址信息。
- DNS查询日志 :记录DNS查询的IP地址,但不一定是访问应用的IP地址。
- RDS日志 :由于用户不会直接连接到RDS实例,所以不会记录用户的IP地址。
- CloudTrail日志 :可记录API请求的源IP地址,但不记录连接到EC2实例的信息。
3.7 高级查询
Athena可对存储在S3中的数据执行高级SQL查询,而指标过滤器可根据CloudWatch日志组中值的出现情况进行递增,但无法告知最频繁出现的IP地址。
3.8 安全发现类型
- 行为发现类型 :当实例发送异常大量数据或在通常不使用的协议和端口上通信时触发。
- 后门发现类型 :当实例解析与命令和控制服务器关联的DNS名称或在TCP端口25上通信时触发。
- 隐身发现类型 :当密码策略变弱或修改CloudTrail配置时触发。
- 资源消耗发现类型 :当IAM用户从未启动过EC2实例却启动时触发。
3.9 配置变更监控
AWS Config时间线会显示实例上发生的每个配置更改,包括安全组的附加和分离。CloudTrail管理事件日志也会显示分离和附加安全组的操作。AWS管理规则的Lambda日志不可用,VPC流日志捕获进入VPC的流量,而非API事件。
3.10 规则包适用性
安全最佳实践规则包仅适用于Linux实例,其他规则包包含适用于Windows和Linux实例的规则。
3.11 队列访问限制
可使用IAM策略或SQS访问策略将队列访问限制到特定主体或来自指定IP范围的主体,不能使用网络访问控制列表或安全组来限制对公共端点的访问。
3.12 安全组配置
- 由于HTTPS流量通过TCP端口443传输,安全组应允许对该协议和端口的入站访问,HTTP流量使用TCP端口80。
- 因为用户需要访问ALB而不是直接访问实例,所以安全组应附加到ALB。移除互联网网关会阻止用户访问ALB和EC2实例。
3.13 DDoS防护
安全组限制入站访问到授权源足以防范基于UDP的DDoS攻击。弹性负载均衡器仅提供TCP监听器,不提供UDP监听器。AWS Shield默认启用,可保护来自安全组允许源的基于UDP的攻击。
3.14 SQL注入防护
WAF可阻止针对应用的SQL注入攻击,但前提是应用位于应用负载均衡器后面。EC2实例不需要有弹性IP地址,阻止对TCP端口3306(MySQL用于数据库连接的端口)的访问可能会阻止直接访问数据库服务器,但不能防止SQL注入攻击。
3.15 HTTP洪水攻击防护
WAF和Shield Advanced都可防范HTTP洪水攻击,Shield Advanced免费包含WAF。Shield Standard不提供对第7层攻击的防护,GuardDuty可查找攻击迹象,但不能防止攻击。
以下是一个mermaid流程图,展示IAM用户假设角色的权限变化过程:
graph LR
A[IAM用户] --> B{假设角色?}
B -- 是 --> C[失去原有权限]
B -- 否 --> D[保持原有权限]
C --> E[获得角色权限]
E --> F[执行角色允许操作]
D --> G[执行原有权限操作]
F --> H[结束]
G --> H
总结
本文围绕弹性架构、高性能架构和安全架构三个方面,详细介绍了AWS相关服务和技术的使用方法、特性及注意事项。在弹性架构中,涵盖了可用性计算、Auto Scaling策略、存储保护等内容;高性能架构涉及实例类型参数、部署平台选择、负载均衡器等;安全架构则包括密码策略、IAM权限控制、日志记录和攻击防护等。这些知识对于构建稳定、高效、安全的AWS应用架构具有重要的指导意义。通过合理运用这些技术和策略,开发者可以更好地满足不同应用场景的需求,提升系统的整体性能和安全性。
| 架构类型 | 关键要点 |
|---|---|
| 弹性架构 | 可用性计算、Auto Scaling维护实例、存储版本控制、数据库复制等 |
| 高性能架构 | 实例参数、缩放策略、负载均衡器、缓存选择等 |
| 安全架构 | 密码策略、IAM权限、日志记录、攻击防护等 |
超级会员免费看

被折叠的 条评论
为什么被折叠?



