本文介绍: Web 应用程序的 3 层架构公有子网层私有子网层数据子网层用于存储 Session(替代方案:DynamoDB)用于缓存来自 RDS 的数据多可用区RDS用于存储用户数据用于扩展读取的读取副本用于灾难恢复的多可用区Elastic Beanstalk 是在 AWS 上部署应用程序的以开发人员为中心的视图它使用了我们之前见过的所有组件:EC2、ASG、ELB、RDS……托管服务自动处理容量配置、负载平衡、扩展、应用程序运行状况监控、实例配置……

文章目录

Classic Solutions Architecture

  • 让我们了解我们所见过的所有技术如何协同工作
  • 这是一个你需要百分百熟悉的部分
  • 我们将通过许多示例案例研究看到解决方案架构师思维的进展:
    • WhatIsTheTime.com
    • MyClothes.com
    • NyWordPress.com
  • 快速实例化应用程序
    • Beanstalk

无状态 Web 应用程序:WhatIsTheTime.com

背景 & 目标

  • 不需要数据库
  • 初始阶段可以接受停机时间,最佳实践下完全垂直和水平扩展,无需停机

架构演进

  1. 从简单开始(一个 t2 Instance + 一个 EIP)
  2. 垂直扩展(单 Instance的容量从 t2 到 m5)
  3. 水平扩展(instance 和 EIP 均扩展为 3 个 => 引入 DNS,去除 EIP,解决需要记住多个 IP 的问题)
  4. 水平扩展、添加和删除实例(需要添加和删除实例时部分用户会感知到停机)
  5. 使用负载均衡器水平扩展(引入 ELB + Health Check,使 instance 扩展无感知)
  6. 使用自动缩放组进行水平缩放(引入 ASG,使扩展自动化)
  7. 使我们的应用程序多可用(灾备能力,可以最小化配置为 2 AZ => 预留更多容量,节约成本)

Screenshot 2023-06-30 at 10.54.09.png

Well-Architected 5 pillars

成本、性能、可靠性、安全性、卓越运营

有状态的 Web 应用程序:MyClothes.com

背景 & 目标

  • 此应用有一个购物车,允许用户选购商品,在线购买衣服
  • 网站同时拥有数百个用户
  • 我们需要扩展、保持水平可扩展性并尽可能保持我们的 Web 应用端 无状态
  • 购物车的数据、用户的详细信息等都应该存储在数据库中

架构演进

  1. 引入 ELB Stickiness (Session Affinity) — 使请求能根据cookie或者IP地址路由到同一服务器
  2. 引入 User Cookie — 实现客户端无状态
  3. 引入 Server Session — 引入 ElasticCache 实现 Session 存储,同时可以缓存 RDS 数据
  4. 将 User Data 存储到数据库 — 引入 RDS
  5. Scaling Reads — 通过只读副本将读取操作分散到多个数据库实例提高读取性能
  6. Scaling Reads(可选)— 延迟加载,当客户端请求数据时只将需要的数据加载到只读副本中,减少数据传输和加载的时间,提高读取性能
  7. 多可用区— 灾备
  8. 安全组 — 相互引用,确保严格的安全性

Screenshot 2023-06-30 at 11.16.00.png

总结

  • Web 应用程序的 3 层架构

Screenshot 2023-06-30 at 11.23.22.png

  • 公有子网层
  • 私有子网层
  • 数据子网层
    • ElasticCache
      • 用于存储 Session(替代方案:DynamoDB)
      • 用于缓存来自 RDS 的数据
      • 多可用区
    • RDS
      • 用于存储用户数据
      • 用于扩展读取的读取副本
      • 用于灾难恢复的多可用区

有状态的 Web 应用程序:MyWordPress.com

背景 & 目标

  • 一个能够访问并正确显示上传的图片的 WordPress 网站
  • 该网站完全可扩展
  • 用户数据和博客内容应该存储在 MySQL 数据库中

