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}
  • 将大文件分块上传。
  • 合并分块:
  1. 请求:POST /{bucket-name}/{object-key}?uploadId={upload-id}
  2. 将所有分块合并为完整对象。

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.存储类

  • 供不同的存储类型(如标准存储、智能分层、归档存储),优化成本与性能。
全部评论
对象存储基础
点赞 回复 分享
发布于 01-16 23:25 陕西

相关推荐

06-27 12:54
已编辑
门头沟学院 Java
累了,讲讲我的大学经历吧,目前在家待业。我是一个二本院校软件工程专业。最开始选专业是觉得计算机感兴趣,所以选择了他。本人学习计算机是从大二暑假结束开始的,也就是大三开始。当时每天学习,我个人认为Java以及是我生活的一部分了,就这样持续学习了一年半,来到了大四上学期末,大概是在12月中旬,我终于找的到了一家上海中厂的实习,但我发现实习生的工作很枯燥,公司分配的活也不多,大多时间也是自己在自学。就这样我秋招末才找到实习。时间来到了3月中旬,公司说我可以转正,但是转正工资只有7000,不过很稳定,不加班,双休,因为要回学校参加答辩了,同时当时也是心高气傲,认为可以找到更好的,所以放弃了转正机会,回学校准备论文。准备论文期间就也没有投递简历。然后时间来到了5月中旬,这时春招基本也结束了,然后我开始投递简历,期间只是约到了几家下场面试。工资也只有6-7k,到现在我不知道该怎么办了。已经没有当初学习的心劲了,好累呀,但是又不知道该干什么去。在家就是打游戏,boss简历投一投。每天日重一次。26秋招都说是针对26届的人,25怎么办。我好绝望。要不要参加考公、考研、央国企这些的。有没有大佬可以帮帮我。为什么感觉别人找工作都是顺其自然的事情,我感觉自己每一步都在艰难追赶。八股文背了又忘背了又忘,我每次都花很长时间去理解他,可是现在感觉八股、项目都忘完了。真的已经没有力气再去学习了。图片是我的简历,有没有大哥可以指正一下,或者说我应该走哪条路,有点不想在找工作了。
码客明:太累了就休息一下兄弟,人生不会完蛋的
如果实习可以转正,你会不...
点赞 评论 收藏
分享
程序员小白条:你是沟通了900个,不是投了900份简历,你能投900份,意味着对面都要回复你900次,你早就找到实习了,没亮点就是这样的,别局限地区,时间投的也要早,现在都要7月了
点赞 评论 收藏
分享
评论
2
2
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务