Amazon S3 协议
Amazon S3 协议是一个基于 HTTP 的 RESTful API,旨在与 Amazon Simple Storage Service (S3) 进行交互。它定义了如何存储、检索和管理对象(如文件、图片、视频等),是对象存储领域的事实标准。以下是 Amazon S3 协议的详细介绍:
S3 协议的关键概念
1.Bucket(存储桶)
- 是 S3 中存储对象的容器。
- 每个存储桶在整个 S3 命名空间内具有唯一名称。
- 存储桶的名称需要符合 DNS 规则(例如:my-bucket)。
- 存储桶可以指定区域,以确保靠近用户,减少延迟。
2.Object(对象)
- S3 中存储的基本数据单元。
- 每个对象由以下部分组成:
- Key(键): 对象的唯一标识符(路径)。
- Value(值): 对象的实际数据。
- Metadata(元数据): 描述对象的附加信息(系统元数据和用户元数据)。
3.Region(区域)
- 数据存储的地理位置,例如 us-east-1 或 ap-southeast-2。
- 区域选择影响数据访问的延迟和合规性。
4.Access Control(访问控制)
- 通过存储桶策略、访问控制列表(ACL)或 IAM 策略,定义谁可以访问存储桶和对象。
S3 API 的操作类型
S3 协议支持以下主要操作:
1. Bucket 操作
- 创建存储桶:
- 请求:PUT /{bucket-name}
- 定存储桶名称和区域。
- 列出存储桶:
- 请求:GET /
- 返回当前账户下所有存储桶的列表。
- 删除存储桶:
- 请求:DELETE /{bucket-name}
- 只能删除空存储桶。
2. Object 操作
- 上传对象:
- 请求:PUT /{bucket-name}/{object-key}
- 上传一个文件到指定存储桶。
- 下载对象:
- 请求:GET /{bucket-name}/{object-key}
- 检索对象的数据。
- 删除对象:
- 请求:DELETE /{bucket-name}/{object-key}
- 删除指定对象。
- 列出对象:
- 请求:GET /{bucket-name}?list-type=2
- 列出存储桶中的对象。
3. 元数据操作
- 获取对象元数据:
- 请求:HEAD /{bucket-name}/{object-key}
- 仅返回对象的元数据,而不返回数据本身。
4. 分块上传
- 初始化分块上传:
- 请求:POST /{bucket-name}/{object-key}?uploads
- 创建分块上传的会话。
- 上传分块:
- 请求:PUT /{bucket-name}/{object-key}?partNumber={part-number}&uploadId={upload-id}
- 将大文件分块上传。
- 合并分块:
- 请求:POST /{bucket-name}/{object-key}?uploadId={upload-id}
- 将所有分块合并为完整对象。
S3 REST API 的结构
S3 API 是基于 REST 的,主要使用以下 HTTP 方法:
- GET:检索数据。
- PUT:上传数据。
- POST:处理特殊操作(如分块上传)。
- DELETE:删除资源。
- HEAD:获取资源的元数据。
请求结构:
HTTP METHOD /{bucket-name}/{object-key} Host: {bucket-name}.s3.{region}.amazonaws.com Headers: Authorization: AWS4-HMAC-SHA256 Credential=... Content-Type: application/json Date: <current-timestamp> Body: <optional>
S3 协议的安全性
1.认证
- 使用 AWS 签名版本 4(AWS Signature Version 4)对每个请求进行身份验证。
- 需要提供 Access Key ID 和 Secret Access Key。
2.访问控制
- Bucket Policies: 用于定义整个存储桶的访问权限。
- Access Control Lists (ACLs): 为存储桶和对象分配特定权限。
- IAM Policies: 使用 AWS Identity and Access Management (IAM) 定义访问规则。
3.加密
- 静态数据加密:使用 AWS KMS 密钥或自定义密钥加密存储的数据。
- 传输中数据加密:默认通过 HTTPS 保护数据传输。
扩展特性
1.版本控制
- 开启后,S3 会为每次上传的对象创建新版本,保留历史数据。
2.生命周期规则
- 自动管理存储对象的生命周期(例如:将数据迁移到 Glacier、删除旧版本)。
3.事件通知
- 可以将事件(如对象创建、删除)通知到 AWS Lambda、SNS 或 SQS。
4.跨区域复制(CRR)
- 将数据自动同步到另一个区域的存储桶。
5.存储类
- 供不同的存储类型(如标准存储、智能分层、归档存储),优化成本与性能。