架构演进

  1. RDS 层
  2. 使用 Aurora 进行扩展:多可用区和只读副本
  3. 使用 EBS 存储 Image(单例应用程序)
  4. 使用 EFS 存储 Image(分布式应用程序)

Screenshot 2023-06-30 at 11.22.44.png

快速实例化应用程序

  • 启动一个完整的堆栈(e.s. EC2、EBS、RDS)可能需要较长时间: 安装应用程序、插入初始(或恢复)数据、初始化配置、启动应用程序
  • 利用云特性来加速启动
  • EC2 实例:
    • 使用 Golden AMI:预先安装应用程序、操作系统依赖项等,并从 Golden AMI 启动 EC2 实例
    • Bootstrap using User Data:对于动态配置,请使用用户数据脚本
    • Hybrid:混合 Golden AMI 和用户数据 (e.s. Elastic Beanstalk)
  • RDS 数据库
    • 从快照恢复:数据库将准备好架构和数据!
  • EBS 卷
    • 从快照恢复:磁盘已经格式化并且有数据!

AWS 上的开发人员的问题

  • 管理基础设施
  • 部署代码
  • 配置所有数据库、负载均衡器等
  • 扩展问题
  • 大多数网络应用程序具有相同的架构(ALB + ASG)
  • 开发人员想要的只是他们的代码能够运行!
  • 可以在不同的应用程序和环境中保持一致

Elastic Beanstalk

概述
  • Elastic Beanstalk 是在 AWS 上部署应用程序的以开发人员为中心的视图
  • 它使用了我们之前见过的所有组件:EC2、ASG、ELB、RDS……
  • 托管服务
  • 自动处理容量配置、负载平衡、扩展、应用程序运行状况监控、实例配置……
  • 仅应用程序代码是开发人员的责任
  • 我们仍然可以完全控制配置
  • Beanstalk 是免费的,但您需要为底层实例付费
组成
  • 应用程序:Elastic Beanstalk 组件的集合(环境、版本、配置等)
  • 应用程序版本:应用程序代码的迭代
  • 环境
  • 运行应用程序版本的AWS 资源集合(一次仅一个应用程序版本)
  • Tiers:WebServerEnvironmentTier&WorkerEnvironmentTier
  • 您可以创建多个环境(dev、test、prod…)
支持的平台
  • Go
  • Java SE
  • Java & Tomcat
  • .NET Core on Linux
  • .NET on Windows Server
  • Node.js
  • PHP
  • Python
  • Ruby
  • Packer Builder
  • Single container Docker
  • Multi-container Docker
  • Preconfigured Docker
  • 如果不支持,可以编写自定义平台(高级)

Web ServerTier vs. WorkerTier

Screenshot 2023-07-02 at 18.56.21.png

  • Web ServerTier 旨在处理传入的 HTTP 请求,负责提供 Web 页面、运行 Web 应用程序和管理用户会话。
    它通常包括一个 ELB,将传入的流量分配到多个应用程序实例中,提高性能和可用性。
  • WorkerTier 则旨在处理后台任务或长时间运行的进程,与提供 Web 请求的任务无直接关系。
    它通常用于诸如 数据处理、图像或视频编码、消息队列处理和其他类型的批处理作业等任务。
  • WorkerTier 可用于从 Web ServerTier 中卸载资源密集型任务。
  • WorkerTier 可以根据 SQS 消息数量进行扩展(独立于 Web ServerTier 服务器)
  • Web ServerTier 可以将消息推送到 WorkerTier 的 SQS 队列

Elastic Beanstalk 部署模式

Screenshot 2023-07-02 at 18.56.42.png

image.png

Amazon S3 Section

Amazon S3 是 AWS 的主要组成部分之一,许多网站使用 Amazon S3 作为核心部分,许多 AWS 服务也使用 Amazon S3 进行集成

