Amazon S3 提供了一个简单的 Web 服务接口,可随时在 Web 上的任何位置存储和检索任何数量的数据。同时提供了丰富的 SDK,支持 Java、Python、Ruby 和 PHP 等多种程序开发语言;
特性特征
安全与访问管理:S3 可以针对每个对象存储桶或者对象设置独立的访问控制策略,可以允许某些 S3 或者访问,或者全部对外开放等。另外,S3 还支持对对象的限时访问,提供一个仅在规定时间内有效的 URL;
支持各种语言的 SDK 进行编程访问:亚马逊提供的 SDK 支持 C++、C#、Java、PHP、Python 和 Ruby 等常见的语言,使应用的开发能够更加灵活简单;
多元化使用 S3 服务:现在可以通过 3 种方式使用 S3 服务。通过 S3 SDK 编程访问。通过 REST API 进行访问。通过命令行 CLI 进行访问;
存储对象的版本控制:对于 S3 存储桶中的每个对象,可以使用版本控制功能来保存各个版本,可以用于数据恢复
概念术语
AccessKey、SecretKey
使用 S3 需要 S3 颁发的 AccessKey(长度为 20 个字符的 ASCII 字符串)和 SecretKey(长度为 40 个字符的 ASCII 字符串)。AccessKey 用于标识客户的身份,SecretKey 作为私钥形式存放于客户服务器,不在网络中传递。SecretKey 通常用作计算请求签名的密钥,用以保证该请求是来自指定的客户的。使用 AccessKey 进行身份识别,加上 SecretKey 进行数字签名,即可完成应用接入与认证授权;
Region(区域)
创建 Bucket 时需要选择 Region,Region 一般用于标识资源存储的物理位置,比如中国区、欧洲区等;
Region 的外网域名
比如 s3.cn.ceph.work,表示中国区的 S3 服务对外接入地址;
Service(服务)
S3 提供给用户的虚拟存储空间,在这个虚拟空间中,每个用户可拥有一个到多个 Bucket;
Bucket(存储空间)
Bucket 是存放 Object 的容器,所有的 Object 都必须存放在特定的 Bucket 中。在 RGW 中默认每个用户最多可以创建 1000 个 Bucket,每个 Bucket 中可以存放无限多个 Object。Bucket 不能嵌套,每个 Bucket 中只能存放 Object,不能再存放 Bucket,Bucket 下的 Object 是一个平级的结构。Bucket 的名称全局唯一且命名规则与 DNS 命名规则相同;
关于 Bucket 的命名规范如下:
1)仅包含小写英文字母(a~z)、数字(0~9)、中线(–),即:abcdefghijklmnopqrstuvwxyz0123456789-;
2)必须由字母或数字开头;
3)长度在 3~255 个字符之间;
Object(对象,文件)
在 S3 中,用户操作的基本数据单元是 Object。单个 Object 允许存储 0~5TB 的数据。Object 包含 key 和 data;
其中,key 是 Object 的名字;data 是 Object 的数据。key 为 UTF-8 编码,且编码后的长度不得超过 1024 个字节;
Key(文件名)
即 Object 的名字,key 为 UTF-8 编码,且编码后的长度不得超过 1024 个字节。Key 中可以带有斜杠,当 Key 中带有斜杠的时候,将会自动在控制台里组织成目录结构;
ACL(访问控制权限)
对 Bucket 和 Object 相关访问的控制策略,例如允许匿名用户公开访问等。目前 ACL 支持 READ、WRITE、FULL_CONTROL 三种权限。对于 Bucket 的拥有者,总是 FULL_CONTROL。可以授予所有用户(包括匿名用户)或指定用户 READ、WRITE 或者 FULL_CONTROL 权限;
目前提供了 3 种预设的 ACL,分别是 private、public-read 和 public-read-write;
·private 表示只有 owner 有 READ 和 WRITE 的权限;
·public-read 表示为所有用户授予 READ 的权限;
·public-read-write 表示为所有用户授予 WRITE 权限;
对于 BUCKET 来说,READ 是指能够罗列 Bucket 中的 Object、已经上传的分段。WRITE 是指可以上传或者删除 BUCKET 中 Object。FULL_CONTROL 则包含前面提到的针对 Bucket 的 READ 和 WRITE 两种操作。对于 Object 来说,READ 是指能够查看或者下载对应的 Object。WRITE 是指可以写入、覆盖或删除 Object。FULL_CONTROL 则包含前面提到的针对 Object 的 READ 和 WRITE 两种操作;
Bucket 访问控制权限
S3 提供 Bucket 级别的权限访问控制(ACL),Bucket 目前有以下 3 种访问权限:public-read-write、public-read 和 private,它们的含义如下;
public-read-write:任何人(包括匿名访问)都可以对该 Bucket 中的 Object 进行 PUT、Get 和 Delete 操作;
public-read:任何人(包括匿名访问)只能对该 Bucket 中的 Object 进行读操作,而不能进行写操作。注意,对 Bucket 有读操作不表示对 Object 有读操作;
private:只有该 Bucket 的创建者才可以对该 Bucket 及 Bucket 中的 Object 进行读写操作;
Obejct 访问控制权限
S3 提供 Bucket 级别的权限访问控制(ACL),Object 目前有以下 2 种访问权限:public-read 和 private,它们的含义如下;
public-read:任何人(包括匿名访问)都可以对该 Object 进行读操作(即下载);
private:只有 Object 的拥有者可以对该 Object 进行操作;