存储与数据库-storage and database**
S3
Simple Storage Service
- S3是AWS提供的对象存储服务,适用于存储和检索任意类型的数据,如文件、图像、视频等。
- S3是高度可扩展、耐用、安全的存储解决方案。
S3 存储桶(Bucket):
- 存储桶的名称在整个AWS中必须是全局唯一的。
- Amazon S3 允许用户将object(文件)存储在“bucket”(目录)中。
- 存储桶必须有一个全局唯一的名称。
- Buckets are defined at the region level存储桶在区域级别上定义。
- 不使用大写字母
- 不使用下划线
- 长度为3-63个字符
- 不是IP地址
- 必须以小写字母或数字开头。
S3 对象(Object):
可以是任意类型的数据,例如文本文件、图像、视频、数据库备份等。
在S3中,对象由以下三个主要组成部分构成:
- 键(Key):
- 键是对象的唯一标识符,用于在S3存储桶中唯一标识对象。
- Key并不是完整路径,而是相对于存储桶的路径或文件名。
- 值(Value):
- 对象值是主体内容
- 值是实际的数据内容,也就是存储在对象中的实际数据。
- 值可以是任何字节流,允许存储各种类型的文件和数据。
- 元数据(Metadata):
- 元数据是关于对象的一组键值对信息,用于描述对象的属性和其他相关信息。
- 元数据可以包含诸如对象的创建日期、文件类型、大小、所有者等信息。
storage class 存储类别
S3 Standard(default) | 标准存储 | 适用于频繁访问的数据大数据分析,移动应用,游戏 |
S3 Intelligent-Tiering | 智能分层—数据根据访问模式分层存储 | 自动优化存储费用和性能;不确定访问频率的数据, 成本敏感型应用 |
S3 Standard-IA | infrequent access | **访问频率较低,但即时访问的数据。**灾难恢复,备份 |
S3 One Zone-IA | S3-One zone not suitable for business critical data不适合关键性数据 | 可重新创建的、不经常访问的数据(每月一次),存储在单个可用区中,访问时间为毫秒……………与 S3 Standard-IA相比具有更低的存储成本 |
Glacier Instant Retrieval | Glacier 即时检索,数据不可更新 | 适用于需要即时访问的归档数据; |
Glacier Flexible Retrieval | Glacier 灵活检索,数据不可更新 | 适用于很少访问且不需要即时访问的长期数据; |
S3 Glacier Deep Archive | Glacier 深度存档, | long-term:适用于以最低的云存储成本进行长期归档和数字保存。 |
Amazon S3 还提供了在整个数据生命周期内管理数据的功能。设置 S3 生命周期策略之后,无需更改您的应用程序,您的数据将自动传输到其他存储类。
- 任何存储类别到S3 Standard。
- 任何存储类别到冗余存储(RRS)类别。
- S3 Intelligent-Tiering存储类别到S3 Standard-IA。
S3 One Zone-IA存储类别到S3 Intelligent-Tiering,S3 Standard-IA或S3 Glacier即时检索存储类别。
moving between storage classes
moving objects can be automated using a lifecycle configuration
Storage Class Analysis
- 您可以设置S3分析以帮助确定何时将对象从标准转换为Standard_IA。
- 不适用于ONEZONE_IA或GLACIER。
- 报告每天更新。
- 首次启动需要约24小时至48小时。
- 组合生命周期规则(或改进生命周期规则)的好第一步!
数据管理
:对象版本控制、生命周期配置、跨区域复制、数据传输加速等功能。
S3 Versioning版本控制
启用版本控制后,S3将为每个存储在存储桶中的对象创建不同的版本,而不是覆盖之前的版本。
- 可在bucket级别启用
- 可恢复特定版本以及轻松回滚
- 默认版本 ID 为“null”
- suspending versionsing does not delete the previous versions
S3 Lifecycle Rules生命周期
- Transition actions::它定义了对象何时转换为另一个存储类别。
- 创建后60天将对象移动到标准IA类别。
- 6个月后将对象移动到Glacier进行归档。
- Expiration actions:配置对象在一定时间后过期(删除)
- 访问日志文件可以设置为在365天后删除。
- 可用于删除旧文件版本(如果启用了版本控制)
- 可用于删除未完成的多部分上传。
- 可以为某个前缀prefix创建规则(例如 - s3://mybucket/mp3/*)
- 可以为某些objects tags创建规则(例如 - Department: Finance)
对象锁定-保护对象免受删除和更改
- 合规模式(Compliance Mode):
- 合规模式是 Amazon S3 中的一种对象锁定模式,用于确保对象在指定的锁定期间内不被删除或更改。
- 在合规模式下,对象一旦被锁定,即使具有管理权限的用户(包括 root 用户)也无法删除或更改对象,直到锁定期结束。
- 合规模式适用于需要满足法规和合规性要求,确保数据不被篡改或删除的场景。
- 治理模式(Governance Mode):
- 治理模式也是 Amazon S3 中的一种对象锁定模式,用于在指定的锁定期间内保护对象免受删除和更改。
- 在治理模式下,具有管理权限的用户(如 root 用户)可以申请对对象进行更改或删除,但需要提前指定锁定结束的日期和时间。
- 治理模式适用于需要保护数据免受误删除或更改的场景,但允许有一定管理权限的用户提前申请解锁。
S3 Replication (CRR & SRR)复制
-
Must enable versioning in source and destination
-
跨区域复制Cross Region Replication (CRR)
-
同一区域复制Same Region Replication (SRR)
-
复制是asynchronous异步的
-
存储桶可以位于不同的账户中
-
必须为S3授予适当的IAM权限
-
CRR - 使用场景:合规性,更低的延迟访问,跨账户复制
-
SRR - 使用场景:log aggregation日志聚合,live replication between production and test accounts生产和测试账户之间的实时复制
注意事项
-
激活后,只有新对象会被复制(不会追溯复制旧对象)
-
对于删除操作:
- 可以从源复制到目标删除maker(可选设置)
- 具有版本 ID 的删除不会被复制(以避免恶意删除)
-
复制不传递
- 如果 bucket 1 复制到 bucket 2,bucket 2 复制到 bucket 3, 那么在 bucket 1 中创建的对象不会被复制到 bucket 3
S3 Transfer Acceleration 数据传输加速
- 通过将文件传输到AWS边缘位置,增加传输速度,该位置将数据转发到目标区域的S3存储桶
- 兼容多部分上传Compatible with multi-part upload
S3 – Baseline Performance基准性能
- Amazon S3可以自动扩展到高请求率,延迟为100-200毫秒。
- 您的应用程序每个存储桶前缀每秒可以实现至少3,500个PUT/COPY/POST/DELETE和5,500个GET/HEAD请求。
S3 Performance
-
Multi-Part upload:
-
推荐用于大于100MB的文件,对于大于5GB的文件必须使用
-
可以并行上传(加快传输速度)
-
-
S3 Transfer Acceleration
- 通过将文件传输到AWS边缘位置,增加传输速度,该位置将数据转发到目标区域的S3存储桶
- 兼容多部分上传Compatible with multi-part upload
S3 Select & Glacier Select
- 使用简单的SQL进行服务器端过滤,以检索较少的数据
- 可以按行和列进行过滤
- 较少的网络传输和客户端的CPU成本
- Use Case:
- 适用于需要从大型对象中仅提取特定数据的情况,例如从CSV或JSON文件中提取特定字段的值,而不需要下载整个对象。
- Glacier Select则用于从S3 Glacier存储中检索特定数据,这样可以避免将整个归档文件恢复到S3中,从而节省时间和费用。
S3 Batch Operations批量操作
- 通过单个请求对现有S3对象执行批量操作
- 一个作业包括一个对象列表,要执行的操作和可选参数
- S3批量操作管理重试,跟踪进度,发送完成通知并生成报告
- 步骤:
- 使用S3清单获取对象列表
- 使用S3 Select过滤对象
- 使用S3批量操作处理对象
S3 Byte-range Fetches字节范围获取
- 通过请求特定的字节范围并行化GET操作
- 使用场景:加快下载速度或只需要部分数据(例如文件头)
- Use Case: S3 Byte-range Fetches适用于需要仅获取对象的一部分内容的情况,例如音频或视频文件的部分播放、分块下载大文件或断点续传等。通过指定字节范围,客户端可以仅下载所需的部分数据,而不需要下载整个对象,从而提高效率和性能。
安全性security
Encryption for Objects-加密(服务器端加密、客户端加密)
-
服务器端加密(Server-Side Encryption,SSE):
S3 管理加密密钥(SSE-S3 或 SSE-KMS)
SSE-S3
- Object is encrypted server side
- AES-256 encryption type
- Must set header: “x-amz-server-side-encryption”: “AES256”
SSE-KMS
加密密钥由 AWS Key Management Service (KMS) 管理。
- KMS Advantages: user control + audit trail
- Object is encrypted server side
- Must set header: “x-amz-server-side-encryption”: “aws:kms”
-
客户管理加密密钥(SSE-C):
- SSE-C(Server-Side Encryption with Customer-Provided Keys)
- Amazon S3 不会存储您提供的加密密钥
- HTTPS must be used
- Encryption key must provided in HTTP headers, for every HTTP request made
- 允许客户使用自己管理的加密密钥对数据进行加密。客户在上传对象时必须提供加密密钥,并在后续下载时提供正确的密钥来解密数据。
-
客户端加密Client Side Encryption:
- 客户端必须在发送到S3之前自行加密数据
- 客户端必须在从S3检索数据时自行解密数据
- 客户完全管理密钥和加密周期
-
encryption in transit(SSL/TSL):
- 使用 SSL/TLS 加密协议保护数据在传输过程中的安全性。
- 数据在从客户端上传到 S3 或从 S3 下载到客户端的过程中会被加密,防止中间人攻击或窃听。
访问控制(IAM、桶策略、ACLs)
-
Bucket Policy-S3存储桶策略
基于JSON的策略
- 资源:buckets and objects
- 效果:Allow / Deny
- 操作:允许或拒绝的API集合
- 主体:要应用策略的帐户或用户
- 应用场景
- 授予公共访问桶
- 强制上传的对象进行加密
- 授予另一个帐户访问权限(跨帐户访问必须使用存储桶策略)
-
使用IAM策略进行访问控制
- 基于用户
- IAM策略,控制特定用户从IAM可以允许哪些API调用
- 基于用户
-
使用预签名URL(Pre-Signed URL)授予临时访问权限
- Can generate pre-signed URLs using SDK or CLI
- For downloads (easy, can use the CLI)
- For uploads (harder, must use the SDK)
- Valid for a default of 3600 seconds, can change timeout with --expires-in [TIME_BY_SECONDS] argument
- Users given a pre-signed URL inherit the permissions of the person who generated the URL for GET / PUT
- 可以使用SDK或CLI生成预签名URL
- 对于下载(容易,可以使用CLI)
- 对于上传(更难,必须使用SDK)
- 默认有效期为3600秒,可以使用–expires-in [TIME_BY_SECONDS]参数更改超时时间
- 获得预签名URL的用户继承生成URL的人的GET / PUT权限
- Can generate pre-signed URLs using SDK or CLI
-
bucket setting for block public access
在AWS S3(Simple Storage Service)中,“Block Public Access”(阻止公共访问)是一组设置,用于确保您的S3存储桶及其内容不会被未经授权的公众访问。这些设置旨在增加您数据的安全性,防止因配置错误或意外而导致敏感信息泄露。
Block Public Access有以下四个设置选项:
- Block all public access:
- Block public access to buckets and objects granted through new access control lists (ACLs):
- Block public access to buckets and objects granted through any public bucket or access point policies:
- Block public access to buckets and objects granted through new public bucket or access point policies:
S3 MFA-Delete
- MFA(多因素认证)会强制用户在进行S3上的重要操作之前,在设备上(通常是手机或硬件)生成一个代码。
- 要使用MFA-Delete,请在S3存储桶上启用Versioning。
- 您需要MFA来
- permanently delete an object version
- suspend versioning on the bucket
- 永久删除对象版本
- 暂停存储桶的版本控制
- 您不需要MFA来
- 启用版本控制
- 列出已删除的版本
- 只有桶所有者(root account)可以启用/禁用MFA-Delete
- MFA-Delete目前只能使用CLI启用
- 注意:默认加密之前会评估Bucket策略