Amazon S3 Use cases

  • 备份和存储
  • 灾难恢复
  • 归档
  • 混合云存储
  • 应用程序托管
  • 媒体托管
  • 数据湖和大数据分析
  • 软件交付
  • 静态网站

Amazon S3 — Buckets

  • Amazon S3 允许人们将对象(文件)存储在“存储桶”(目录)中
  • 存储桶必须具有全球唯一的名称(跨所有区域的所有账户)
  • 虽然 S3 是 Global 服务,但存储桶是在特定 Regions 中创建的
  • 命名约定
    • 没有大写字母,没有下划线
    • 3-63 个字符长
    • 不是 IP
    • 必须以小写字母或数字开头
    • 不得以前缀 xn-- 开头
    • 不得以后缀 -s3alias 结尾

Amazon S3 — Objects

  • 每个 Objects(files)对应一个键(key)
  • 关键是完整路径:
    • s3://my-bucket/my_file.txt
    • s3://my-bucket/my_folder1/another_folder/my_file.txt
  • 键由前缀+对象名组成
    • s3://my-bucket/my_folder1/another_folder/my_file.txt
  • S3 存储桶中没有“目录”的概念,键通常是一个很长的名称,可以包含斜杠(“/”)字符,这些“/”被用来模拟目录结构。
  • 对象值是内容主体:
    • 单个对象的最大存储空间为 5TB (5000GB)
    • 如果上传超过5GB,必须使用“multi-part upload”
  • MetaData(文本键/值对列表 — 系统或用户元数据)
  • Tags (Unicode 键/值对 — 最多 10 个) — 对于安全/生命周期有用
  • Version ID(如果启用版本控制)

Amazon S3 — Security

  • User-Based
    • IAM 策略 — 应允许特定用户从 IAM 调用哪些 API
  • Resource-Based
    • 存储桶策略 — 来自 S3 控制台的存储桶范围规则 — 允许跨账户
    • 对象访问控制列表 (ACL) — 更细粒度(可以禁用)
    • 存储桶访问控制列表 (ACL) — 不太常见(可以禁用)
  • 注意:满足以下条件时 IAM principal 可以访问 S3 对象:
    • 用户 IAM权限 允许或 资源策略 允许
    • 并且没有明确的拒绝
  • Encryption:使用加密密钥加密 Amazon S3 中的对象

S3 Bucket Policies

  • 基于 JSON 的策略
    • Resources:存储桶和对象
    • Effect:允许/拒绝
    • Actions:API 集
    • Principal:应用策略的帐户或用户
  • 使用 S3 Bucket Policies 可以实现:
    • 授予公共访问存储桶的权限
    • 强制对象在上传时加密
    • 授予对另一个帐户的访问权限(跨帐户)

Screenshot 2023-07-10 at 00.49.56.png

示例:公共访问 — 使用存储桶策略

Screenshot 2023-07-10 at 00.54.28.png

示例:用户访问 S3 — IAM 权限

Screenshot 2023-07-10 at 00.54.57.png

示例:EC2 实例访问 — 使用 IAM 角色

Screenshot 2023-07-10 at 00.55.07.png

进阶:跨账户访问 — 使用存储桶策略

Screenshot 2023-07-10 at 00.55.18.png
阻止公共访问的存储桶设置
Screenshot 2023-07-10 at 00.55.43.png

  • 创建这些设置是为了防止公司数据泄露
  • 如果您知道您的存储桶永远不应该公开,请将它们保留在
  • 可以在帐户级别设置

Amazon S3 — Static Website Hosting(静态网站托管)

Amazon S3 — Versioning

  • 可以在 Amazon S3 中对文件进行版本控制
  • 它在存储桶级别启用
  • 相同密钥的覆盖将更改“版本”:1、2、3…
  • 最佳实践是对存储桶进行版本控制
    • 防止意外删除(恢复版本的能力)
    • 轻松回滚到以前的版本
  • 注意:
    • 在启用版本控制之前未进行版本控制的任何文件的版本将为“null”
    • 暂停版本控制不会删除以前的版本

Amazon S3 — Replication(CRR & SRR)

  • 必须在源存储桶和目标存储桶中启用版本控制
  • Cross-Region 复制 (CRR)
  • Same-Region 复制 (SRR)
  • 存储桶可以位于不同的 AWS 账户中
  • 复制是异步的
  • 必须向 S3 授予适当的 IAM 权限
  • 用例:
    • CRR:合规性、低延迟访问、跨账户复制
    • SRR:日志聚合、生产和测试帐户之间的实时复制

Notes

  • 启用复制后,仅复制新对象
  • 也可以选择使用 S3 批量复制来复制现有对象
    • 复制现有对象和复制失败的对象
  • 对于删除操作
    • 可以将删除标记从源复制到目标(可选设置)
    • 不会复制带有版本 ID 的删除(以避免恶意删除)
  • 不存在复制 “chaining” 链式反应
    • 如果 存储桶1 已复制到 存储桶2,而 存储桶2 已复制到 存储桶3
    • 那么在 存储桶1 中创建的对象不会复制到 存储桶3

Amazon S3 Storage Classes

  • Amazon S3 Standard — General Purpose(通用)
  • Amazon S3 Standard — Infrequent Access (IA)
  • Amazon S3 One Zone — 不频繁访问
  • Amazon S3 Glacier Instant Retrieval
  • Amazon S3 Glacier Flexible Retrieval
  • Amazon S3 Glacier Deep Archive
  • Amazon S3 Intelligent Tiering
  • 用户可以手动配置转移对象的存储类别,也可以使用 S3 生命周期 自动转移或删除对象

S3 Durability and Availability

  • 耐用性:
    • 跨多个可用区的对象的高持久性(99.999999999%,11 个 9)
    • 如果您使用 Amazon S3 存储 10,000,000 个对象,则平均每 10,000 年就会丢失一个对象
    • 所有存储类别均相同
  • 可用性:
    • 衡量服务的可用性
    • 因存储类别而异
    • 示例:S3 标准的可用性为 99.99% = 每年有 53 分钟不可用

S3 Standard — 通用

  • 99.99% 的可用性
  • 用于经常访问的数据
  • 低延迟和高吞吐量
  • 维持 2 个并发设施故障
  • 用例:大数据分析、移动和游戏应用程序、内容分发…

S3 Storage Classes — Infrequent Access

  • 适用于访问频率较低但需要在需要时快速访问的数据
  • 成本低于 S3 标准
  • Amazon S3 标准 – 不频繁访问(S3 标准 – IA)
    • 99.9% 的可用性
    • 使用案例:灾难恢复、备份
  • Amazon S3 单时区 – 不频繁访问(S3 One Zone – IA)
    • 单个 AZ 内的高耐用性(99.999999999%),但 AZ 被破坏时数据会丢失
    • 99.5% 的可用性
    • 用例:存储本地数据的辅助备份副本或可以重新创建的数据

S3 Glacier Storage Classes

  • 用于归档/备份的低成本对象存储
  • 定价:存储价格 + 对象检索成本
  • Amazon S3 Glacier 即时检索
    • 毫秒检索,非常适合每季度访问一次的数据
    • 最短储存期限为 90 天
  • Amazon S3 Glacier 灵活检索(以前称为 Amazon S3 Glacier):
    • 加急(1 至 5 分钟)、标准(3 至 5 小时)、批量(5 至 12 小时)- 免费
    • 最短储存期限为 90 天
  • Amazon S3 Glacier Deep Archive — 用于长期存储:
    • 标准(12 小时)、批量(48 小时)
    • 最短存储期限为 180 天

S3 Intelligent Tiering

  • 每月少量的监控和自动分层费用
  • 根据使用情况在访问层之间自动移动对象
  • S3 智能分层中没有检索费用
  • 频繁访问层(自动):默认层
  • 不频繁访问层(自动):30 天未访问的对象
  • 存档即时访问层(自动):90 天内未访问的对象
  • 存档访问层(可选):可配置为 90 天至 700 天以上
  • 深度存档访问层(可选):配置。 从 180 天到 700+ 天

S3 Storage Classes 比较
在这里插入图片描述

S3 存储类别 — 价格比较示例:us-east-1
Screenshot 2023-07-10 at 00.58.41.png

Advanced S3

Amazon S3 — Storage Classes 间的转换

  • 用户可以在存储类别之间转换对象
  • 对于不经常访问的对象,将其移至标准 IA
  • 对于不需要快速访问的存档对象,将其移至 Glacier 或 Glacier Deep Archive
  • 可以使用生命周期规则自动转移对象

Screenshot 2023-07-10 at 00.59.24.png

Amazon S3 — Lifecycle Rules

  • 转换操作 — 配置对象以转换到另一个存储类别
    • 创建后 60 天将对象移至标准 IA 类
    • 6 个月后移至 Glacier 进行存档
  • 过期操作 — 配置对象在一段时间后过期(删除)
    • 访问日志文件可以设置为在 365 天后删除
    • 可用于删除旧版本的文件(如果启用了版本控制)
    • 可用于删除不完整的分段上传
  • 可以为特定前缀创建规则(例如:s3://mybucket/mp3/*)
  • 可以为某些对象标签创建规则(例如:部门:财务)

Amazon S3 — 生命周期规则(场景 1)

  • 您在 EC2 上的应用程序会在将个人资料照片上传到 Amazon S3 后创建图像缩略图。这些缩略图可以轻松重新创建,并且只需要保留 60 天。源图像应该能够在这 60 天内立即检索,并且 此后,用户最多可以等待 6 小时。 你会如何设计这个?
  • S3 源映像可以采用标准,并通过生命周期配置在 60 天后将其转换到 Glacier
  • S3 缩略图可以位于 One-Zone IA 上,生命周期配置可使其在 60 天后过期(删除)

Amazon S3 — 生命周期规则(场景 2)

  • 您公司的一条规则规定,您应该能够在 30 天内立即恢复已删除的 S3 对象,尽管这种情况很少发生。 在此时间之后,最多 365 天内,已删除的对象应该可以在 48 小时内恢复。
  • 启用 S3 版本控制以获得对象版本,以便“已删除的对象”实际上被“删除标记”隐藏并可以恢复
  • 将对象的“非当前版本”转换为标准 IA
  • 随后将“非当前版本”转换为 Glacier Deep Archive

Amazon S3 Analytics — Storage Class Analysis

  • 帮助用户决定何时将对象转换到正确的存储类别
  • 对标准和标准 IA 的建议
    • 不适用于单区 IA 或 Glacier
  • 报告 每日更新
  • 24 至 48 小时即可开始查看数据分析
  • 整合生命周期规则(或改进它们)的良好第一步!

Screenshot 2023-07-10 at 01.00.06.png

S3 — Requester Pays

  • 一般来说,存储桶所有者支付与其存储桶相关的所有 Amazon S3 存储和数据传输成本
  • 通过请求者支付存储桶,请求者(而不是存储桶所有者)支付请求费用以及从存储桶下载数据的费用
  • 当用户想要与其他帐户共享大型数据集时很有帮助
  • 请求者必须在 AWS 中经过身份验证(不能匿名)

Screenshot 2023-07-10 at 01.00.27.png

S3 Event Notifications

  • S3:对象创建、S3:对象删除、S3:对象恢复、S3:复制…
  • 可进行对象名称过滤 (*.jpg)
  • 使用案例:生成上传到 S3 的图像的缩略图
  • 可以根据需要创建任意数量的“S3 事件”
  • S3 事件通知通常会在几秒钟内传送事件,但有时可能需要一分钟或更长时间

Screenshot 2023-07-10 at 01.00.49.png

使用 Amazon EventBridge 的 S3 事件通知

Screenshot 2023-07-10 at 01.01.20.png

  • 具有 JSON 规则的高级过滤选项(元数据、对象大小、名称…)
  • 多个目标 — 例如 Step Functions、Kinesis Streams/Firehose…
  • EventBridge 功能 — 存档、重播事件、可靠交付

S3 — Baseline Performance 基准性能

  • Amazon S3 自动扩展到高请求率,延迟为 100-200 毫秒
  • 用户应用程序可以实现存储桶中每个前缀每秒至少 3,500 个 PUT/COPY/POST/DELETE 或 5,500 个 GET/HEAD 请求。
  • 存储桶中的前缀数量没有限制。
  • 示例(对象路径 => 前缀):
    • bucket/folder1/sub1/file => /folder1/sub1/
    • bucket/folder1/sub2/file => /folder1/sub2/
    • bucket/1/file => /1/
    • bucket/2/file => /2/
  • 如果将读取均匀分布在所有四个前缀上,则每秒可以实现 22,000 个 GET 和 HEAD 请求

S3 Performance

  • Multi-Part upload:
    • 建议用于 > 100MB 的文件,必须用于 > 5GB 的文件
    • 可以帮助并行上传(加快传输速度)
    • Screenshot 2023-07-10 at 01.01.47.png
  • S3 Transfer Acceleration
    • 通过将文件传输到 AWS 边缘站点来提高传输速度,该站点会将数据转发到目标区域中的 S3 存储桶
    • 兼容分段上传
    • Screenshot 2023-07-10 at 01.02.15.png

S3 Performance — S3 Byte-Range Fetches

  • 通过请求特定字节范围来并行化 GET
  • 发生故障时具有更好的恢复能力

Screenshot 2023-07-10 at 01.02.47.png
可用于加快下载速度
Screenshot 2023-07-10 at 01.03.43.png
可用于仅检索部分数据(例如文件头)

S3 Select 和 Glacier Select

  • 通过执行服务器端过滤,使用 SQL 检索更少的数据
  • 可以按行和列进行过滤(简单的 SQL 语句)
  • 网络传输更少,客户端 CPU 成本更低

Screenshot 2023-07-10 at 01.05.48.png

S3 批量操作

  • 通过单个请求对现有 S3 对象执行批量操作,例如:
    • 修改对象元数据和属性
    • 在 S3 存储桶之间复制对象
    • 加密未加密的对象
    • 修改 ACL、标签
    • 从 S3 Glacier 恢复对象
    • 调用 Lambda 函数以执行自定义操作
  • 作业由对象列表、要执行的操作和可选参数组成
  • S3 批量操作管理重试、跟踪进度、发送完成通知、生成报告…
  • 您可以使用 S3 Inventory 获取对象列表并使用 S3 Select 过滤对象

Screenshot 2023-07-10 at 01.06.15.png

Amazon S3 安全

Amazon S3 — 对象加密

  • 您可以使用 4 种方法之一加密 S3 存储桶中的对象
  • 服务器端加密 (SSE)
    • 使用 Amazon S3 托管密钥的服务器端加密 (SSE-S3) — 默认启用
      • 使用 AWS 处理、管理和拥有的密钥加密 S3 对象
    • 使用存储在 AWS KMS 中的 KMS 密钥进行服务器端加密 (SSE-KMS)
      • 利用AWSKey Management Service (AWSKMS) 管理加密密钥
    • 使用客户提供的密钥进行服务器端加密 (SSE-C)
      • 当您想要管理自己的加密密钥时
  • 客户端加密
  • 重要的是要了解哪些内容适用于哪种考试情况

Amazon S3 加密 — SSE-S3

  • 使用由 AWS 处理、管理和拥有的密钥进行加密
  • 对象在服务器端加密
  • 加密类型为 AES-256
  • 必须设置标头“x-amz-server-side-encryption”:“AES256”
  • 默认情况下为新存储桶和新对象启用

Screenshot 2023-07-10 at 01.06.39.png

Amazon S3 加密 — SSE-KMS

  • 使用由 AWS KMS(密钥管理服务)处理和管理的密钥进行加密
  • KMS 优势:用户控制 + 使用 CloudTrail 审核密钥使用情况
  • 对象在服务器端加密
  • 必须设置标头“x-amz-server-side-encryption”:“aws:kms”

Screenshot 2023-07-10 at 01.07.01.png

SSE-KMS Limitation

  • 如果使用 SSE-KMS,用户可能会受到 KMS 限制的影响
  • 当上传时,它会调用 GenerateDataKey KMS API
  • 当您下载时,它会调用解密 KMS API
  • 计入每秒 KMS 配额(根据区域为 5500、10000、30000 请求/秒)
  • 可以使用服务配额控制台请求增加配额

Screenshot 2023-07-10 at 01.07.14.png

Amazon S3 加密 — SSE-C

  • 使用完全由客户在 AWS 外部管理的密钥进行服务器端加密
  • Amazon S3 不存储您提供的加密密钥
  • 必须使用 HTTPS
  • 对于发出的每个 HTTP 请求,必须在 HTTP 标头中提供加密密钥

Screenshot 2023-07-10 at 01.07.43.png

Amazon S3 加密 — Client-Side Encryption

  • 使用客户端库,例如 Amazon S3 客户端加密库
  • 客户端在发送到 Amazon S3 之前必须自行加密数据
  • 从 Amazon S3 检索数据时,客户端必须自行解密数据
  • 客户完全管理密钥和加密周期

Screenshot 2023-07-10 at 01.07.57.png

Amazon S3 — Encryption in transit (SSL/TLS)

  • 传输中加密也称为 SSL/TLS
  • Amazon S3 公开两个终端节点:
    • HTTP 端点 — 未加密
    • HTTPS 端点 — 动态加密
  • 建议使用HTTPS
  • HTTPS 对于SSE-C 是强制的
  • 大多数客户端默认使用 HTTPS 端点

Amazon S3 — Default Encryption vs. Bucket Policies

  • SSE-S3 加密自动应用于 S3 存储桶中存储的新对象
  • 您可以选择使用存储桶策略“强制加密”,并拒绝任何 API 调用来 PUT 没有加密标头的 S3 对象(SSE-KMS 或 SSE-C)
  • 注意:存储桶策略在“默认加密”之前评估

Screenshot 2023-07-10 at 01.08.31.png

什么是 CORS?

  • 跨源资源共享 (CORS)
  • 来源 = 方案(协议)+ 主机(域)+ 端口
    • 示例:https://www.example.com(HTTPS 的隐含端口为 443,HTTP 的隐含端口为 80)
  • 基于 Web 浏览器的机制,允许在访问主源时向其他源发出请求
  • 同源:http://example.com/app1http://example.com/app2
  • 不同来源:http://www.example.com & http://other.example.com
  • 除非其他源使用 CORS 标头允许请求(例如:Access-Control-Allow-Origin),否则请求不会得到满足

Screenshot 2023-07-10 at 01.09.43.png

Amazon S3 — CORS

  • 如果客户端对我们的 S3 存储桶发出跨域请求,我们需要启用正确的 CORS 标头
  • 这是一个热门考试题
  • 您可以允许特定来源或*(所有来源)

Screenshot 2023-07-10 at 01.10.10.png

Amazon S3 — MFA Delete

  • MFA(多重身份验证)– 强制用户在 S3 上执行重要操作之前在设备(通常是移动电话或硬件)上生成代码
  • MFA 将被要求:
    • 永久删除对象版本
    • 暂停存储桶上的版本控制
  • MFA 不需要:
    • 启用版本控制
    • 列出已删除的版本
  • 要使用 MFA 删除,必须在存储桶上启用版本控制
  • 只有存储桶所有者(根账户)才能启用/禁用 MFA 删除

S3 访问日志

  • 出于审计目的,您可能希望记录对 S3 存储桶的所有访问
  • 从任何帐户向 S3 发出的任何请求(无论授权还是拒绝)都将记录到另一个 S3 存储桶中
  • 可以使用数据分析工具来分析该数据…
  • 目标日志记录存储桶必须位于同一AWS 区域
  • 日志格式位于:https://docs.aws.amazon.com/AmazonS3/latest/dev/LogFormat.html

Screenshot 2023-07-10 at 01.10.34.png Screenshot 2023-07-10 at 01.11.18.png

S3 访问日志:警告

  • 不要将您的日志存储桶设置为受监控存储桶
  • 它将创建一个日志循环,您的存储桶将呈指数级增长

Amazon S3 — 预签名 URL

  • 使用S3 控制台、AWS CLI 或开发工具包生成预签名URL
  • URL 过期
  • S3 控制台 — 1 分钟至 720 分钟(12 小时)
  • AWS CLI — 使用–expires-in 参数配置过期时间(以秒为单位)(默认 3600 秒,最长 604800 秒 ~ 168 小时)
  • 获得预签名 URL 的用户将继承生成 GET/PUT URL 的用户的权限
  • 例子:
  • 仅允许登录用户从您的 S3 存储桶下载优质视频
  • 通过动态生成 URL,允许不断变化的用户列表下载文件
  • 暂时允许用户将文件上传到 S3 存储桶中的精确位置
    Screenshot 2023-07-10 at 01.11.57.png |

S3 Glacier Vault Lock

  • 采用WORM(一次写入多次读取)模型
  • 创建保管库锁定策略
  • 锁定策略以供将来编辑(无法再更改或删除)
  • 有助于合规性和数据保留
    Screenshot 2023-07-10 at 01.12.34.png |

S3 Object Lock(必须启用版本控制)

  • 采用WORM(一次写入多次读取)模型
  • 在指定的时间内阻止对象版本删除
  • 保留模式 – 合规性:
    • 任何用户(包括 root 用户)都无法覆盖或删除对象版本
    • 对象保留模式无法更改,保留期限无法缩短
  • 保留模式 – 治理:
    • 大多数用户无法覆盖或删除对象版本或更改其锁定设置
    • 某些用户具有更改保留或删除对象的特殊权限
  • 保留期限:在固定期限内保护对象,可以延长
  • 合法保留:
    • 无限期地保护对象,不受保留期限的影响
    • 可以使用 s3:PutObjectLegalHold IAM 权限自由放置和删除

S3 – Access Points(接入点)

  • 接入点简化了 S3 存储桶的安全管理
  • 每个接入点都有:
    • 自己的 DNS 名称(Internet Origin 或 VPC Origin)
    • 接入点策略(类似于存储桶策略)——大规模管理安全性

Screenshot 2023-07-10 at 01.13.06.png

S3 – 接入点 – VPC Origin

  • 我们可以定义只能从 VPC 内部访问的访问点
  • 您必须创建 VPC 端点才能访问接入点(网关或接口端点)
  • VPC 端点策略必须允许访问目标存储桶和接入点

Screenshot 2023-07-10 at 01.13.38.png

S3 Object Lambda

  • 在调用者应用程序检索对象之前,使用 AWS Lambda 函数更改对象
  • 仅需要一个 S3 存储桶,我们在其上创建 S3 访问点和 S3 对象 Lambda 访问点。
  • 用例:
    • 编辑个人身份信息以用于分析或非生产环境。
    • 跨数据格式转换,例如将 XML 转换为 JSON。
    • 使用特定于调用者的详细信息(例如请求该对象的用户)动态调整图像大小并为其添加水印。

Screenshot 2023-07-10 at 01.14.02.png

原文地址:https://blog.csdn.net/weixin_40815218/article/details/135591326

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。

如若转载,请注明出处:http://www.7code.cn/show_58882.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注