开发指南

Size: px
Start display at page:

Download "开发指南"

Transcription

1 对象存储服务 开发指南 文档版本 05 发布日期 华为技术有限公司

2 版权所有 华为技术有限公司 2018 保留一切权利 非经本公司书面许可, 任何单位和个人不得擅自摘抄 复制本文档内容的部分或全部, 并不得以任何形式传播 商标声明 和其他华为商标均为华为技术有限公司的商标 本文档提及的其他所有商标或注册商标, 由各自的所有人拥有 注意 您购买的产品 服务或特性等应受华为公司商业合同和条款的约束, 本文档中描述的全部或部分产品 服务或特性可能不在您的购买或使用范围之内 除非合同另有约定, 华为公司对本文档内容不做任何明示或默示的声明或保证 由于产品版本升级或其他原因, 本文档内容会不定期进行更新 除非另有约定, 本文档仅作为使用指导, 本文档中的所有陈述 信息和建议不构成任何明示或暗示的担保 文档版本 05 ( ) 版权所有 华为技术有限公司 i

3 目录 目录 1 OBS 简介 概述 基本概念 租户 桶 对象 区域和域名访问 计费方式 REST 接口 对象服务与文件系统对比 功能特性列表 创建请求 获取访问密钥 (AK/SK) 获取访问域名 (EndPoint) 构造请求方法 使用 REST 接口创建请求 使用桶 使用限制 创建桶 删除桶 管理桶配额 管理桶标签 使用对象 对象的基本概念 对象的元数据 上传对象 对象上传简介 PUT 上传对象 POST 上传对象 复制对象 获取对象 删除对象 文档版本 05 ( ) 版权所有 华为技术有限公司 ii

4 目录 4.7 批量删除对象 多段上传 追加写对象 权限控制 权限控制简介 OBS 权限控制模型 使用 ACL ACL 简介 对已经存在的资源设置 ACL 使用头域设置 ACL ACL 两种格式的转换 ACL 应用实例 使用桶策略 (Bucket policy) 桶策略简介 Policy 格式 桶策略实例 防盗链设置 IAM 用户策略 权限控制实例 数据传输 数据保护 桶多版本控制 数据存储类型 存储类型介绍 桶的存储类型 对象的存储类型 对象生命周期管理 生命周期管理简介 一般注意事项 生命周期配置元素 生命周期配置的示例 设置生命周期配置 静态网站托管 托管静态网站原理 设置静态网站托管 FLASH 跨域访问配置 跨区域复制 消息通知 桶日志管理 文档版本 05 ( ) 版权所有 华为技术有限公司 iii

5 目录 14 监控 相关概念 查看 OBS 监控指标 操作方法与步骤 查看监控指标整体概览页 查看各监控指标详细数据曲线 常见操作 常见问题定位 修订记录 文档版本 05 ( ) 版权所有 华为技术有限公司 iv

6 1 OBS 简介 1 OBS 简介 1.1 概述 1.2 基本概念 1.3 对象服务与文件系统对比 1.4 功能特性列表 1.1 概述 对象存储服务 (OBS) 提供稳定 安全 高效 易用的云存储服务, 具备标准 Restful API 接口, 可存储任意数量和形式的非结构化数据 稳定 安全 通过多级可靠性架构, 保障数据持久性和业务连续性 OBS 通过可信云认证, 支持服务端加密 防盗链 日志审计 细粒度权限控制, 保障数据安全可信 高效 易用 OBS 通过智能调度, 为用户提供高并发 大带宽 稳定低时延的数据访问体验 OBS 支持 REST API, 兼容主流的客户端工具, 您可以随时随地通过网络上传 下载 管理您的数据 说明 本文档所提到的所有接口, 当前已在华东 华南和华北区域支持 1.2 基本概念 租户 访问对象存储服务 (OBS) 的前提是需要有公有云服务租户, 并且开通 OBS 服务, 获取访问秘钥, 详情参照 2.1 获取访问密钥 (AK/SK) 租户是桶和对象的拥有者, 即使租户下的用户创建的桶或者对象, 其拥有者也是租户 租户也是费用承载的主体 文档版本 05 ( ) 版权所有 华为技术有限公司 1

7 1 OBS 简介 单个租户最多可以创建 100 个桶, 即使桶创建在不同的区域上, 租户和桶的关系可参考权限控制模型 桶都归属于创建租户, 即使开放权限给其他租户使用, 收费都是在创建租户 在调用接口的时候, 部分 XML 中需要填入租户 ID( 由于 token 中租户 ID 使用的是 domain, 因此本文中租户 id domain ID 账户 ID 含义一样 ), 所以需要先在管理控制台上获取到自己的租户 ID 租户 ID 获取步骤如下 : 1. 注册并登录管理控制台 2. 单击用户名, 在下拉列表中单击 基本信息 3. 在基本信息页面单击 管理我的凭证 在 我的凭证 页面中可以看到账户 ID 图 1-1 我的凭证 桶 桶与对象 桶是对象存储服务 (OBS) 中的顶层数据结构, 是用于存储对象的容器, 而同时对象也必须属于某个桶 单桶内的对象个数是没有限制的 对象在桶内没有类似文件系统中目录的层级结构, 都是扁平化的 您在 OBS 管理控制台看到的类似于目录的结构, 是通过对象名的取名规则进行的模拟, 并不是真的存在这种目录结构 桶与租户 桶名是全局唯一的, 即使不同的区域和不同的租户, 也不能创建相同的桶名, 而同时一个桶只能被一个租户拥有, 默认属于桶的创建租户 桶与区域 桶归属于某个区域, 这个区域是您在创桶时选定的, 桶一旦创建, 其归属区域信息不能改变, 关于创桶操作, 请参照 3.2 创建桶 桶特性 您可以修改桶的属性来控制桶的访问权限, 对象的生命周期, 对象的多版本开关等 桶的命名 桶的命名规则请参照 3.1 使用限制 对象 对象是对象存储服务 (OBS) 中最基本的实体 在一个桶中可以存放多个对象, 它可能是一个文本文件或者一个视频文件 对象包含数据和元数据, 元数据是用来描述数 文档版本 05 ( ) 版权所有 华为技术有限公司 2

8 1 OBS 简介 区域和域名访问 据信息 元数据中会存放以下系统的信息 : 对象创建时间, 对象大小等, 还可以存放用户设置的信息 另外只要用户能够访问对象的数据, 就有访问元数据权限 上传对象时对象最大为 5GB, 超过 5GB 对象需要使用多段上传 对象存储服务 (OBS) 支持的数据大小范围可以是 0B 到 48.8TB 针对对象的操作参考 4 使用对象 对象的命名规则参考 4.2 对象的元数据 1. 区域和域名访问基本概念 区域和域名访问涉及到区域域名等概念, 相关基本概念见下表 表 1-1 基本概念表 基本概念 区域域名 桶的 endpoi nt 样例 obs.cn-east-2.myhuaweicloud.com, obs.cn-south-1.myhuaweicloud.com, obs.cn-north-1.myhuaweicloud.com bucketname.regiondomain.com 例如桶 examplebucket 在 cn-east-2, 则可以使用以下域名来访问桶 : examplebucket.obs.cneast-2.myhuaweicloud.com 说明 OBS 桶及桶中对象只会存放到一个具体的区域, 创桶时指定桶所在区域, 各区域有自己的区域域名, 并能通过区域域名访问本区域的桶及桶中对象 桶创建成功后, 可以使用区域域名来访问桶 有关 OBS 区域和终端节点的更多信息, 请参考地区和终端节点 2. 区域域名请求说明 由于每个区域只有自己区域的桶信息, 因此使用区域域名只能访问本区域的桶 如果使用区域域名和桶所在区域不匹配会提示桶不存在 例如桶 mybucket 在 cneast-2, 但使用 cn-south-1 的区域域名 mybucket.obs.cn-south-1.myhuaweicloud.com 访问桶, 则会收到 http 状态码 404, 提示桶不存在 区域域名和桶所在区域匹配场景下的消息样式示例 : 请求消息样式 : GET / HTTP/1.1 Host: mybucket.obs.cn-east-2.myhuaweicloud.com Accept: */* Date: Thu, 10 Mar :51:25 GMT Authorization: authorization 响应消息样式 : HTTP/ OK x-obs-request-id: 0001EF710C DA465E4E6G x-obs-id-2: Rdj0zZvRkihRcjcQUqjkDGt8JuAgi2CGuLiP7Pv/cYYplsS0xTFJQHP5vSg5yOYC Content-Type: application/xml Date: Thu, 10 Mar :58:12 GMT x-obs-bucket-location: cn-east-2 Content-Length: 259 文档版本 05 ( ) 版权所有 华为技术有限公司 3

9 1 OBS 简介 <?xml version="1.0" encoding="utf-8" standalone="yes"?> <ListBucketResult xmlns=" <Name>mybucket</Name> <Prefix/> <Marker/> <MaxKeys>1000</MaxKeys> <IsTruncated>false</IsTruncated> </ListBucketResult> 区域域名和桶所在区域不匹配场景下的消息样式示例 : 请求消息样式 : GET / HTTP/1.1 Host: mybucket.obs.cn-south-1.myhuaweicloud.com Accept: */* Date: Thu, 10 Mar :51:25 GMT Authorization: authorization 响应消息样式 : HTTP/ NoSuchBucket x-obs-request-id: 0001EF710C DA465E4E6H x-obs-id-2: Rdj0zZvRkihRcjcQUqjkDGt8JuAgi2CGuLiP7Pv/cYYplsS0xTFJQHP5vSg5yOYL Date: Thu, 10 Mar :51:30 GMT Content-Length: 计费方式 REST 接口 对象存储服务提供按需付费 资源套餐包两种计费方式 用户可以根据实际需求变更资源的资费方式 OBS 开通时, 时默认按照按需付费 ( 使用量按小时计费 ), 同时也支持资源套餐包的方式提前购买使用额度, 获取更多的优惠 按需计费会通过存储空间, 请求数量, 上传下载的流量和数据取回等方面进行统计和计费, 根据区域, 存储级别的不同单价也不同 资源套餐包方式也有根据存储空间和流量提供各种级别可供选择 具体参照 : 产品价格详情 需要注意的是, 收费的目标都是资源的所有者, 并且最小粒度是桶, 也就是说一个租户 A 创建了桶, 开放了权限给租户 B, 租户 B 向这个桶上传的对象, 包括流量, 存储空间, 请求数量都会向租户 A 来收费 REST(Representational State Transfer) 的缩写, 即 表现层状态转化 RESTful API 是使用 HTTP 协议并遵循 REST 原则的通信接口 在 RESTful 架构中, 每个 URI(Uniform Resource Identifier) 代表一种资源, 所以网址中不能有动词 网络上的一个资源可以是一段文本 一张图片 一首歌曲 一种服务, 总之就是一个具体存在的资源 RESTful 架构特点如下 : 1. 每一个 URI 代表一种资源 ; 2. 客户端和服务器之间, 传递这种资源的某种表现形式 ; 3. 客户端通过 PUT GET POST DELETE 四个 HTTP 动词, 对服务器端资源进行操作, 实现 表现层状态转化 REST 从资源的角度来观察整个网络, 分布在各处的资源由 URI 确定, 而客户端的应用通过 URL(Unified Resource Locator) 来获取资源 OBS 根据桶和对象及带的资源参数来确定具体的 URL, 当需要进行资源操作时, 可以使用这个 URL 地址 文档版本 05 ( ) 版权所有 华为技术有限公司 4

10 1 OBS 简介 URL 的一般格式为 ( 方括号内为可选项 ): protocol ://hostname[:port] [/bucket] [/object] [?param] 表 1-2 URL 中的参数 参数 描述 是否必 选 protocol hostname port 请求使用的协议类型, 如 HTTP HTTPs HTTPs 表示通过安全的 HTTPs 访问该资源, 对象存储服务支持 HTTP,HTTPs 两种传输协议 请求使用的主机名, 是指存放资源的服务器的域名或 IP 地址 请求使用的端口号 根据软件服务器的部署不同而不 同 缺省时使用默认端口, 各种传输协议都有默认的端 口号, 如 HTTP 的默认端口为 80,HTTPs 的默认端口为 443 OBS 对象存储服务的 http 方式访问端口为 80,HTTPs 方式访问端口为 443 必选 必选 可选 bucket 请求使用的桶资源路径, 在整个系统中唯一标识一个桶 可选 object 请求使用的对象资源路径 可选 param 请求使用的桶和对象的具体资源, 缺省默认为请求桶或对象自身资源 可选 用户向 OBS 发送的请求信息需要遵循 HTTP1.1 协议规范, 同时在请求消息头中还要增加 OBS 定义的签名信息等参数 在 HTTP 协议中,HTTP 请求可以使用多种请求方法例如 GET PUT POST DELETE HEAD 和 OPTIONS, 用于指明以何种方式来访问指定的资源, 对象存储服务所提供的 REST 接口支持的请求方法如表 1-3 所示 表 1-3 对象存储支持的 REST 请求方法 方法 GET PUT POST DELETE HEAD 说明 请求服务器返回指定资源, 如获取桶列表 下载对象等 请求服务器存储指定资源, 如创建桶 上传对象等 请求服务器存储特殊的资源或执行特殊操作, 如初始化上传段任务 合并段等 请求服务器删除指定资源, 如删除对象等 请求服务器返回指定资源的概要, 如获取对象元数据等 OPTIONS 请求服务器检查是否具有某个资源的操作权限, 需要桶配置 CORS 文档版本 05 ( ) 版权所有 华为技术有限公司 5

11 1 OBS 简介 服务器向用户返回的状态码和提示信息, 常见错误码类型如表 1-4 所示 : 表 1-4 对象存储返回码 返回码 2xx 4xx 5xx 说明服务器成功返回用户请求的数据 客户端发出的请求有错误, 服务器没有进行新建或修改数据的操作 服务器发生错误, 用户将无法判断发出的请求是否成功 OBS 的错误详细定义见 对象存储服务 API 参考 1.3 对象服务与文件系统对比 本章节对比对象服务和文件系统各自的特点和适合的场景, 希望对您在选择服务的时候有所帮助 各自特点和适合的场景 文件系统的特点 : a. 符合标准的文件协议, 用户可以将文件系统挂载给服务器, 像使用本地目录一样 ; b. 数据共享, 多台服务器可以挂载相同的文件系统, 数据可以共享操作和访问 ; c. 私有网络, 数据访问必须在数据中心内部网络中 ; d. 单文件系统容量较高 (PB 级 ), 性能优异 (ms), 主要面向媒体编辑, HPC, 文件共享等场景 对象服务的特点 : a. 具备标准 Restful API 接口, 用户需要通过编程或者第三方工具访问对象存储 b. 数据共享, 服务器, 嵌入式设备,IOT 设备, 所有调用相同路径, 均可访问共享的对象存储数据 c. 公共 / 私有网络, 对象出出数据允许在公网访问, 满足互联网应用需求 d. 容量无限制, 性能较高 (10ms), 主要面向 Web/Mobile, 备份 / 归档, 大数据 /IOT 等场景 接口功能对比 下面的比较是把桶看成一个目录进行的同一级别的对比, 对象存储系统本身没有多级目录概念 表 1-5 对象服务和文件系统接口功能对比 对象服务 Get Service 文件系统 获取目录列表 文档版本 05 ( ) 版权所有 华为技术有限公司 6

12 1 OBS 简介 对象服务 Get Bucket Put Object Append Object Get Object Delete Object 不支持 Copy Object ( 目的和源相同 ),Put ACL Copy Object 文件系统获取文件列表写文件追加写文件读文件删除文件修改文件内容修改文件属性复制文件 1.4 功能特性列表 用对象服务映射文件系统的注意事项 很多工具都支持把桶映射成文件系统, 多目录是通过对象名来来构建的, 比如对象名为 test/ 的对象标识目录, 对象名为 test/test1.jpg 的对象表示目录下的一个文件 但是这样模拟很多功能实际上是十分耗费资源的, 比如目录重命, 所以模拟文件系统的场景下尽量避免类似的动作, 尽量只做简单的新写文件, 删除文件, 读写文件的动作 用户向 OBS 系统提交请求, 必须符合 REST 接口规范, 消息头中包含必要的请求参数 OBS 处理成功后会返回成功响应, 处理失败会返回错误响应, 并在响应消息体中给出错误的原因 桶作为 OBS 数据存放的容器, 提供特性功能列表如下表所示 : 表 1-6 OBS 特性功能列表 特性桶基本操作对象基本操作权限控制数据传输数据保护存储类别对象生命周期管理静态网站托管跨区域复制 简要说明 包括创建桶, 删除桶, 获取用户桶列表, 列举桶中对象等 包括上传对象, 下载对象, 拷贝对象以及多段上传等 包括对象的 ACL, 桶的 ACL, 桶的访问策略等 说明 OBS 支持数据传输协议 包括桶的多版本控制, 服务端加密等 介绍桶和对象的存储类别 针对对象生命周期管理的说明和指导 针对静态网站托管的说明和指导 针对跨区域复制的说明和指导 文档版本 05 ( ) 版权所有 华为技术有限公司 7

13 1 OBS 简介 特性消息通知桶日志管理监控 简要说明说明如何通过 SMN 或 FunctionGragh 进行消息通知 介绍如何管理桶的日志信息 介绍 OBS 监控指标的查看方法 OBS 存在两代硬件架构, 我们将他们称之为 OBS 2.0 和 OBS 3.0 创建桶时桶默认会存储到 OBS 3.0, 但以前创建的桶仍存储在 OBS 2.0 OBS 3.0 比 OBS 2.0 多提供一些特性, 如表 1-7 所示 表 1-7 OBS 3.0 与 OBS 2.0 支持的特性对比 特性 OBS 3.0 OBS 2.0 对象级存储类别 支持 不支持 联邦认证 支持 不支持 委托 支持 不支持 图片处理 支持 不支持 跨区域复制 支持 不支持 其他未列出的特性和基本功能 OBS 2.0 和 OBS 3.0 都支持 你可以通过 OBS console 或 Head Bucket 接口来确认桶存储在 OBS 2.0 还是 OBS 3.0, 具体方法如下 : 方法一 : 登录 OBS console, 查看桶概览 如果 桶版本号 的值是 3.0 则说明桶存储在 OBS 3.0, 否则桶存储在 OBS 2.0 方法二 : 通过 Head Bucket API 接口查看桶的版本号 请求消息示例 HEAD / HTTP/1.1 Host: bucketname.obs.cn-north-1.myhuaweicloud.com Accept: */* Date: Thu, 07 Jun :23:25 GMT Authorization: auth string 响应消息示例 HTTP/ OK Server: OBS x-obs-request-id: BF D80E4C5F20FDD5BD0085 Content-Type: application/xml x-obs-version: 3.0 x-obs-id-2: 32AAAQAAEAABAAAQAAEAABAAAQAAEAABCS8wS9l00ll4oMWmdniV7XmdAvfewrQq Date: Thu, 07 Jun :23:25 GMT Content-Length: 0 文档版本 05 ( ) 版权所有 华为技术有限公司 8

14 1 OBS 简介 响应消息里面 x-obs-version: 3.0 表示桶存储在 OBS 3.0, 没有该头域或者该头域的值是其他值表示桶存储在 OBS 2.0 文档版本 05 ( ) 版权所有 华为技术有限公司 9

15 2 创建请求 2 创建请求 2.1 获取访问密钥 (AK/SK) 2.2 获取访问域名 (EndPoint) 2.3 构造请求方法 2.1 获取访问密钥 (AK/SK) OBS 服务提供的是一组 RESTful 风格的 API 接口, 可以使用 OBS 提供的第三方开发工具包 (SDK) 访问 OBS 服务, 也可以使用 REST API 开发自有程序实现 我们强烈建议使用 SDK 完成客户端的对接开发, 既能简化客户端软件实现的复杂度, 也可以提供更好的接口兼容性和稳定性 OBS 的 REST 接口既支持认证请求, 也支持匿名请求 匿名请求通常仅用于需要公开访问的场景, 例如静态网站托管 除此之外, 绝大多数场景是需要经过认证的请求才可以访问成功 经过认证的请求总是需要包含一个签名值, 该签名值以请求者的访问密钥作为加密因子 结合请求体携带的特定信息计算而成 计算签名的过程已经包含在 SDK 中, 使用者只需将访问密钥在 SDK 初始化阶段设置好即可, 无需关心签名计算的具体实现 但是, 如果客户端选择通过 REST API 自行开发程序对接 OBS, 则需要按照 OBS 定义的签名算法来计算签名并添加到请求中 公有云服务中, 用户采用统一管理方式 首先需要在 IAM 用户界面注册账户并创建一组访问密钥 以下是一组访问密钥的示例 : AccessKeyId: 访问密钥 ID 与私有访问密钥关联的唯一标识符 ; 访问密钥 ID 和私有访问密钥一起使用, 对请求进行加密签名 格式例如 : HCY8BGCN1YM5ZWYOK1MH SecretKey: 与访问密钥 ID 结合使用的密钥, 对请求进行加密签名, 可标识发送方, 并防止请求被修改 格式例如 : 9zYwf1uabSQY0JTnFqbUqG7vcfqYBaTdXde2GUcq AccessKeyId 可唯一标识公有云 IAM 用户,OBS 根据 AccessKeyId 确认请求者身份, 并进行权限检查 获取永久访问密钥的方法, 请参见获取访问密钥 文档版本 05 ( ) 版权所有 华为技术有限公司 10

16 2 创建请求 2.2 获取访问域名 (EndPoint) OBS 在每个区域都提供独立的二级域名, 访问 OBS 服务既可以使用 OBS 提供的域名, 也可以使用自定义域名 OBS 已上线全新域名 *.myhuaweicloud.com, 同时也依然支持老域名 *.myhwclouds.com 推荐您使用新域名访问 OBS, 新域名请从地区和终端节点获取 本文档的所有示例均使用新域名 老域名如表 2-1 所示 表 2-1 OBS 老域名 区域名称 区域 终端节点 (Endpoint) 静态网站托管域名 协议 类型 华北 - 北京一 cn-north-1 obs.cnnorth-1.myhwclouds.com obs-website.cnnorth-1.myhwclouds.com HTT PS 华东 - 上海二 cn-east-2 obs.cneast-2.myhwclouds.com obs-website.cneast-2.myhwclouds.com HTT PS 华南 - 广州 cn-south-1 obs.cnsouth-1.myhwclouds.com obs-website.cnsouth-1.myhwclouds.com HTT PS 亚太 - 香港 ap- southeast- 1 obs.apsoutheast-1.myhwclouds. com / HTT PS 2.3 构造请求方法 使用 REST 接口创建请求 构造 HTTP 请求 一个 HTTP 请求由四部分构成, 请求方法 请求 URL 请求头域 请求体 请求方法 OBS 支持的请求方法如下表所示 表 2-2 OBS 支持的请求方法 请求方法 GET PUT 说明 请求服务器返回指定资源, 如获取桶列表 下载对象等 请求服务器存储指定资源, 如创建桶 上传对象等 文档版本 05 ( ) 版权所有 华为技术有限公司 11

17 2 创建请求 请求方法 POST DELETE HEAD 说明 请求服务器存储特殊的资源或执行特殊操作, 如初始化上传段任务 合并段等 请求服务器删除指定资源, 如删除对象等 请求服务器返回指定资源的概要, 如获取对象元数据等 OPTIONS 请求服务器检查是否具有某个资源的操作权限, 需要桶配置 CORS 请求 URL 请求 URL 的构成示例 : <schema>://<bucketname>.<endpoint>/<objectname>?querystrings schema:http 或 https bucketname: 桶名 endpoint: 桶所在区域的区域域名 objectname: 对象名 querystrings: 查询参数 除获取桶列表之外的所有接口, 都应当包含桶名 OBS 基于 DNS 解析性能和可靠性的考虑, 要求凡是携带桶名的请求, 在构造 URL 的时候都必须将桶名放在 EndPoint 前面, 形成三级域名形式, 又称为虚拟主机访问域名 例如, 如果您有一个位于中国华北区 1 的名为 test-bucket 的桶, 期望访问桶中一个名为 test-object 对象的 acl, 华北区 1 的 EndPoint 地址是 obs.cn-north-1.myhuaweicloud.com, 则正确的访问 URL 为 请求头域 OBS 使用的 HTTP 头域有两种类型 HTTP 标准头域 OBS 自定义头域 OBS 自定义头域总是以 "x-obs-" 作为前缀, 如 "x-obs-date" "x-obs-acl" 等 OBS 的每一个 REST 接口都定义了某些可选头域和必选头域, 其中部分头域需要参与请求的签名计算 具体每个接口的差异请参阅 API 接口说明 请求体 不是所有接口都需要携带请求体, 一般只有 PUT POST 方法定义的接口需要携带 OBS 的 REST 接口定义的请求体一般是 XML JSON 或二进制数据, 具体每个接口的差异请参阅 API 接口说明 请求添加签名 为请求添加签名有三种形式 文档版本 05 ( ) 版权所有 华为技术有限公司 12

18 2 创建请求 表 2-3 添加签名的三种形式 形式 在头域中包含签名 在 URL 中包含签名 在 POST 表单中包含签名 说明 在头域中包含签名是最常见的情况, 这种方式需要在 HTTP 请求头域中添加一个认证头域, 示例如下 : Authorization: OBS HCY8BGCN1YM5ZWYOK1MH:51KOKYY9CVvk/DtUt4W8aFHvfsc= 在 URL 的 querystring 中包含签名, 一般用于限时分享链接的场景, 示例如下 : AccessKeyId=HCY8BGCN1YM5ZWYOK1MH&Expires= &Signature=OgynyFAkBRU6FUHkEqs MVsPolok= 在 POST 表单中包含签名, 一般用于浏览器上传的场景, 示例如下 : WebKitFormBoundaryx4WluntRxFeG3GAD Content-Disposition: form-data; name="accesskeyid" HCY8BGCN1YM5ZWYOK1MH WebKitFormBoundaryx4WluntRxFeG3GAD Content-Disposition: form-data; name="signature" Bpj82MEqa23d7GEot7LCqJY8Zdg= 详细的计算签名的方式, 请参阅 API 接口说明中计算签名章节 文档版本 05 ( ) 版权所有 华为技术有限公司 13

19 3 使用桶 3 使用桶 3.1 使用限制 3.2 创建桶 3.3 删除桶 3.4 管理桶配额 3.5 管理桶标签 3.1 使用限制 桶命名规范 考虑到桶名会作为访问域名的一部分, 需要参与域名解析, 因此桶名需要满足 DNS 域名规范 OBS 系统在接受创桶请求时, 会对桶名进行严格的检查, 具体规则如下 : 只能包含英文小写字母 数字 "-" "." 只能以数字或字母开头 长度要求不少于 3 个字符, 并且不能超过 63 个字符 不能是 IP 地址 不能以 "-" "." 结尾 不可以包括有两个相邻的 "." "." 和 "-" 不能相邻, 如 "my-.bucket" 和 "my.-bucket " 都是非法的 当使用 HTTPS 协议访问 OBS 系统时, 由于 SSL 的通配符证书仅匹配不包含 "." 的桶 这将导致桶名包含 "." 的桶在访问 OBS 系统时, 客户端会提示证书校验存在风险, 比如浏览器安全提示会呈现红色告警 因此如非必要, 请尽量不要在桶名中包含 ".", 或者您可以在客户端重写证书校验逻辑以规避此问题 文档版本 05 ( ) 版权所有 华为技术有限公司 14

20 3 使用桶 桶名唯一性 桶名具有跨区域全局唯一性,OBS 不允许在任何区域创建两个同名的桶 如果桶中没有任何对象和段, 可以删除此桶后重新创建同名的桶 但是, 由于桶名会作为访问域名的一部分, 出于各级域名解析的缓存失效时间可能各不相同等原因, 该桶名称可能要过一段时间才可以重用 此外, 如果其他租户先于您创建这个名称的桶, 您将无法再拥有这个桶 因此, 请谨慎执行删除桶后重新创建同名桶的操作 桶在创建后, 无法修改桶名 桶的区域 桶区域的规划通常是基于地理上就近访问 降低成本 或法律合规等考量因素, 一个桶必须且只能归属于一个区域 桶在创建后, 无法修改区域 如果您在最初规划时选错了区域, 那么只能将该桶删除以后重新创建, 或者启用一个新的桶 因此, 请在创建桶时提前做好规划 谨慎选择桶区域 桶个数限制 每个租户可以创建桶的总数量不超过 100 个 租户下的不同用户创建的桶都会占用租户的配额 3.2 创建桶 拥有创建桶权限的用户可以在 OBS 上执行创桶请求, 一个桶只能属于一个租户 桶的所有者重复执行创建同名桶的请求, 会返回成功, 但实际不会产生任何创建动作 此外的其他场景重复创建同名桶均返回冲突 创桶之前需要规划 : 桶名 桶的区域 桶的缺省存储类型 桶的访问权限 文档版本 05 ( ) 版权所有 华为技术有限公司 15

21 3 使用桶 表 3-1 桶的规划 选项 描述 是否必选 桶名 桶的区域 桶的缺省存储类型 参考桶命名规范选择一个合规的桶名 参考地区和终端节点规划合理的区域 OBS 支持在创建桶时指定桶的缺省存储类型, 后续往桶内上传对象时如果没有为对象指定存储类型的话, 将继承桶的缺省存储类型 不同的存储类型, 费率和成本不一样, 需要根据业务模型选用不同类型的存储 更多关于存储类型的介绍, 请参考 8 数据存储类型 说明可以不指定桶的缺省存储类型, 这种情况下 OBS 将使用标准存储类型 注意桶的缺省存储类型可以修改, 但修改后仅对新上传的对象生效, 已上传的对象存储类型不会改变 是 是 否 桶的访问权限桶的访问权限可以受桶策略控制, 也可以受桶的 ACL 控制 创桶时可以使用 OBS 预定义头域为桶设置缺省的 ACL, 但桶策略不支持在创桶时设置 桶策略和桶 ACL 的作用和区别请参见 5 权限控制 创桶时指定预定义 ACL 通常用于需要公开访问的场景 或向其他指定租户授权的场景, 例如 : 设置 x-obs-acl:public-read, 那么这个桶创建以后默认向所有人开放只读权限 设置 x-obs-grant-read: ID=bbac5b3bdcb04674bad8b60a1 eb885c4, 那么这个桶创建以后默认向 ID 为 bbac5b3bdcb04674bad8b60a1eb88 5c4 的租户开放只读权限 更多创桶时支持的预定义头域设置方法请参考创建桶 说明可以不指定访问权限, 这种情况下 OBS 将该桶设置为私有 ( 仅桶的所有者拥有权限 ) 否 文档版本 05 ( ) 版权所有 华为技术有限公司 16

22 3 使用桶 使用 OBS 服务控制台创建桶 使用 OBS API 创建桶 要使用 OBS 服务控制台创建桶, 请参见控制台指南 尽管我们不建议直接使用 API 进行开发, 但在一些极端场景您仍然可以选择这样做, 比如在嵌入式单板软件上可能无法运行 SDK 依赖的运行环境等情况 使用 OBS API 开发需要遵从 API 的接口描述和签名规则 详细的接口描述和使用方法请参考 API 接口说明中的请求签名方法和创建桶 如果创建桶时服务端返回 5XX 错误或超时, 系统需要最长 30 分钟左右的时间进行桶信息一致性处理, 在此期间桶的信息可能不准确 3.3 删除桶 当桶为空时用户可以执行删除桶操作, 如果桶非空执行删除桶操作会被禁止 桶为空包含两方面含义 : 桶内没有任何对象或对象的任何历史版本 桶内没有任何未合并的多段上传任务 说明 执行删桶操作之前, 可以先通过列举桶内对象和列举桶内多段任务来确定桶是否为空 由于 OBS 支持对象多版本特性, 请考虑桶是否启用了多版本, 是否存在历史版本和删除标记 ( 删除标记也视作一个历史版本 ) 3.4 管理桶配额 用户创建的桶默认是没有配额限制的 您可以通过为桶设置配额限制来控制桶内允许上传的对象总容量, 超过设置的对象容量后上传对象会失败 说明 桶配额只对设置生效后的对象上传操作有限制, 如果设置的桶配额数值小于已经上传的对象容量, 不会删除已有对象, 但后续不能再上传任何对象 这种情况下只有删除部分已有对象, 将已用空间释放到配额限制以下之后才能再次上传新对象 3.5 管理桶标签 通常您的业务系统可能使用了华为云的多种云服务, 您可以为这些云服务下不同的资源实例分别设置标签 ( 对于 OBS 而言, 资源实例即为桶 ), 各服务产生的计费详单中都会体现这些资源实例和实例上设置的标签 如果您的业务系统是由多个不同的应用构成, 为同一种应用拥有的资源实例设置统一的标签将很容易帮助您对不同的应用进行使用量分析和成本核算 文档版本 05 ( ) 版权所有 华为技术有限公司 17

23 3 使用桶 标签使用规范 一个桶最多拥有 10 个标签 每个标签包含一个 Key 和一个 Value, 同一个桶中每个标签的 Key 必须是唯一的 Key 值为 1 到 36 个字符, 可以使用以下字符 :A-Z,a-z,0-9, -, _ 以及 Unicode(\u4E00-\u9FFF) 字符 Value 值为 0 到 43 个字符 可以使用以下字符 :A-Z,a-z, 0-9, -, _,. 以及 Unicode(\u4E00-\u9FFF) 字符 设置桶标签后, 由于缓存的存在, 最多可能延迟几分钟生效 文档版本 05 ( ) 版权所有 华为技术有限公司 18

24 4 使用对象 4 使用对象 4.1 对象的基本概念 4.2 对象的元数据 4.3 上传对象 4.4 复制对象 4.5 获取对象 4.6 删除对象 4.7 批量删除对象 4.8 多段上传 4.9 追加写对象 4.1 对象的基本概念 对象是 OBS 中的基本存储单位, 您可以在一个或者多个桶中存储任意多个对象 对象包含以下基本概念 : 对象键 : 对象的名字, 可以通过对象名来获取对象 对象值 : 由用户上传的并存储在 OBS 中的数据 元数据 : 用于存储对象名 对象大小等一些对象的描述信息 版本号 : 在开启多版本状态的桶中, 可以存在同一个名字的对象的多个版本, 每个对象由对象名和对象的版本号唯一标识 访问控制信息 : 用于控对象的访问权限的信息 4.2 对象的元数据 每个 OBS 对象都有数据 键和元数据 对象键 ( 或键名称 ) 在桶中唯一地标识对象, 创建对象时, 要指定键名称, 它在桶中唯一地标识该对象 键的名称是一序列的 Unicode 字符, 它的 UTF-8 编码长度最大为 个字节 对象元数据是一组名称值对 您可以在上传对象元数据时对其进行设置 上传对象后, 您将无法修改对象元数据 修改对象元数据的唯一方式是创建对象的副本并设置元数据 文档版本 05 ( ) 版权所有 华为技术有限公司 19

25 4 使用对象 对象键命名指导原则 虽然您可以在对象键名称中使用任何 UTF-8 字符, 但是以下键命名最佳做法有助于确保与其他应用程序的最大兼容性 每个应用程序对特殊字符的分析方式可能不同 以下指导原则有助于最大程度符合 DNS Web 安全字符 XML 分析器和其他 API 的要求 以下字符集通常可安全地用于键名称 : 字母数字字符 [0-9a-zA-Z] 特殊字符! - _. * ' ( 和 ) 以下是有效对象键名称的示例 : 4my-organization my.great_photos-2014/jan/myvacation.jpg videos/2014/birthday/video1.wmv 请注意,OBS 数据模型是一种扁平结构 : 您创建桶, 桶存储对象 不存在子桶或子文件夹层次结构 ; 但您可以使用键名称前缀和分隔符推断逻辑层次结构 ( 如同 OBS 控制台一样 )OBS 控制台支持文件夹的概念 假设您的桶 (companybucket) 包含具有以下对象键的四个对象 : bucket-log/log01.txt cgvbs/test1.txt _ png test1.txt 控制台使用键名称前缀 (bucket-log/ 和 cgvbs/) 和分隔符 ( / ) 呈现如下所示的文件夹结构 : _ png 和 key test1.txt 键没有前缀, 因此其对象直接在桶的根级别出现 如果打开 cgvbs/ 文件夹, 则您会看到其中包含 test1.txt 对象 文档版本 05 ( ) 版权所有 华为技术有限公司 20

26 4 使用对象 对象元数据 有两种元数据 : 系统元数据和用户定义的元数据 系统定义的元数据 : 对于桶中存储的每个对象,OBS 均保留一组系统元数据 OBS 根据需要处理这些系统元数据 例如,OBS 将保留对象创建日期和大小元数据, 并将这些信息用作对象管理的一部分 1. 系统元数据分为以下两类 : 元数据 ( 如对象创建日期 ) 受系统控制, 仅 OBS 可以修改其值 其他系统元数据 ( 例如为对象配置的存储类以及指示对象是否已启用服务器端加密的数据 ) 是您可以控制其值的系统元数据的示例 如果您拥有配置为网站的桶, 有时您可能想要将页面请求重定向到其他页面或外部 URL 在此例中, 网页是您的桶中的对象 OBS 将页面重定向值存储为您可以控制其值的系统元数据 创建对象时, 您可以配置这些系统元数据项目的值或在需要时更新这些值 表 4-1 系统定义的对象元数据列表 名称 描述 用户是否可以修改该值? 日期 对象创建日期 否 内容长度 对象大小以字节为单位 否 上次修改日期 上次修改该对象的日期 否 Content-MD5 对象的 base64 编码的 128 位 MD5 摘要 否 x-obs-version-id 对象版本 在桶上启用版本控制时,OBS 会为添加到桶的对象指定版本号 有关更多信息, 请参阅对象多版本控制 否 x-obs-delete-marker 在启用版本控制的桶中, 此布尔值标记指示对象是否为删除标记 否 文档版本 05 ( ) 版权所有 华为技术有限公司 21

27 4 使用对象 名称描述用户是否可以修改该值? x-obs-storage-class 用于存储对象的存储类 否 x-obs-website-redirectlocation 将关联对象的请求重定向到同一桶中的其他对象或外部 URL 是 2. 用户定义的元数据 : 上传对象时, 您也可以将元数据指定给该对象 发送 PUT 或 POST 请求创建对象时, 您将以名称 - 值对的形式提供此可选信息 使用 REST API 上传对象时, 可选的用户定义的元数据名称必须以 x-obs-meta- 开头, 以与其他 HTTP 标头区分开来 使用 REST API 检索对象时, 将返回此前缀 通过 REST API 检索元数据时,OBS 会将同名 ( 忽略大小写 ) 标头合并为逗号分隔的列表 如果某些元数据包含不可打印的字符, 则不会返回它 但是, x-obsmissing-meta 标头将与不可打印的元数据条目的数量值一起返回 避免使用非 US-ASCII 字符, 以免产生不必要的困扰 OBS 使用小写存储用户定义的元数据 使用 REST 和 UTF-8 时或通过 POST 基于浏览器的上传时, 每个名称 值对都必须符合 US-ASCII PUT 请求标头的大小限制为 8 KB 在 PUT 请求标头中, 用户定义的元数据的大小限制为 2 KB 用户定义的元数据是一组键值对 通过计算每个键和值的 UTF-8 编码中的字节总数来测量用户定义的元数据的大小 对象存储类型 系统保留的自定义元数据 x-obs-storage-class 用于设置和记录对象的存储类别 OBS 支持三种对象存储类型 三种对象存储类别的使用场景参考创建桶中对于桶默认存储类型的解释 三种存储类型分别为 : STANDARD( 标准存储 ) WARM( 低频访问存储 ) COLD( 归档存储 ) OBS 支持在上传对象和复制对象时即指定对象的存储类型, 在请求头域中使用 x-obsstorage-class 设置对象的存储类型 也可以对已经存在的对象修改存储类型 与普通的修改对象自定义元元数据的使用方法相同 OBS 还支持配置生命周期管理任务修改对象的存储类型 详细介绍参考生命周期管理 文档版本 05 ( ) 版权所有 华为技术有限公司 22

28 4 使用对象 4.3 上传对象 对象上传简介 PUT 上传对象 上传对象操作是指在指定的桶内增加一个对象, 执行该操作需要用户拥有桶的写权限 用户上传的对象存储在桶中 用户必须对桶有 WRITE 权限, 才可以在桶中上传对象 同一个桶中存储的对象名必须是唯一的 根据上传的数据大小,OBS 提供以下选项 : 在单个操作中上传对象 借助单个 PUT 操作或者 POST 操作, 您可以上传最大 5 GB 的对象 多段上传对象 您可以使用多段上传 API 来上传最大 5 TB 的大型对象 多段上传 API 旨在改进大型对象的上传体验 您可以多段上传对象 这些对象每个段可以按任何顺序并行独立上传 您可以对大小从不超过 5 TB 的对象使用多段上传 我们建议 OBS 客户对大于 100 MB 的对象使用多段上传 有关多段上传对象的更多信息, 请参阅 4.8 多段上传 在本节中, 主要叙述在单个操作中上传对象的相关内容 用户在 OBS 系统中创建了桶之后, 可以采用 PUT 操作的方式将对象上传到桶中, 也可以采用 POST 上传的方式上传对象 POST 上传对象主要用于基于浏览器上传的场景中 上传对象操作是指在指定的桶内增加一个对象, 执行该操作需要用户拥有桶的写权限 用户上传的对象存储在桶中 用户必须对桶有 WRITE 权限, 才可以在桶中上传对象 同一个桶中存储的对象名必须是唯一的 如果在指定的桶内已经有相同的对象键值的对象, 用户上传的新对象会覆盖原来的对象 ; 为了确保数据在传输过程中没有遭到破坏, 用户可以在请求消息头中加入 Content-MD5 参数 在这种情况下,OBS 收到上传的对象后, 会对对象进行 MD5 校验, 如果不一致则返回出错信息 用户还可以在上传对象时指定 x-obs-acl 参数, 设置对象的权限控制策略 用户在 OBS 系统中创建了桶之后, 可以采用 PUT 操作的方式将对象上传到桶中 如果桶的多版本状态是开启的, 系统会自动为对象生成一个唯一的版本号, 并且会在响应报头 x-obs-version-id 返回该版本号 如果桶的多版本状态是暂停的, 则对象的版本号为 null PUT 上传对象的请求消息样式如下 : PUT /ObjectName HTTP/1.1 Host: Host Server Content-Type: type Content-Length: length Authorization: authorization Date: date <Optional Additional Header> <object Content> 文档版本 05 ( ) 版权所有 华为技术有限公司 23

29 4 使用对象 POST 上传对象 用户除了可以用 PUT 直接上传对象外, 还可以使用 POST 上传对象 如果桶的多版本状态是开启的, 系统会自动为对象生成一个唯一的版本号 ; 如果桶的多版本状态是暂停的, 则系统生成的对象版本号为 null, 并由响应报头 x-obs-version-id 返回该版本号 POST 上传对象的请求消息样式 : POST / HTTP/1.1 Host: bucketname.obsdomainname User-Agent: browser_data Accept: file_types Accept-Language: Regions Accept-Encoding: encoding Accept-Charset: character_set Keep-Alive: 300 Connection: keep-alive Content-Type: multipart/form-data; boundary= Content-Length: length Content-Disposition: form-data; name="key" acl Content-Disposition: form-data; name="success_action_redirect" success_redirect Content-Disposition: form-data; name="content-type" content_type Content-Disposition: form-data; name="x-obs-meta-uuid" uuid Content-Disposition: form-data; name="x-obs-meta-tag" metadata Content-Disposition: form-data; name="accesskeyid" access-key-id Content-Disposition: form-data; name="policy" encoded_policy Content-Disposition: form-data; name="signature" signature= Content-Disposition: form-data; name="file"; filename="myfilename" Content-Type: image/jpeg file_content Content-Disposition: form-data; name="submit" Upload to OBS 复制对象 复制对象操作将创建已存储在 OBS 中的对象的副本 在单个原子操作中, 您可以创建最大 5 GB 的对象副本 但是, 对于复制大于 5 GB 的对象副本, 您必须使用多段上传 API 通过使用 copy 操作, 您可以 : 创建对象的其他副本 通过复制对象并删除原始对象来重命名它们 更改对象元数据 每个 OBS 对象都带有元数据 它是一组名称值对 您可以在上传对象元数据时对其进行设置 上传对象后, 您将无法修改对象元数据 修改 文档版本 05 ( ) 版权所有 华为技术有限公司 24

30 4 使用对象 对象元数据的唯一方式是创建对象的副本并设置元数据 在复制操作中, 设置与源和目标相同的对象 每个对象都带有元数据 有些是系统元数据, 而另外一些则是用户定义的元数据 用户可以控制某些系统元数据 复制对象时, 还会复制用户控制的系统元数据和用户定义的元数据 OBS 将重设系统控制的元数据 例如, 在复制对象时,OBS 将重设已复制的对象的创建日期 在复制请求中, 您无需设置这些值 复制对象时, 您可能会决定更新某些元数据值 例如, 如果您的源对象被配置为使用标准存储, 您可能会为对象复制选择低冗余存储 您可能还会决定更改源对象上某些用户定义的元数据值 请注意, 如果您选择在复制期间更新任意对象的用户可配置元数据 ( 系统或用户定义的 ), 则您必须显式地指定所有的用户可配置元数据, 即使您只更改一个元数据的值 ( 显示在请求中源对象上 ) 在桶没有开启多版本的情况下, 将源对象 objecta 复制为目标对象 objectb, 如果在复制操作之前对象 objectb 已经存在, 复制操作执行之后老对象 objectb 则会被新复制对象 objectb 覆盖, 复制成功后, 只能下载到新的对象 objectb, 老对象 objectb 将会被删除 因此在使用 copy 接口时请确保目标对象不存在或者已无价值, 避免因 copy 导致数据误删除 复制过程中源对象 objecta 无任何变化 复制对象的结果不能仅根据 HTTP 返回头域中的 status_code 来判断请求是否成功, 头域中 status_code 返回 200 时表示服务端已经收到请求, 且开始处理复制对象请求 复制是否成功会在响应消息的 body 中, 只有 body 体中有 ETag 标签才表示成功, 否则表示复制失败 更多信息请参考复制对象章节 4.5 获取对象 拥有对象读权限的用户 ( 包括 OBS 注册用户和匿名用户 ) 可以执行下载对象的操作, 返回信息会包含对象内容和对象的元数据信息 下载对象时, 您可以使用以下选项 : 下载整个对象 单次 GET 操作即可为您返回 OBS 中存储的整个对象 下载对象的段 通过在 GET 请求中使用 Range HTTP 标头, 您可以下载存储在 OBS 中的对象的特定字节范围 一旦您的应用程序准备就绪, 就会恢复提取对象的其他段的操作 当您仅需要部分对象数据时, 这种可恢复的下载十分有用 当网络连接不佳, 并且您需要对失败做出反应时, 它也十分有用 当您下载对象时, 其元数据将在响应标头中返回 有时, 您希望覆盖 GET 响应中返回的特定响应标头值 例如, 您可能覆盖 GET 请求中的 Content-Disposition 响应标头值 REST GET Object API( 参见 GET Object) 允许您指定 GET 请求中的查询字符串参数以覆盖这些值 当从开启多版本控制的桶中下载对象时, 如果要获取特定版本的对象, 需要在请求中携带 versionid 参数 更多信息请参考 对象存储服务 API 参考 的获取对象内容章节 文档版本 05 ( ) 版权所有 华为技术有限公司 25

31 4 使用对象 4.6 删除对象 您可以直接从 OBS 删除一个或多个对象 删除对象时, 您可以使用以下选项 : 删除单个对象 OBS 提供了删除 API, 使您能够在单个 HTTP 请求中删除一个对象 删除多个对象 OBS 还提供了批量删除对象 API, 使您能够在单个 HTTP 请求中删除最多 100 个对象 从未受版本控制的桶中删除对象时, 您只需提供对象名称 ; 从受版本控制的桶中删除对象时, 您可以选择提供对象的版本 ID 以删除特定版本的对象 从受版本控制的桶中删除对象 如果您的桶受版本控制, 则桶中可能存在同一对象的多个版本 使用受版本控制的桶时, 删除 API 将提供以下选项 : 不指定版本 ID 的删除请求 即您仅指定对象的名称而不指定版本 ID 在此情况下,OBS 将创建一个删除标记并在响应中返回版本 ID 这将使您的对象从桶中消失 指定版本 ID 的删除请求 即不仅要指定对象名, 还要指定版本 ID 在此情况下, 可能会出现以下两种结果 : a. 如果版本 ID 映射到特定的对象版本, 则 OBS 将删除该特定版本的对象 b. 如果版本 ID 映射到对象的删除标记, 则 OBS 将删除该删除标记 这将使您的对象重新出现在桶中 4.7 批量删除对象 批量删除对象操作允许用户将一个桶内的部分对象一次性删除, 并将每个对象的删除结果返回给请求用户, 对象删除后不可恢复 批量删除对象的响应方式支持以下两种选项 : Verbose 即在返回响应时, 不管对象是否删除成功都将删除结果包含在 XML 响应里 Quiet 即在返回响应时, 只返回删除失败的对象结果, 没有返回的认为删除成功 OBS 默认使用 verbose 模式, 如果用户在请求消息体中指定 quiet 模式的话, 使用 quiet 模式 批量删除的请求消息头中必须包含 Content-MD5 以及 Content-Length, 用以保证服务端能够检测出请求消息体在网络传输中是否出错 4.8 多段上传 多段上传允许将单个对象作为一组段分别上传 每个段都是对象数据的连续部分 您可以独立上传以及按任意顺序上传这些对象的段 如果其中某个段传输失败, 可以重新传输该段且不会影响其他段 当对象的所有段都上传后,OBS 将这些段合并起来, 然后创建对象 一般而言, 如果您的对象大小达到了 100 MB, 您应该考虑使用多段上传, 而不是在单个操作中上传对象 例如 : 您有 1 个 500 MB 大小的对象, 需要上传到 文档版本 05 ( ) 版权所有 华为技术有限公司 26

32 4 使用对象 OBS 桶中, 您可以使用 OBS Browser 工具进行多段上传, 此工具会将该对象自动切分为多个小对象进行上传 ; 或者使用 OBS 提供的多段上传 API 进行上传, 最大程度提高上传效率同时避免您的任务失败 使用多段上传可提供以下优势 : 提高吞吐量 您可以并行上传段以提高吞吐量 从任何网络问题中快速恢复 较小的段大小可以将由于网络错误而需重启失败的上传所产生的影响降至最低 暂停和恢复对象上传 您可以随时上对象段 启动多段上传后, 不存在过期期限 ; 您必须显式地完成或取消多段上传任务 在得知最终对象大小之前开始上传 您可以在创建对象的同时上传对象 多段上传 API 允许您多段上传大型对象 您可以使用此 API 上传新的大型对象或创建现有对象的副本 多段上传有三个步骤 : 开始上传 ( 初始化上传段任务 ) 上传每个段, 完成多段上传 ( 合并段 ) 收到合并段请求后,OBS 将构建由上传的段组成的对象, 然后您可以像在您的桶中访问任何其他对象一样访问该对象 您可以列出所有正在进行的多段上传任务, 或获取特定多段上传任务已上传的段列表 以上每个操作都在本节中进行了说明 初始化上传段任务 当您发送请求以开始多段上传时,OBS 将返回具有上传 ID 的响应, 此 ID 是多段上传的唯一标识符 无论您何时上传段 列举已上传的段 合并段或取消多段上传任务, 您都必须包括此上传 ID 上传段 上传段时, 除了指定上传 ID, 还必须指定段编号 您可以选择 1 和 之间的任意段编号 段编号在您正在上传的对象中唯一地标示了段及其位置 如果您使用之前上传的段的同一段编号上传新段, 则之前上传的段将被覆盖 无论您何时上传段,OBS 都将在其响应中返回 ETag 标头 对于每个段上传任务, 您必须记录每个段编号和 ETag 值 您需要在随后的请求中包括这些值以完成多段上传 初始化上传段任务并上传一个或多个段之后, 您必须合并段或取消多段上传任务, 才能停止收取上传的段的存储费用 仅当在合并段或取消多段上传任务之后,OBS 才释放段存储并停止向您收取段存储费用 多并发上传同一对象的同一段时, 服务端遵循 Last Write Win 策略, 但 Last Write 的时间定义为段元数据创建时间 为了保证数据准确性, 客户端需要加锁保证同一对象的同名段上传的并发性 同一对象的不同段并发上传不需要加锁 拷贝段 多段上传任务创建后, 用户可以通过指定多段上传任务号, 为特定的任务上传段 添加段的方式还包括调用段拷贝接口 允许客户将已上传对象的一部分或全部拷贝为段 文档版本 05 ( ) 版权所有 华为技术有限公司 27

33 4 使用对象 拷贝段的结果不能仅根据 HTTP 返回头域中的 status_code 来判断请求是否成功, 头域中 status_code 返回 200 时表示服务端已经收到请求, 且开始处理拷贝段请求 拷贝是否成功会在响应消息的 body 中, 只有 body 体中有 ETag 标签才表示成功, 否则表示拷贝失败 将源对象 object 拷贝为一个段 part1, 如果在拷贝操作之前 part1 已经存在, 拷贝操作执行之后老段数据 part1 会被新拷贝的段数据覆盖 拷贝成功后, 只能列举到最新的段 part1, 老段数据将会被删除 因此在使用拷贝段接口时请确保目标段不存在或者已无价值, 避免因拷贝段导致数据误删除 拷贝过程中源对象 object 无任何变化 合并段和取消多段上传任务 合并段时,OBS 通过按升序的段编号规范化多段来创建对象 如果在初始化上传段任务中提供了任何对象元数据, 则 OBS 会将该元数据与对象相关联 成功完成请求后, 段将不再存在 合并段请求必须包括上传 ID 以及段编号和相应的 ETag 值的列表 OBS 响应包括可唯一地识别组合对象数据的 ETag 此 ETag 无需成为对象数据的 MD5 哈希 您可以选择取消多段上传任务, 取消多段上传任务之后无法再次使用该上传 ID 上传任何段 然后,OBS 将释放被取消的多段上传任务中的每个段数据的所有存储 如果任何多段上传已在进行中, 即使您已执行中止操作, 它们仍可以上传成功或失败 若要释放所有分段使用的所有存储, 必须在完成所有多段上传后再取消多段上传任务 如果上传了 10 个段, 但合并时只选择了 9 个段进行合并, 那么未被合并的段将会被系统自动删除, 未被合并的段删除后不能恢复 在进行合并之前请使用列出已上传的段接口进行查询, 仔细核对所有段, 确保没有段被遗漏 列举已上传的段 您可以列出特定多段上传任务或所有正在进行的多段上传任务的分段 列举已上传的段操作将返回您已为特定多段上传任务而上传的段信息 对于每个列举已上传的段请求,OBS 将返回有关特定多段上传任务的分段信息, 最多为 个分段 如果多段上传中的段超过 个, 您必须发送一系列列举已上传的段请求以检索所有段 请注意, 返回的分段列表不包括已合并的分段 仅使用返回的列表进行验证 发送完成多段上传请求时, 您不应使用此列表的结果 但是, 当上传段和 OBS 返回的相应的 ETag 值时, 将保留您自己的指定段编号的列表 列举多段上传任务 使用列举多段上传任务操作, 您可以获得正在进行的多段上传任务的列表 正在进行的多段上传任务是已开始但还未完成或中止的上传 每个请求将返回最多 个多段上传任务 如果正在进行的多段上传任务超过 个, 您需要发送其他请求以检索剩余的多段上传任务 文档版本 05 ( ) 版权所有 华为技术有限公司 28

34 4 使用对象 项目 最大对象大小 规范 48.8 TB 每次上传的段的最大数量 段编号 1 到 ( 含 ) 段大小 列举已上传的段请求返回的段的最大数量 在列举已上传的段上传请求中返回的段的最大数量 5 MB 到 5 GB, 最后一个段可以 <5 MB 多段上传 API 和权限 用户必须具有使用多段上传操作的所需权限 您可以使用 ACL 桶策略或用户策略来授予用户以执行这些操作的权限 下表列出了使用 ACL 桶策略或用户策略时, 各种多段上传操作的所需权限 操作 所需权限 初始化上传段任务您必须要有执行 PutObject 操作的权限, 才能初始化上传段任务 您必须要有执行 PutObject 桶所有者可以允许其他委托人执行 PutObject 操作 桶所有者可以允许其他委托人执行 PutObject 上传段您必须要有执行 PutObject 操作的权限, 才能上传段 仅多段上传任务的发起者可以上传段 桶所有者必须赋予多段任务发起者执行 PutObject 操作的权限, 以便发起者可以上传该对象的段 拷贝段您必须要有执行 PutObject 操作的权限, 同时因为您正在将一个已存在的对象作为一个段来上传, 因此您也必须要有对拷贝源对象执行 GetObject 操作的权限才可以拷贝段 仅多段上传任务的发起者可以拷贝段 桶所有者必须赋予多段任务发起者对对象执行 PutObject 操作的权限, 以便发起者可以上传该对象的段 文档版本 05 ( ) 版权所有 华为技术有限公司 29

35 4 使用对象 操作 所需权限 合并段您必须要有执行 PutObject 操作的权限, 才能进行合并段操作 仅多段上传任务的发起者可以合并段 桶所有者必须赋予多段任务发起者对对象执行 PutObject 操作的权限, 以便发起者可以完成该对象的多段上传 取消多段上传任务 列举已上传的段 列举多段上传任务 您必须要有执行 AbortMultipartUpload 操作的权限, 才能取消多段上传任务 默认情况下, 允许桶所有者和多段上传任务的发起者执行此操作 除了这些默认情况之外, 桶所有者可以允许其他委托人对对象执行 AbortMultipartUpload 操作 桶所有者可以拒绝任何委托人, 使其无法执行 AbortMultipartUpload 操作 您必须得到可以执行 ListMultipartUploadParts 操作的权限, 才能在多段上传中列举已上传的段 在默认情况下, 桶所有者有权为任何针对桶的多段上传列举已上传的段 多段上传任务的发起人有权为特定多段上传列举已上传的段 除了这些默认情况之外, 桶所有者可以允许其他委托人对对象执行 ListMultipartUploadParts 操作 桶所有者也可以拒绝任何委托人, 使其无法执行 ListMultipartUploadParts 操作 您必须得到可以对桶执行 ListBucketMultipartUploads 操作的权限, 才能列出正在上传到该桶的多段上传 除了默认情况之外, 桶所有者可以允许其他委托人对桶执行 ListBucketMultipartUploads 操作 使用适用于多段上传的 REST API 对象存储服务 API 参考中的以下章节介绍适用于多段上传的 REST API 列举多段上传任务 初始化上传段任务 上传段 拷贝段 列举已上传的段 合并段 文档版本 05 ( ) 版权所有 华为技术有限公司 30

36 4 使用对象 取消多段上传任务 4.9 追加写对象 追加写对象操作是指在指定桶内的一个对象尾追加上传数据, 不存在相同对象键值的对象则创建新对象 通过 Append Object 操作创建的 Object 类型为 Appendable Object, 而通过 Put Object 上传的 Object 是 Normal Object 用户上传的对象存储在桶中 用户必须对桶有 WRITE 权限, 才可以在桶中上传对象 同一个桶中存储的对象名必须是唯一的 为了确保数据在传输过程中没有遭到破坏, 用户可以在请求消息头中加入 Content- MD5 参数,OBS 收到上传数据后, 会对数据进行 MD5 校验, 如果不一致则返回出错信息 该操作支持在创建 Appendable 对象时指定 x-obs-acl 参数, 设置对象的权限控制策略 该操作支持服务端加密功能 和其他操作的关系 : 1 对一个已经存在的 Appendable 对象进行 Put Object 操作, 那么该 Appendable 对象会被新 Object 覆盖, 类型变为 Normal 对象, 反之出错 ; 2 Appendable 对象复制后变成 Normal 对象, 不支持 Appenable 对象复制成 Appendable 对象 说明 1 每次追加上传都会更新该对象的最后修改时间 ; 2 服务端加密 SSE-C 方式, 那么追加上传和初始化段一样, 设置诸如 x-obs-server-side-encryption 之类的请求 Header, 后续追加上传也必须携带 3 服务端加密 SSE-KMS 方式, 有且只有第一次上传且桶内不存在同名对象时, 才设置诸如 x- obs-server-side-encryption 之类的请求 Header, 后续追加上传不携带 追加上传对象的请求消息样式如下 : POST /ObjectName?append&position=Position HTTP/1.1 Host: bucketname.obs.cn-north-1.myhuaweicloud.com Content-Type: application/xml Content-Length: length Authorization: authorization Date: date <Optional Additional Header> <object Content> 文档版本 05 ( ) 版权所有 华为技术有限公司 31

37 5 权限控制 5 权限控制 5.1 权限控制简介 5.2 OBS 权限控制模型 5.3 使用 ACL 5.4 使用桶策略 (Bucket policy) 5.5 IAM 用户策略 5.6 权限控制实例 5.1 权限控制简介 OBS 桶属于一个具体的租户,OBS 收到的每次访问请求都会进行权限检查, 确保桶和对象只能被授权的用户的访问 控制用来管理请求者对请求资源 ( 桶或者对象 ) 的访问权限, 请求用户只能访问自己被授权的资源, 如果访问未被授权的资源, 则请求失败 用户创建的桶或者对象, 用户为桶或者对象的所有者 默认情况下, 只有此用户对这个桶或者对象有访问权限 其他用户要想访问这个桶或者对象, 必须获得桶或者对象的访问权限, 资源所有者可以通过 ACL 或者 Bucket Policy 两种方式管理权限 5.2 OBS 权限控制模型 OBS 的资源 ( 桶和对象 ) 默认都是私有的, 只有拥有者才有权限访问 资源拥有者是创建这个资源的租户, 如下图所示, 一个租户下有多个 IAM 用户,IAM 用户 1 创建的桶, 其用有者是 IAM 用户 1 所属的租户 ;IAM 用户 2 往桶里上传对象后, 对象的拥有者同样是 IAM 用户 2 所归属的租户 文档版本 05 ( ) 版权所有 华为技术有限公司 32

38 5 权限控制 OBS 的权限控制是指通过编写访问策略向其他租户或者 IAM 用户授予操资源的控制权限 例如, 你拥有一个桶, 你可以授权一个其他 IAM 用户上传对象到你的桶中 ; 你也可以将桶开放给非公有云用户访问, 即桶作为一个公共资源, 能被互联网上任何人访问 访问控制策略描述了谁可以访问哪些资源, 你可以使用以下两种访问控制策略来对 OBS 资源进行权限控制 : 基于资源的权限控制策略 -OBS 提供了 ACL 和 bucket policy, 用于实现基于资源的权限控制 文档版本 05 ( ) 版权所有 华为技术有限公司 33

39 5 权限控制 每个桶和对象都有 ACL, 即使没有显示设置过,OBS 也会为每个对象生成默认的 ACL, 如下所示 : <?xml version="1.0" encoding="utf-8" standalone="yes"?> <AccessControlPolicy xmlns=" <Owner> <ID>resource owerner id</id> </Owner> <AccessControlList> <Grant> <Grantee> <ID>resource owner id</id> </Grantee> <Permission>FULL_CONTROL</Permission> <Delivered>false</Delivered> </Grant> </AccessControlList> </AccessControlPolicy> ACL 显示了资源 owner 信息已经被授权者和所授予权限的授权列表, 如上示例所示, 资源的默认 ACL 只会授予拥有者完全控制 (FULL_CONTROL) 权限, 不会对其他人进行授权 另外, 您也可以通过添加 bucket policy 向其他租户或者 IAM 用户授予对相应桶和桶中对象的权限 bucket policy 对桶中对象授权时, 只能对桶拥有者创建的对象授权, 对于非桶拥有者创建的对象,bucket policy 无法授权 bucket policy 作为 ACL 授权的补充 ( 更多场景下是替代 ), 可以更灵活和更细粒度进行权限控制 { "Statement":[ { "Sid":"granteReadObject", "Effect":"Allow", "Principal":{ "ID":["*"] 文档版本 05 ( ) 版权所有 华为技术有限公司 34

40 5 权限控制 } ] } }, "Action":["GetObject"], "Resource":["bucketname/*"] 上面是一个 bucket policy 示例, 您需要使用 JSON 格式来编写 bucket policy 该 policy 授予对一个名为 bucketname 的桶中所有对象能被所有人读取的权限 资源策略中使用的租户或者 IAM user 的 ID 信息可以通过公有云 console 或者 API 接口查询 公有云 console 查询用户 ID 信息方法如下 : 步骤 1 登录公有云, 点击右上角用户名, 选择 账号中心 步骤 2 点击 账号中心, 选择 我的凭证, 进入到我的凭证页面可以看到用户名 用户 ID 用户所属租户 ---- 结束 基于 IAM 用户的权限控制策略 -IAM 提供了基于 IAM 用户角色的用户权限控制 租户创建 IAM 用户后, 需要将用户加入到一个 IAM 组中,IAM 可以对这个组授予所需的权限, 其中和 OBS 相关的权限有以下 3 种预定义的权限 : 其中 OBS Bucket Viewer 只有列举租户所有桶 列举单个桶中对象 head 桶的权限 ; Tenant Administrator 用于 OBS 所有权限 ;Tenant Guest 只有 OBS 读权限 如果没有选择这 3 种权限, 则没有任何 OBS 权限 5.3 使用 ACL ACL 简介 ACL 可以管理桶和对象的访问权限, 每个桶或者对象在创建时都会生成默认的 ACL, 也可以调用更改 ACL 接口生成新的 ACL ACL 列表的每项包含了对被授权用户授予什么样的权限 OBS 的 ACL 为了实现用户的简单实用授权, 包含以下特点 : ACL 对租户和租户下的用户都生效 桶和对象的拥有者相同时, 设置桶上的 ACL 默认对桶及桶下对象都生效 桶创建时可以携带 acl, 也可以创建成功后设置 acl; 对象上传时可以携带 acl, 上传后也可以成功后再单独设置 文档版本 05 ( ) 版权所有 华为技术有限公司 35

41 5 权限控制 桶和对象的 ACL 有两种设置方式 : 创建桶或上传对象时通过头域设置桶或对象的 ACL; 已经存在的桶或对象调用单独的 ACL 接口设置 对已经存在的资源设置 ACL OBS 支持对一个已经存在的桶或者对象设置 ACL, 设置成功后, 之前的 ACL 将会被覆盖掉, 新设置的 ACL 生效 对已经存在的资源进行设置 ACL 的格式是 xml 格式, 具体格式如下 : 对已经存在的桶设置 ACL 的格式 对已经存在的桶设置 ACL 时, 需要在请求消息体中包含 XML 格式的 ACL 列表,ACL 的格式如下所示 : <AccessControlPolicy> <Owner> <ID>domainId</ID> </Owner> <AccessControlList> <Grant> <Grantee> <ID>domainId</ID> </Grantee> <Permission>FULL_CONTROL</Permission> <Delivered>false</Delivered> </Grant> </AccessControlList> </AccessControlPolicy> Grant 中的 Delivered 表示桶 acl 权限是否传递到桶中对象上, 如果该值是 true, 则说明对象的 acl 授权和桶的 acl 授权一致, 除非对象显示设置了不继承桶的 acl 授权 对已经存在的对象设置 ACL 的格式 对已经存在的对象设置 ACL 的操作时, 需要在请求消息体中包含 XML 格式的 ACL 列表,ACL 的格式如下所示 : <AccessControlPolicy> <Owner> <ID>domainId</ID> </Owner> <Delivered>true</Delivered> <AccessControlList> <Grant> <Grantee> <ID>domainId</ID> </Grantee> <Permission>FULL_CONTROL</Permission> </Grant> </AccessControlList> </AccessControlPolicy> ACL 列表中 Owner 下面的 Delivered 表示对象 acl 是否继承桶的 acl 权限, 默认为 true, 对象默认继承桶的 acl 授权, 如果不希望继承桶的权限, 则设置为 false 桶的 ACL 检查比较简单, 对象的 ACL 检查略微复杂一些, 需要考虑 Delivered 检查对象的 acl, 如果对象 acl 权限不满足, 并且是 <Delivered>true</Delivered>, 则继续检查桶 acl, 如果桶的 acl 权限满足, 并且是 <Delivered>true</Delivered> 则说明该 acl 能够应该应用到对象上, 对象按此规则生效 如果对象 acl 是 <Delivered>false</Delivered>, 则不能继承桶的 acl 权限 如果桶的 acl 权限是 <Delivered>false</Delivered>, 说明桶的权限不能应用到对象上 ( 权限继承必须是对象的 <Delivered>true</Delivered>, 并且桶的满足条件的该项权限是 <Delivered>true</Delivered>) 其中 permission 是 OBS 支持的 5 种权限 ( 详见表 5-1),<Grantee> 节点按照不同的被授予权限用户包括 OBS 用户和所有人, 其格式略有不同 : 文档版本 05 ( ) 版权所有 华为技术有限公司 36

42 5 权限控制 授予 OBS 用户 <Grantee> <ID>domainId</ID> </Grantee> 授予所有人 <Grantee> <Canned>Everyone</Canned> </Grantee> 表 5-1 OBS 支持的桶或对象权限 权限 READ WRITE READ_ACP WRITE_ACP 描述 若有桶的读权限, 则可以获取该桶内对象列表 桶内多段任务 桶的元数据 桶的多版本 若有对象的读权限, 则可以获取该对象内容和元数据 若有桶的写权限, 则可以上传 覆盖和删除该桶内任何对象和段 此权限在对象上不适用 若有读 ACP 的权限, 则可以获取对应的桶或对象的权限控制列表 (ACL) 桶或对象的所有者永远拥有读对应桶或对象 ACP 的权限 若有写 ACP 的权限, 则可以更新对应桶或对象的权限控制列表 (ACL) 桶或对象的所有者永远拥有写对应桶或对象的 ACP 的权限 拥有了写 ACP 的权限, 由于可以更改权限控制策略, 实际上意味着拥有了完全访问的权限 FULL_CONTROL 若有桶的完全控制权限意味着拥有 READ WRITE READ_ACP 和 WRITE_ACP 的权限 若有对象的完全控制权限意味着拥有 READ READ_ACP 和 WRITE_ACP 的权限 READ_ONLY 的用户不受此限制 说明 使用头域设置 ACL 在一个请求中最多支持 100 个授权 每一次对桶或对象的授权操作都将覆盖桶或对象已有的权限列表, 而不会对其新增权限 权限控制策略 OBS 支持在创建桶或上传对象时通过头域设置桶或对象的权限控制策略, 其设置的权限控制策略只能选择预定义的几种策略 其中,x-obs-acl 比较特殊, 可以设置六种权限, 这六种权限对桶或对象的 Owner 不产生影响, 即 Owner 拥有完全控制的权限 其详细情况如下图所示 文档版本 05 ( ) 版权所有 华为技术有限公司 37

43 5 权限控制 表 5-2 OBS 预定义的权限控制策略 预定义的权限控制策略 private public-read public-read-write public-read-delivered 描述 桶或对象的所有者拥有完全控制的权限, 其他任何人都没有访问权限 设在桶上, 所有人可以获取该桶内对象列表 桶内多段任务 桶的元数据 桶的多版本 设在对象上, 所有人可以获取该对象内容和元数据 设在桶上, 所有人可以获取该桶内对象列表 桶内多段任务 桶的元数据 上传对象删除对象 初始化段任务 上传段 合并段 拷贝段 取消多段上传任务 设在对象上, 所有人可以获取该对象内容和元数据 设在桶上, 所有人可以获取该桶内对象列表 桶内多段任务 桶的元数据, 可以获取该桶内对象的内容和元数据 不能应用在对象上 设在桶上, 所有人可以获取该桶内对象列表 桶内多段任务 桶的元数据 上传对象删除对象 初始化段任务 上传段 合并段 拷贝段 取消多段上传任务, 可以获取该桶内对象的内容和元数据 不能应用在对象上 设在桶上, 桶的所有者拥有完全控制的权限, 其他任何人都没有访问权限 设在对象上, 桶或对象的所有者拥有完全控制的权限, 其他任何人都没有访问权限 说明系统默认权限控制策略为 private 权限 在创建桶或上传对象时, 可以用来设置权限控制策略的其他头域如下所示 : 表 5-3 通过头域设置桶或对象 acl 的头域格式 头域 x-obs-grant-read x-obs-grant-write public-read-writedelivered bucket-owner-fullcontrol x-obs-grant-readacp x-obs-grant-writeacp 含义授权给指定 domain 下的所有用户有 READ 权限 授权给指定 domain 下的所有用户有 WRITE 权限 授权给指定 domain 下的所有用户有 READ_ACP 权限 授权给指定 domain 下的所有用户有 WRITE_ACP 权限 文档版本 05 ( ) 版权所有 华为技术有限公司 38

44 5 权限控制 头域 x-obs-grant-fullcontrol x-obs-grant-readdelivered x-obs-grant- fullcontrol- delivered 含义 授权给指定 domain 下的所有用户有 FULL_CONTROL 权限 授权给指定 domain 下的所有用户有对桶和桶内对象的 READ 权限, 且对象继承桶权限 不能应用在对象上 授权给指定 domain 下的所有用户有对桶和桶内对象的 FULL_CONTROL 权限, 且对象继承桶权限 不能应用在对象上 ACL 两种格式的转换 以下通过举例说明 ACL 两种格式的对应关系 对于桶, 举例如下 : x-obs-acl : private <AccessControlPolicy> <Owner> <ID>domainId</ID> </Owner> <AccessControlList> <Grant> <Grantee> <ID>domainId</ID> </Grantee> <Permission>FULL_CONTROL</Permission> <Delivered>false</Delivered> </Grant> </AccessControlList> </AccessControlPolicy> x-obs-acl : public-read-write <AccessControlPolicy> <Owner> <ID>domainId</ID> </Owner> <AccessControlList> <Grant> <Grantee> <ID>domainId</ID> </Grantee> <Permission>FULL_CONTROL</Permission> <Delivered>false</Delivered> </Grant> <Grant> <Grantee> <Canned>Everyone</Canned> </Grantee> <Permission>READ</Permission> <Delivered>false</Delivered> </Grant> <Grant> <Grantee> <Canned>Everyone</Canned> </Grantee> <Permission>WRITE</Permission> <Delivered>false</Delivered> </Grant> </AccessControlList> </AccessControlPolicy> 文档版本 05 ( ) 版权所有 华为技术有限公司 39

45 5 权限控制 x-obs-acl : public-read-write-delivered <AccessControlPolicy> <Owner> <ID>domainId</ID> </Owner> <AccessControlList> <Grant> <Grantee> <ID>domainId</ID> </Grantee> <Permission>FULL_CONTROL</Permission> <Delivered>false</Delivered> </Grant> <Grant> <Grantee> <Canned>Everyone</Canned> </Grantee> <Permission>READ</Permission> <Delivered>true</Delivered> </Grant> <Grant> <Grantee> <Canned>Everyone</Canned> </Grantee> <Permission>WRITE</Permission> <Delivered>true</Delivered> </Grant> </AccessControlList> </AccessControlPolicy> x-obs-grant-read-write-delivered : id= domainid1 <AccessControlPolicy> <Owner> <ID>domainId</ID> </Owner> <AccessControlList> <Grant> <Grantee> <ID>domainId</ID> </Grantee> <Permission>FULL_CONTROL</Permission> <Delivered>false</Delivered> </Grant> <Grant> <Grantee> <ID>domainId1</ID> </Grantee> <Permission>READ</Permission> <Delivered>true</Delivered> </Grant> <Grant> <Grantee> <ID>domainId1</ID> </Grantee> <Permission>WRITE</Permission> <Delivered>true</Delivered> </Grant> </AccessControlList> </AccessControlPolicy> x-obs-grant-read : id=domainid1 <AccessControlPolicy> <Owner> <ID>domainId</ID> </Owner> <AccessControlList> <Grant> <Grantee> <ID>domainId</ID> </Grantee> 文档版本 05 ( ) 版权所有 华为技术有限公司 40

46 5 权限控制 <Permission>FULL_CONTROL</Permission> <Delivered>false</Delivered> </Grant> <Grant> <Grantee> <ID>domainId1</ID> </Grantee> <Permission>READ</Permission> <Delivered>false</Delivered> </Grant> </AccessControlList> </AccessControlPolicy> 对于对象, 举例如下 : x-obs-acl : private <AccessControlPolicy> <Owner> <ID>domainId</ID> </Owner> <Delivered>true</Delivered> <AccessControlList> <Grant> <Grantee> <ID>domainId</ID> </Grantee> <Permission>FULL_CONTROL</Permission> </Grant> </AccessControlList> </AccessControlPolicy> x-obs-acl : public-read-write <AccessControlPolicy> <Owner> <ID>domainId</ID> </Owner> <Delivered>true</Delivered> <AccessControlList> <Grant> <Grantee> <ID>domainId</ID> </Grantee> <Permission>FULL_CONTROL</Permission> </Grant> <Grant> <Grantee> <Canned>Everyone</Canned> </Grantee> <Permission>READ</Permission> </Grant> <Grant> <Grantee> <Canned>Everyone</Canned> </Grantee> <Permission>WRITE</Permission> </Grant> </AccessControlList> </AccessControlPolicy> x-obs-grant-read : id=domainid1 <AccessControlPolicy> <Owner> <ID>domainId</ID> </Owner> <Delivered>true</Delivered> <AccessControlList> <Grant> <Grantee> <ID>domainId</ID> </Grantee> 文档版本 05 ( ) 版权所有 华为技术有限公司 41

47 5 权限控制 ACL 应用实例 <Permission>FULL_CONTROL</Permission> </Grant> <Grant> <Grantee> <ID>domainId1</ID> </Grantee> <Permission>READ</Permission> </Grant> </AccessControlList> </AccessControlPolicy> 实例 1: 创建桶用于存放静态网页 在您调用 API 创建桶时, 通过携带 ACL 头域为 x-obs-acl : public-read-delivered, 桶创建成功后, 再上传对象时, 不需要再单独设置过对象的 acl, 也不需要携带单独的 acl 头域 实例 2: 桶中部分文件需要共享给特定用户 1 和用户 2, 少量文件共享给用户 3, 部分文件不能共享 用户创建桶, 设置桶的 ACL 为 x-obs-grant-read-delivered:id=domainid1, id=domainid2; 用户再上传对象, 需要共享给用户 1 和用户 2 的对象对象上传时默认不携带 ACL; 需要共享给用户 3 的对象上传时携带 x-obs-grant-read:id=domainid3; 不共享的对象上传之后, 设置 acl 为 <Delivered>false</Delivered> 5.4 使用桶策略 (Bucket policy) 桶策略简介 桶策略可基于各种条件, 如 OBS 操作 授权者 资源和请求的其他要素 ( 如 IP 地址 ) 提供对桶和对象的集中访问控制 附加到某个桶上的权限适用于该桶内所有对象 租户可基于各种条件授予权限给桶策略和员工 例如, 租户可以按以下维度制定策略, 授予某用户的写权限 : 给予用户特定的桶的写权限 给予特定的网络中的用户写权限 给予用户的自定程序写权限 访问控制列表 (access control lists,acl) 只能对单个对象进行权限的添加, 而桶策略可对一个桶内的所有对象进行权限的添加和禁止 租户可通过同一请求对某桶内任意数量的对象进行权限设置 此外, 租户还可以对资源名称及其他值添加通配符 ( 类似于正则表达式运算符 ), 从而实现对一组对象的访问控制 Bucket Policy 允许桶的所有者执行 Put Bucket Policy 操作, 给 Bucket 设置访问控制策略, 如果 Bucket 已有 Policy, 则新的 Policy 会覆盖老的 Policy Bucket Owner 也可以执行 Get Bucket Policy 或 Delete Bucket Policy 操作, 获取或删除已设置的 Bucket Policy 设置 Policy 后, 后续对此 Bucket 的访问请求都会受到 Policy 的限制, 表现为拒绝或接受请求 对拒绝或接受的判断, 取决于 Policy 的描述 如下所示的 Policy 允许租户 783fc6652cf246c096ea836694f71855 ( 域 ID) 和 219d520ceac84c5a98b237431a2cf4c2 ( 域 ID) 对桶 mybucket 下的所有对象执行 GetObject 权限 : { "Statement" : [ { "Effect":"Allow", "Sid":"1", 文档版本 05 ( ) 版权所有 华为技术有限公司 42

48 5 权限控制 } ] "Principal" : { "ID":["domain/783fc6652cf246c096ea836694f71855", "domain/219d520ceac84c5a98b237431a2cf4c2"] }, "Action":["GetObject"], "Resource":"mybucket/*" } Policy 格式 一个 Policy 由 JSON 描述, 格式定义为 : { "Statement" : [{ statement1 }, { statement2 },... ] } 实例如下所示 : { "Statement" : [{ "Sid": "ExampleStatementID1", "Effect": "Allow", "Action": "ListBucket", "Resource": "examplebucket", "Condition": "some conditions" }, { "Sid": "ExampleStatementID2", "Effect": "Allow", "Action": "PutObject", "Resource": "examplebucket", "Condition": "some conditions" },... ] } Policy 由多条 statement 组成, 也可以是一条 每条 statement 的结构包括下表内容 : 表 5-4 statement 结构 元素描述是否必选 Sid statement Id, 可选关键字, 描述 statement 的字符串可选 Principal NotPrincipal 可选关键字, 被授权人, 指定本条 statement 权限针对的 Domain 或 User, 支持通配符 *, 表示所有用户 当对 Domain 进行授权时,Principal 格式为 domain/domainid domain/domainid:root 当对 User 进行授权时,Principal 格式为 domain/domainid:user/ userid 或者 domain/domainid:user/username 可选关键字, 不被授权人,statement 匹配除该其之外的其他人 取值同 Principal 可选,Principal 与 NotPrincipal 选其一 可选, NotPrincipal 与 Principal 选其一 文档版本 05 ( ) 版权所有 华为技术有限公司 43

49 5 权限控制 元素描述是否必选 Action 可选关键字, 指定本条 statement 作用的操作, Action 字段为 OBS 支持的所有操作集合, 以字符串形式表示, 不区分大小写 支持通配符 *, 表示该资源能进行的所有操作 例如 :"Action":["List*", "Get*"] 可选,Action 与 NotAction 选其一 NotAction Effect Resource NotResourc e 可选关键字, 指定一组操作,statement 匹配除该组操作之外的其他操作 取值同 Action 必选关键字, 效果, 指定本条 statement 的权限是允许还是拒绝,Effect 的值必须为 Allow 或者 Deny 可选关键字, 指定 statement 起作用的一组资源, 支持通配符 *, 表示所有资源 可选关键字, 指定一组资源,statement 匹配除该组资源之外的其他资源 取值同 Resource 可选, NotAction 与 Action 选其一 必选 可选,Resource 与 NotResource 选其一 可选, NotResource 与 Resource 选其一 Condition 可选关键字, 本条 statement 生效的条件 可选 说明 Principal / NotPrincipal 在单条 statement 中,Action 与 NotAction 必须二选一,Resource 与 NotResource 必须二选一, Principal 与 NotPrincipal 必须二选一 OBS 支持的 Principal 或 NotPrincipal 有匿名用户 特定租户 特定用户 联合身份用户, 委托用户 所有人 ( 匿名用户 ) "Principal": {"ID": "*"} 在示例中, 使用星号 (*) 作为 Everyone/Anonymous 的占位符 我们还强烈建议您不要在角色的信任策略中的 Principal 元素里使用通配符, 除非您在该策略中通过 Condition 元素对访问进行了限制 特定租户 当在策略中使用租户标识符作为授权人时, 可将策略语句中的权限授给该租户中包含的所有身份 这包括该租户下所有用户 以下示例演示了将租户指定为授权人的不同方法 "Principal": { "ID": " domain/domainidxxxx" } 您可以授权给多个租户, 如以下示例所示 : "Principal": { "ID": [ "domain/domainidxx1:user/useridxxxx", "domain/domainidxx1" ] } 文档版本 05 ( ) 版权所有 华为技术有限公司 44

50 5 权限控制 Action / NotAction 特定用户 在 Principal 元素中, 用户名区分大小写 "Principal": {"ID": "domain/domainidxxx:user/user-name" } "Principal": { "ID": [ "domain/domainidxxx:user/userid1", "domain/domainidxxx:user/userid2" ] } 当在 Principal 元素中指定用户时, 不能使用通配符 (*) 表示授权给 所有用户, 授权给所有 domain 下所有用户可以使用授权给特定租户方式 联合身份用户 ( 使用 SAML 身份提供商 ) "Principal": { "Federated": "domain/domainidxxx:identity-provider/provider-name" } "Principal": { "Federated": "domain/domainidxxx:group/groupname" } 委托用户 "Principal": { "ID": "domain/domainidxxx:agency/agencyname" } OBS 支持的桶 Action 或 NotAction 有 : CreateBucket DeleteBucket HeadBucket ListBucket ListBucketVersions ListBucketMultipartUploads GetBucketAcl PutBucketAcl GetBucketCORS PutBucketCORS GetBucketVersioning PutBucketVersioning GetBucketLocation GetBucketPolicy DeleteBucketPolicy PutBucketPolicy GetBucketLogging PutBucketLogging GetBucketWebsite PutBucketWebsite DeleteBucketWebsite GetLifecycleConfiguration PutLifecycleConfiguration 文档版本 05 ( ) 版权所有 华为技术有限公司 45

51 5 权限控制 GetBucketNotification PutBucketNotification GetReplicationConfiguration OBS 支持的对象 Action 或 NotAction 有 : GetObject( 可作用于 GET Object, HEAD Object) GetObjectVersion PutObject( 可作用于 PUT Object, POST Object, Initiate Multipart Upload,Upload Part, Complete Multipart Upload) GetObjectAcl GetObjectVersionAcl PutObjectAcl PutObjectVersionAcl DeleteObject DeleteObjectVersion ListMultipartUploadParts AbortMultipartUpload RestoreObject ReplicateObject ReplicateDelete Resource / NotResource OBS 支持操作 Resource 表示 : bucketname ( 桶操作 ): 在上面 Action 中有 支持的桶 Action 列表, 如果要对桶执行列表中的操作, 则 Resource 中只填写桶名 bucketname/objectname ( 对象操作 ): 在上面 Action 中有 支持的对象 Action 列表, 如果要对桶中对象执行响应的操作, 则 Resource 需要填写 bucketname/ objectname objectname 支持通配符, 比如对桶下 directory 目录对象有权限, 则 Resource 填写为 bucketname/director/* ; 如果对桶下所有对象都有权限, 则 Resource 填写为 bucketname/* ; 如果同时需要对桶和桶下对象都有权限, 则 Resource 填写为 ["examplebucket/*","examplebucket"] 以下示例策略向租户 b4bf1b36d9ca43d984fbcb9491b6fce9 ( 域 ID) 下的用户 ID 为 71f e ea2c26d1999 的 user1 用户授予 examplebucket 的所有操作权限 ( 包含桶操作与对象操作 ) { "Statement":[ { "Sid":"test", "Effect":"Allow", "Principal": {"ID": ["domain/b4bf1b36d9ca43d984fbcb9491b6fce9:user/ 71f e ea2c26d1999"]}, "Action":["*"], "Resource":["examplebucket/*","examplebucket"] } ] } 文档版本 05 ( ) 版权所有 华为技术有限公司 46

52 5 权限控制 Condition Statement 中可选的 Condition 判断类型如下表所示 : 表 5-5 Condition 类型 关键字 说明 String StringEquals 字符串匹配, 简化为 :streq StringNotEquals 字符串不匹配, 简化为 :strneq StringEqualsIgnoreCase 忽略大小写的字符串匹配, 简化为 : streqi StringNotEqualsIgnoreCase 忽略大小写的字符串不匹配, 简化为 : strneqi StringLike StringNotLike 宽松的区分大小写的匹配 这些值可以在字符串中的任何地方包括一个多字符匹配的通配符 (*) 和单字符匹配通配符 (?) 简化为 :strl 非宽松区分大小写的匹配 这些值可以在字符串中的任何地方包括一个多字符匹配的通配符 (*) 和单字符匹配通配符 (?) 简化为 :strnl Numeric NumericEquals 相等, 简化为 :numeq NumericNotEquals NumericLessThan NumericLessThanEquals NumericGreaterThan NumericGreaterThanEquals 不相等, 简化为 :numneq 小于, 简化为 :numlt 小于等于, 简化为 :numlteq 大于, 简化为 :numgt 大于等于, 简化为 :numgteq Date DateEquals 日期时间相等, 简化为 :dateeq DateNotEquals DateLessThan DateLessThanEquals DateGreaterThan DateGreaterThanEquals 日期时间不相等, 简化为 :dateneq 日期时间小于, 简化为 :datelt 日期时间小于等于, 简化为 :datelteq 日期时间大于, 简化为 :dategt 日期时间大于等于, 简化为 :dategteq Boolean Bool 严格布尔值相等 IP address IpAddress 指定的 IP 或 IP 范围 NotIpAddress 除指定的 IP 或 IP 范围外所有 IP 文档版本 05 ( ) 版权所有 华为技术有限公司 47

53 5 权限控制 说明 Condition 关键字区分大小写 Date 格式符合 ISO 8601 规范, 例如 : T12:00:00Z 每个 Condition 块可以包含多个 key-value 的组合 如下图的 Condition 组合表示的判断条件为请求时间从 T12:00:00Z 到 T15:00:00Z, 请求的 IP 地址范围是 /24" 或 " /24" 网段的请求 "Condition" : { "DateGreaterThan" : { "CurrentTime" : " T12:00:00Z" }, "DateLessThan": { "CurrentTime" : " T15:00:00Z" }, "IpAddress" : { "SourceIp" : [" /24"," /24"] } } Condition 块中可选的 key 包括两种 : 和 Action 无关的通用 key 和 Action 有关系的 key 和 Action 无关的 key 包括 : 表 5-6 Common Condition Key Condition Key CurrentTime EpochTime SecureTransport SourceIp UserAgent Referer Condition Type Date Numeric Bool IP address String String Condition 中的 Key 需要在一定的 Action 才能使用,Action 和 Condtion 中 Key 配对使用关系如下表所示 : 表 5-7 OBS Action Condition Key Action 可选 Key 描述 CreateBucket x-obs-acl 创建桶时在头域 x-obs-acl 中可以包含的 Canned ACL 取值范围为 private public-read public-read-write public-read-delivered publicread-write-delivered ListBucket prefix String 类型 delimiter max-keys String 类型 Numeric 类型 文档版本 05 ( ) 版权所有 华为技术有限公司 48

54 5 权限控制 Action 可选 Key 描述 ListBucketVersio ns prefix delimiter max-keys String 类型 String 类型 Numeric 类型 PutObject x-obs-acl 上传对象时在头域 x-obs-acl 中可以包含的 Canned ACL 取值范围为 private public-read public-read-write x-obs-copy-source PutBucketAcl x-obs-acl 修改桶 ACL 时在头域 x-obs-acl 中可以包含的 Canned ACL 取值范围为 private public-read public-read-write public-read-delivered publicread-write-delivered x-obs-metadatadirective String, 格式如 /bucketname/keyname 取值范围为 COPY REPLACE PutObjectAcl x-obs-acl 修改对象 ACL 时在头域 x-obs-acl 中可以包含 的 Canned ACL 取值范围为 private publicread public-read-write GetObjectVersio n GetObjectVersio nacl PutObjectVersion Acl DeleteObjectVers ion VersionId VersionId VersionId x-obs-acl VersionId Sring 类型 Sring 类型 Sring 类型 修改对象版本 ACL 时在头域 x-obs-acl 中可以包含的 Canned ACL 取值范围为 private public-read public-read-write Sring 类型 Policy 权限判断逻辑 Policy 在做权限判断时, 每条 statement 会有 3 种结果,explicit deny allow 和 default deny Bucket Policy 对于 Policy 中的多条 statement 采用以下规则进行判定 :Bucket Policy 对 Policy 中包含的每条 statement 都要进行 Explicit Deny Allow 和 Default Deny 的判断, 最终的判决结果遵循 explicit deny>allow>default deny 的规则 ; 1. 如果没有显式的 Deny 和 Allow, 则请求权限判别为 Default Deny 2. 显式的 Deny 覆盖 Allow; 3.Allow 覆盖默认的 Default Deny; 4.statement 的顺序没有影响 文档版本 05 ( ) 版权所有 华为技术有限公司 49

55 5 权限控制 表 5-8 Statement Result 名称 explicit deny allow default deny 说明 显式拒绝访问, 资源匹配的 statement 中 effect="deny", 表明 Request 无法进行访问, 此时直接返回无权限失败 允许访问, 资源匹配的 statement 中 effect="allow", 表明 Request 可以进行访问, 继续下一条 statement 判断 默认拒绝访问, 在没有任何一条 statement 与 Request 匹配上, 默认本次 Request 无法进行访问 桶策略实例 向 OBS 用户授予权限 如果 ACL 和 Bucket Policy 同时使用, 则 ACL 对某个租户的授权结果 allow, 可以被 Bucket Policy 的显示 Deny 覆盖 如果 Bucket Policy 和 IAM Policy 同时使用, 同样遵循 explicit deny>allow>default deny 的规则 SSE-KMS 服务端加密对象, 不支持 Bucket ACL/Policy 进行跨租户授权访问 本节介绍几个关于桶策略的典型使用案例示例 策略在资源值中使用 examplebucket 字符串来描述桶名 要测试这些策略, 您需要将这些字符串替换为您的桶名称, 需要修改被授权的用户为您需要授权的用户 以下示例策略向租户 b4bf1b36d9ca43d984fbcb9491b6fce9 ( 租户 ID) 下的用户 ID 为 71f e ea2c26d1999 的用户授予 PutObject 和 PutObjectAcl 权限 { "Statement":[ { "Sid":"AddCannedAcl", "Effect":"Allow", "Principal": {"ID": ["domain/b4bf1b36d9ca43d984fbcb9491b6fce9:user/ 71f e ea2c26d1999"]}, "Action":["PutObject","PutObjectAcl"], "Resource":["examplebucket/*"] } ] } 向 OBS 用户授予指定桶的所有操作权限 以下示例策略向租户 b4bf1b36d9ca43d984fbcb9491b6fce9 ( 租户 ID) 下的用户 ID 为 71f e ea2c26d1999 的用户授予 examplebucket 的所有操作权限 ( 包含桶操作与对象操作 ) { "Statement":[ { "Sid":"test", "Effect":"Allow", "Principal": {"ID": ["domain/b4bf1b36d9ca43d984fbcb9491b6fce9:user/ 71f e ea2c26d1999"]}, 文档版本 05 ( ) 版权所有 华为技术有限公司 50

56 5 权限控制 "Action":["*"], "Resource":[ "examplebucket/*", "examplebucket" ] } ] } 向 OBS 用户授予除删除对象外的所有对象操作权限 以下示例策略向租户 b4bf1b36d9ca43d984fbcb9491b6fce9 ( 租户 ID) 下的用户 ID 为 71f e ea2c26d1999 的用户授予 examplebucket 除删除对象外的所有对象操作权限 { "Statement":[ { "Sid":"test1", "Effect":"Allow", "Principal": {"ID": ["domain/b4bf1b36d9ca43d984fbcb9491b6fce9:user/ 71f e ea2c26d1999"]}, "Action":["*"], "Resource":["examplebucket/*"] }, { "Sid":"test2", "Effect":"Deny", "Principal": {"ID": ["domain/b4bf1b36d9ca43d984fbcb9491b6fce9:user/ 71f e ea2c26d1999"]}, "Action":["DeleteObject"], "Resource":["examplebucket/*"] } ] } 在添加条件的情况下向多个租户授予权限 向匿名用户授予只读权限 以下示例策略向 OBS 租户 783fc6652cf246c096ea836694f71855 ( 租户 ID) 和 219d520ceac84c5a98b237431a2cf4c2 ( 租户 ID) 授予 PutObject 和 PutObjectAcl 权限, 并要求针对这些操作的任何请求都包含 public-read 标准 ACL { "Statement":[ { "Sid":"AddAcl", "Effect":"Allow", "Principal": {"ID": ["domain/783fc6652cf246c096ea836694f71855","domain/ 219d520ceac84c5a98b237431a2cf4c2"]}, "Action":["PutObject","PutObjectAcl"], "Resource":["examplebucket/*"], "Condition":{"StringEquals":{"x-obs-acl":["public-read"]}} } ] } 下面的示例策略向匿名用户 ( 非公有云用户 ) 授予 GetObject( 下载对象 ) 权限 此权限允许任何人读取桶中通拥有者上传的所有对象数据, 当您将桶配置为网站并且希望每个人都能读取桶中的对象时, 这十分有用 { "Statement":[ { 文档版本 05 ( ) 版权所有 华为技术有限公司 51

57 5 权限控制 "Sid":"AddPerm", "Effect":"Allow", "Principal": "*", "Action":["GetObject"], "Resource":["examplebucket/*"] } ] } 向匿名用户授予指定对象的只读权限 下面的示例策略向匿名用户授予 examplebucket 桶中 exampleobject 的 GetObject ( 下载对象 ) 权限 此权限允许任何人读取对象 exampleobject 的数据 { "Statement":[ { "Sid":"AddPerm", "Effect":"Allow", "Principal": "*", "Action":["GetObject"], "Resource":["examplebucket/exampleobject"] } ] } 限制对特定 IP 地址的访问权限 以下示例向任何用户授予对指定桶中的对象执行任何 OBS 操作的权限 但是, 请求必须来自条件中指定的 IP 地址范围 此语句的条件确定允许的 IP 地址范围为 *, 只有一个例外 : Condition 块使用 IpAddress 和 NotIpAddress 条件以及 SourceIp 条件键 ( 这是 OBS 范围的条件键 ) 另请注意 sourceip 值使用 RFC 4632 中描述的 CIDR 表示法 { "Statement": [ { "Sid": "IPAllow", "Effect": "Allow", "Principal": "*", "Action": "*", "Resource": "examplebucket/*", "Condition": { "IpAddress": {"SourceIp": " /24"}, "NotIpAddress": {"SourceIp": " /32"} } } ] } 限制对特定 HTTP 引用站点的访问 假设您拥有一个网站, 其域名为 ( 或 example.com), 并且带有指向存储在 OBS 桶中的照片和视频的链接 examplebucket 通过权限设置, 桶中所有对象允许匿名用户访问, 但只允许从您的网站对这些对象进行读取访问, 您可以添加一个桶策略允许 GetObject 的 Condition 条件, 即获取请求必须来自特定的网页 该功能 OBS 称之为防盗链, 具体参考 防盗链设置 授予从限定复制源复制对象的 PutObject 权限 对于 PUT Object 请求, 当用户指定一个源对象, 这就是复制操作 相应的, 桶所有者会授予用户复制对象的权限, 但对源对象有所限制, 例如 : 文档版本 05 ( ) 版权所有 华为技术有限公司 52

58 5 权限控制 仅允许复制桶 sourcebucket 中的对象 允许复制桶 sourcebucket 中以 public/ 为前缀开头的对象 例如 sourcebucket/ public/* 仅允许复制桶 sourcebucket 中的某个特定对象 例如 sourcebucket/example.jpg 下面的示例桶策略授予 PutObject( 上传对象和拷贝对象 ) 权限给租户 b4bf1b36d9ca43d984fbcb9491b6fce9( 域 ID) 下用户 71f e ea2c26d1999( 用户 ID), 但不允许拷贝 sourcebucket 桶中的以 public/ 为前缀的对象名 { "Statement": [ { "Sid": "putobject", "Effect": "Allow", "Principal": { "ID": "domain/b4bf1b36d9ca43d984fbcb9491b6fce9:user/ 71f e ea2c26d1999" }, "Action": ["PutObject"], "Resource": "examplebucket/*" }, { "Sid": "Deny copy /bucket/folder", "Effect": "Deny", "Principal": { "ID": "domain/b4bf1b36d9ca43d984fbcb9491b6fce9:user/ 71f e ea2c26d1999" }, "Action": "PutObject", "Resource": "examplebucket/*", "Condition": { "StringNotLike": { "x-obs-copy-source": "sourcebucket/public/*" } } } ] } 授予访问对象指定版本的权限 假设租户 A 的桶开启了多版本功能, 该桶包含对象 obj01 的多个版本, 租户管理员现在想要授予它的用户 71f e ea2c26d1999( 用户 ID) 仅获取该对象指定版本的权限 该租户管理员仅需按要求授予下载指定版本对象权限, 如下所示 Condition 里的键值对指定了 VersionId 条件的 key { "Statement": [ { "Sid": "statement1", "Effect": "Allow", "Principal": { "ID": "domain/b4bf1b36d9ca43d984fbcb9491b6fce9:user/ 71f e ea2c26d1999" }, "Action": ["GetObjectVersion"], "Resource": "examplebucket/obj01" }, { "Sid": "statement2", "Effect": "Deny", "Principal": { "ID": "domain/b4bf1b36d9ca43d984fbcb9491b6fce9:user/ 71f e ea2c26d1999" 文档版本 05 ( ) 版权所有 华为技术有限公司 53

59 5 权限控制 }, "Action": ["GetObjectVersion"], "Resource": "examplebucket/obj01", "Condition": { "StringNotEquals": { "VersionId": " C76E7B6FE8bf6559fe44bab b811bb a" } } } ] } 允许用户根据特定前缀获取桶中的对象列表 桶所有者可以限制用户列举桶中指定文件夹的内容 如果桶中对象是按照键值名前缀组织分类, 这会比较有用 OBS Console 会通过前缀显示文件夹的层级 此条件将用户限定于列出具有 examplefolder 前缀的对象键 添加的显式拒绝将拒绝用户列出具有其他任何前缀的键, 无论该用户可能具有其他什么权限 例如, 该用户有可能获得列出没有任何限制的对象键的权限, 例如通过更新先前用户策略或通过桶策略 但由于显式拒绝始终会取代其他任何权限, 因此列出非 examplefolder 前缀的键的用户请求将被拒绝 { } "Statement":[ { "Sid":"statement1", "Effect":"Allow", "Principal": { "ID": "domain/783fc6652cf246c096ea836694f71855" }, "Action":[ "ListBucket" ], "Resource":[ "examplebucket" ], "Condition" : { "StringEquals" : { "prefix": "examplefolder" } } }, { "Sid":"statement2", "Effect":"Deny", "Principal": { "ID": "domain/783fc6652cf246c096ea836694f71855" }, "Action":[ "ListBucket" ], "Resource":[ "examplebucket" ], "Condition" : { "StringNotEquals" : { "prefix": "examplefolder" } } } ] 文档版本 05 ( ) 版权所有 华为技术有限公司 54

60 5 权限控制 防盗链设置 OBS 是按使用收费的服务, 为了防止用户在 OBS 的数据被其他人盗链,OBS 支持基于 HTTP header 中表头字段 referer 的防盗链方法 OBS 同时支持访问白名单和访问黑名单的设置 白名单设置 通过设置白名单, 用户可以指定允许来自白名单列表中的网站的请求访问, 否则将进行拦截 通过浏览器地址栏直接访问资源的请求, 即 HTTP 请求中 referer 为空的场景, 用户可以通过在 Condition 的 "Referer" 中添加 ${null} 字段, 用于指定是否允许 referer 为空的请求访问 白名单设置具体参考如下 policy 设置进行实现 : "Statement":[ {"Sid": "1", "Effect": "Allow", "Principal": {"ID":["*"]}, "Action": "*", "Resource":["bucket/*"], }, {"Sid":"2", "Effect":"Deny", "Principal":{"ID":["*"]}, "Action":["*"], "Resource":["bucket/*"], "Condition":{ "StringNotEquals": {"Referer":[" } } ] 如果按照此方式设置, 只有 referer 为 " 和 referer 为空的请求可以对桶 bucket 中的资源进行操作 黑名单设置 使用访问黑名单功能可以参考如下 policy 设置进行实现 : "Statement":[ {"Sid":"1", "Effect":"Deny", "Principal":{"ID":["*"]}, "Action":["*"], "Resource":["bucket/*"], "Condition":{ "StringEquals": {"Referer":[" } } ] 如果按照此方式设置, 当 referer 为 " 或 " 时, 就不能对桶 bucket 中的资源进行操作 5.5 IAM 用户策略 管理员租户可以在 统一身份认证服务 界面设置用户组的策略, 然后将 IAM 用户加到不同用户组组中, 从而让用户拥有不同的权限, 详细信息请参考 :IAM 用户策略 在 IAM 策略中有 3 中和 OBS 相关的策略, 如下图所示 : 文档版本 05 ( ) 版权所有 华为技术有限公司 55

61 5 权限控制 表 5-9 IAM 和 OBS 相关的用户策略 名称 OBS Buckets Viewer OBS Administrator Tenant Guest 描述 只有查看桶列 桶中对象列表 查询桶位置权限, 无其他权限 OBS 管理员角色, 拥有 OBS 服务所有 OBS 操作的权限 只读权限, 仅拥有查询 列举 下载等读操作权限, 无权限创建桶 上传对象等写操作 除了上述 3 种用户策略外, 用户可以没有任何和 OBS 相关的权限 一个用户可以加到多个组, 如果用户加入多个组后, 用户则具有多个组的权限叠加后的权限 比如组 1 只有 OBS Buckets Viewer 权限, 组 2 只有 Tenant Administrator 权限, IAM 用户加入组 1 同时也加入组 2, 则用户拥有 OBS Buckets Viewer 和 Tenant Administrator 叠加后的权限 拥有 OBS Administrator 的用户创建桶之后, 通过 ACL 或桶策略将桶授权给 Tenant Guest OBS Buckets Viewer 或完全没有 OBS 权限的用户, 从而实现对用户的细粒度权限控制 5.6 权限控制实例 本节主要描述各种常见授权应用场景, 及各种组合授权方案 场景一 : 租户下有多个 IAM USER, 每个 USER 只能访问自己的桶 由于等 OBS CONSOLE 时, 需要列举租户的所有桶, 因为 OBS CONSOLE 无法使用满足该需求, 只能使用 OBS SDK OBS BROWSER OBS CMD 等工具来实现该功能 步骤 1 使用租户 ( 获取具有 OBS 权限的 IAM USER) 登录统一身份认证服务, 并创建一个 IAM 用户, 创建 IAM 用户后, 需要将用户加入用户组, 创建 IAM 用户和用户组请参考如何创建用户, 不要对该用户组授予 OBS 权限, 如下图所在, 在编辑用户组权限时不要选择 OBS 相关的任何权限 文档版本 05 ( ) 版权所有 华为技术有限公司 56

62 5 权限控制 在创建完用户后记录下用户的 ID 信息, 如下图中红框所示, 用于授权时使用 步骤 2 在统一身份认证服务中, 为新创建的用户创建凭证 (AK/SK), 方法如下图所示 : 步骤 3 使用租户 ( 获取具有 OBS 权限的 IAM user) 登录 OBS console, 创建桶 当然也可以用租户 ( 获取具有 OBS 权限的 IAM user) 的 ak/sk 在 OBS SDK OBS browser 工具中创建桶 创建桶完成后, 新增一条策略, 其中资源为空 ( 表明是对桶授权, 如能设置 查询桶日志 多版本 生命周期能权限 ), 如下图所示 : 文档版本 05 ( ) 版权所有 华为技术有限公司 57

63 5 权限控制 其中被授权用户是步骤 1 中创建的用户 ID 及归属租户 ID, b4bf1b36d9ca43d984fbcb9491b6fce9:user/04e e ea2c26d1999, 其中 04e e ea2c26d1999 是用户 ID,b4bf1b36d9ca43d984fbcb9491b6fce9 是用户 04e e ea2c26d1999 所属租户的租户 ID 再新一条策略, 其中资源为 *( 表明是对桶下所有对象授权, 如能列举 上传 下载 删除对象 ) 如果是通过 OBS api 设置桶策略, 则桶策略的内容应该如下所示 : 步骤 4 步骤 5 { "Statement":[ { "Sid":"allowUser2Access", "Effect":"Allow", "Principal": {"ID": ["domain/b4bf1b36d9ca43d984fbcb9491b6fce9:user/ 04e e ea2c26d1999"]}, "Action":["*"], "Resource":[ "examplebucket/*", "examplebucket" ] } ] } 使用 OBS browser 挂载外部桶访问 如果是使用 SDK 访问, 跳过这一步, 直接使用即可 打开 OBS browser, 并添加步骤 2 中创建的凭证, 具体方法参考 : 登录客户端 然后将步骤 3 中创建的桶挂载为外部桶, 具体方法参考 : 挂载外部桶 用户挂载桶成功后, 可以在 OBS browser 中上传下载对象, 当前需要在步骤 3 中授予了用户对于的权限 ---- 结束 场景二 : 注册公有云后, 让用户只有 OBS 对象读写权限 步骤 1 使用租户 ( 获取具有 OBS 权限的 IAM user) 登录统一身份认证服务, 并创建一个 IAM 用户, 创建 IAM 用户后, 需要将用户加入用户组, 创建 IAM 用户和用户组请参考如何创 文档版本 05 ( ) 版权所有 华为技术有限公司 58

64 5 权限控制 建用户, 不要对该用户组授予 OBS 权限, 如下图所在, 在编辑用户组权限时选择 OBS Buckets Viewer 权限 在创建完用户后记录下用户的 ID 信息, 如下图中红框所示, 用于授权时使用 步骤 2 使用租户 ( 获取具有 OBS 权限的 IAM user) 登录 OBS console, 创建桶 当然也可以用租户 ( 获取具有 OBS 权限的 IAM user) 的 ak/sk 在 OBS SDK OBS browser 工具中创建桶 创建桶完成后, 新增一条策略, 其中资源为 *( 表明是对桶下所有对象授权, 如能列举 上传 下载 删除对象 ) 其中被授权用户是步骤 1 中创建的用户 ID 及归属租户 ID, b4bf1b36d9ca43d984fbcb9491b6fce9:user/04e e ea2c26d1999, 其中 04e e ea2c26d1999 是用户 ID,b4bf1b36d9ca43d984fbcb9491b6fce9 是用户 04e e ea2c26d1999 所属租户的租户 ID 如果是通过 OBS api 设置桶策略, 则桶策略的内容应该如下所示 : { "Statement":[ { "Sid":"allowUser2Access", "Effect":"Allow", "Principal": {"ID": ["domain/b4bf1b36d9ca43d984fbcb9491b6fce9:user/ 04e e ea2c26d1999"]}, "Action":["*"], "Resource":[ 文档版本 05 ( ) 版权所有 华为技术有限公司 59

65 5 权限控制 "examplebucket/*" ] } ] } 步骤 3 使用步骤 1 创建的用户登录 OBS console, 进入到桶中, 可以上传下载对象 或者使用 OBS SDK 可以上传下载对象 ---- 结束 文档版本 05 ( ) 版权所有 华为技术有限公司 60

66 6 数据传输 6 数据传输 数据在到达 OBS 之前, 需要通过网络传输, 过程中面临窃听 篡改 重放等安全风险 因此 OBS 提供了传输加密技术支持 传输加密技术通常包含 : 通信对端认证 密钥协商 数据加密 完整性保护等几个环节, 可以有效认证对端 加密传输数据并确保数据完整性 OBS 通过支持 HTTPS(HTTP over SSL) 支持传输加密技术 SSL 在发展过程中经历了多个版本, 包括 :SSL2.0 SSL3.0 TLS1.0 TLS1.1 TLS1.2 综合考虑安全性和兼容性,OBS 支持 TLS1.0 TLS1.1 TLS1.2 3 个协议版本 如果您使用现代浏览器访问 OBS, 您无需做任何配置, 浏览器将自动选择高版本协议 同时我们建议您将浏览器随时保持最新版本 如果您使用 SDK 或自定义客户端访问 OBS, 大部分场景下您无需配置 但如果您的终端过于老旧而不支持上述 3 个协议版本, 将无法连接到 OBS 若出现无法连接的情况, 建议您更换终端设备或升级系统后重试 文档版本 05 ( ) 版权所有 华为技术有限公司 61

67 7 数据保护 7 数据保护 7.1 桶多版本控制 7.1 桶多版本控制 多版本状态 桶的多版本控制提供了一种桶内对象的安全性保证, 防止用户误删除对象 覆盖对象操作造成不可预料的损失 桶的多版本状态可以处于三种状态 : 未启用 启用 暂停 一旦您将桶的多版本状态设置为 启用, 它将无法返回到 未启用 状态 但是, 您可以将该桶的多版本状态设置为 暂停 如何保护数据 OBS 系统在每次创建对象时都会为该对象分配一个版本号, 版本号生成的规则取决于当前桶的多版本状态 : 当桶的版本状态为 未启用 和 暂停 时, 新创建的对象版本号为特殊字符串 null 当桶的版本状态为 启用 时, 新创建的对象版本号为一个 32~48 位长度 且全局唯一的随机字符串 保存在 OBS 系统里的任一对象, 除非被删除或被同名对象覆盖, 否则您永远可以获取到该对象 但是意外发生时, 您可能无意识的删除或覆盖了已创建的对象, 造成数据无法恢复 或者您期望保存一份数据的多个不同时期副本, 同时又想保持统一的对象名 这两种场景下, 我们推荐您启用桶的多版本特性 文档版本 05 ( ) 版权所有 华为技术有限公司 62

68 7 数据保护 表 7-1 不同状态下删除和覆盖对象的处理原则 桶的多版本状态 删除对象 覆盖对象 未启用 直接删除, 无法再获取此对象 老对象被直接覆盖, 且无法恢 复, 只能获取新对象 启用 暂停 为此对象产生一个新的删除标记, 删除标记也携带一个全局唯一的版本号, 历史版本不受影响 说明不管此对象是否存在历史版本, OBS 总是会创建一个新的删除标记, 代表在这一时刻执行过删除动作 此时 : 不携带版本号获取对象, 会提示对象不存在 携带对象历史版本号获取对象, 可以获取到对象的历史版本内容 为此对象产生一个版本号为 null 的新删除标记, 历史版本里若已存在版本号为 null 的对象或删除标记, 则将会被新的删除标记覆盖, 其他非 null 版本的对象或删除标记不受影响 说明不管此对象是否存在历史版本, OBS 总是会创建一个新的删除标记, 代表在这一时刻执行过删除动作 此时 : 不携带版本号获取对象, 会提示对象不存在 携带对象历史版本号获取对象, 可以获取到对象的历史版本内容 为此对象产生一个新版本, 历史版本不受影响 此时 : 不携带版本号获取对象, 取得对象的当前最新版本内容 携带对象历史版本号获取对象, 取得对象的历史版本内容 为此对象产生一个版本号为 null 的新版本, 历史版本里若已存在版本号为 null 的对象或删除标记, 则将会被新的删除标记覆盖, 其他非 null 版本的对象或删除标记不受影响 此时 : 不携带版本号获取对象, 取得对象的当前最新版本内容 携带对象历史版本号获取对象, 可以获取到对象的历史版本内容 说明 为易于理解, 下图中的版本号均以简短版本代替, 仅作以示意 下图所示启用多版本状态时连续执行创建对象操作, 对象虽然被覆盖了多次, 但每次都会产生一个新的版本号独立存在 文档版本 05 ( ) 版权所有 华为技术有限公司 63

69 7 数据保护 下图所示启用多版本状态时执行删除对象操作, 历史版本对象不会被真正删除, 而是产生一个删除标记来标识对象的当前版本是删除状态 通过列举桶中对象接口 ( 列举多版本对象 ), 可以看到桶中的删除标记 最新对象是删除标记的情况下再次上传对象, 删除标记不会消失, 而是做为一个过程版本仍然存放在 OBS 中 下图所示暂停多版本状态时创建对象, 历史版本数据继续保留, 新创建的对象版本号为 null 如果再重复创建该对象将产生新的 null 版本, 并自动把前一次的 null 版本覆盖 文档版本 05 ( ) 版权所有 华为技术有限公司 64

70 7 数据保护 指定版本删除 由于对象版本号总是由 OBS 系统分配, 您无法在创建对象时携带自定义的版本号 但是, 在下载或删除对象时, 你可以携带版本号对指定版本进行操作 下图展示了删除指定版本对象后桶中多版本对象变化情况 : 携带版本号删除对象的指定版本,OBS 将不再保持该对象的指定历史版本数据, 并在该对象的所有历史版本列表中移除 特别地, 如果接着图中删除 版本的对象, 则对象的最新版本会变为 此时不带版本号获取对象时, 会取得 版本的对象 暂停 状态与 未启用 状态的区别 暂停 状态和 未启用 状态, 新创建的对象版本号均为 null, 均会覆盖已存在的同名对象的 null 版本, 不管该 null 版本是 未启用 状态时生成的还是 暂停 状态时生成的 也就是说,OBS 在任何情况下只会为同名对象保存一个 null 版本记录 区别在于, 在 暂停 状态执行删除对象操作时, 无论此对象是否存在历史版本, 将会产生一个版本号为 null 的删除标记 而 未启用 状态则不会产生删除标记 说明 多版本开启后, 由于对象的每个历史版本都被保存下来, 每个版本都会占用存储空间,OBS 会对所有版本收取存储费用 请谨慎启用多版本开关, 以免产生额外的存储费用 文档版本 05 ( ) 版权所有 华为技术有限公司 65

71 8 数据存储类型 8 数据存储类型 8.1 存储类型介绍 8.2 桶的存储类型 8.3 对象的存储类型 8.1 存储类型介绍 对象存储服务设置有如下存储类型, 分别为 : 标准存储 低频访问存储 归档存储, 从而满足客户业务对存储性能 成本的不同诉求 OBS 标准存储拥有低访问时延和较高的吞吐量, 因而适用于有大量热点文件 ( 例如一个月需要被访问多次的文件 ) 或小文件 (<1MB), 且需要频繁访问数据的业务场景, 例如 : 大数据 移动应用 热点视频 社交图片等场景 OBS 低频访问存储适用于不频繁访问 ( 平均一年少于 12 次 ) 但在需要时也要求快速访问数据的业务场景, 例如 : 文件同步 / 共享 企业备份等场景 与标准存储相比, 低频访问存储有相同的数据持久性 吞吐量以及访问时延, 且成本较低, 但是可用性略低于标准存储 OBS 归档存储适用于很少访问 ( 平均一年访问一次 ) 数据的业务场景, 例如 : 数据归档 长期备份等场景 归档存储安全 持久且成本极低, 可以用来替代磁带库 为了保持成本低廉, 数据取回时间可能长达数分钟到数小时不等 8.2 桶的存储类型 创建桶时可以设置桶的默认存储类型, 如果不设置则 OBS 会将桶设置为标准存储桶 发送创桶请求时携带头域 x-obs-storage-class 来指定桶的默认存储类型 桶内对象的存储类型与桶默认存储类型保持一致 存储类型有 3 种, 因此 x-obs-storage-class 头域取值可以是 :STANDARD( 标准存储 ) WARM( 低频访问温存储 ) COLD( 归档存储 ) 如果没有携带此头域, 则创建的桶为标准存储类型 8.3 对象的存储类型 上传对象时, 可以加头域 x-obs-storage-class 来设置本次上传对象的存储类型 如果未设置此头域, 则以桶的默认存储类型作为对象的存储类型 文档版本 05 ( ) 版权所有 华为技术有限公司 66

72 8 数据存储类型 对象的存储类型有 3 种, 因此 x-obs-storage-class 头域取值可以是 :STANDARD( 标准存储 ) WARM( 低频访问温存储 ) COLD( 归档存储 ) 对象的存储类型还可以通过对象生命周期管理功能按照指定的规则自动改变, 详细功能参考 9 对象生命周期管理 如果对象是归档存储对象, 则不能直接下载, 需要先将对象取回, 然后才能下载, 取回归档存储对象的接口参考取回归档存储对象 文档版本 05 ( ) 版权所有 华为技术有限公司 67

73 9 对象生命周期管理 9 对象生命周期管理 9.1 生命周期管理简介 9.2 一般注意事项 9.3 生命周期配置元素 9.4 生命周期配置的示例 9.5 设置生命周期配置 9.1 生命周期管理简介 概述 您可以使用生命周期配置管理对象的生命周期, 该配置定义 OBS 如何在对象的生存期 ( 从创建 / 初始存储直到删除 / 迁移或覆盖对象 ) 内管理对象 OBS 提供多种方式来简化对象的生命周期管理, 可按以下分类 : 转换操作 - 用来定义对象转换为另一个存储级别的时间 例如, 您可以选择在对象创建 30 天后将其转换为 WARM 存储级别, 或在对象创建 1 年后将其存档到 COLD 存储级别 过期操作 - 用来指定对象的过期时间 然后,OBS 将代表您删除过期的对象 您可以为明确定义了生命周期的对象定义生命周期配置规则 存储在 OBS 桶中的许多对象可能都有明确定义的生命周期, 例如 : 如果您将定期日志上传至您的桶中, 您的应用程序可能会在日志创建后的一周或一个月内需要这些日志, 并且在某个时间之后您可能希望将它们删除 在限定的时间段内可能需要经常访问某些文档 在那之后, 您可能不再需要对这些对象进行实时访问, 但是您的组织可能要求您将它们存档更长一段时间, 然后在以后有选择性地删除它们 您可能主要为了存档目的而向 OBS 上传的某些类型的数据, 包括数字媒体存档 金融和医疗记录 原始基因组序列数据 长期数据库备份以及为符合监管要求而必须保留的数据 文档版本 05 ( ) 版权所有 华为技术有限公司 68

74 9 对象生命周期管理 如何配置生命周期 生命周期配置由一组规则组成, 这些规则预定义了您希望 OBS 在对象生命周期中对对象执行的操作 生命周期配置内容必须是 xml 格式 OBS 将配置存储为附加到桶的 生命周期 子资源 使用 OBS API, 您可以对生命周期配置执行 Put Get 或 Delete 操作 9.2 一般注意事项 对象转换存储级别 您可以在生命周期配置中添加规则以支持 OBS 将对象转换为另一个存储级别 例如 : 当您知道某些对象不常访问时, 您可能将其转换为 WARM 存储级别 您可能想要将不需要实时访问的对象归档到 COLD 存储级别 下面是支持的转换 : 从 STANDARD 存储级别到 WARM 必须在当前存储级别中将对象存储至少 30 天 然后才能将对象转换为 WARM 例如, 您无法创建在对象创建 1 天后将其转换为 WARM 存储级别的生命周期规则 如果您在转换非当前对象 ( 受版本控制的存储桶 ), 则只能将在当前存储级别中存储 30 天以上的非当前版本对象转换为 WARM 从任何存储类别转换为 COLD COLD 存储级别中的对象无法实时提供 归档的对象是 OBS 对象, 但在您可以访问某个归档的对象之前, 您必须先还原它的临时副本 根据您在恢复请求内指定的持续时间, 恢复的对象副本仅在该期间内可用 在此之后,OBS 会删除临时副本, 而对象扔在 OBS 中归档 对象到 COLD 存储级别的转换是单向的 如果一个规则中, 同时配置 WARM 和 COLD 的转换规则, 则转 COLD 的天数必须比转 WARM 级别至少大于等于 30 天以上 例如, 转 WARM 配置 30 天, 则转 COLD 至少配置 60 天 您无法使用生命周期配置规则将对象的存储级别从 COLD 转换为 STANDARD 如果要将已归档对象的存储级别更改为 STANDARD 或 WARM, 您必须先使用还原操作制作一个临时副本 然后使用复制操作将对象覆盖为 STANDARD WARM 对象 您可以组合这些生命周期规则, 来管理对象的整个生命周期, 包括到 WARM 的第一种转换, 到 COLD 的用于存储的第二种转换以及过期 例如, 假设您创建了具有明确定义的生命周期的对象 起初, 这些对象在 30 天的周期内可能被经常访问 在最初一段时间过后, 访问的频率降低了, 这些对象不常被访问的时间段增加到长达 90 天 之后, 便不再需要这些对象 您可以选择归档或删除它们 您可以使用生命周期配置定义与此示例方案匹配的对象的转换和过期 ( 在创建 30 天后转换到 WARM, 在创建 90 天后转换到 COLD, 并可能在一定天数后使它们过期 ) 当通过使用对象生命周期管理将对象归档时, 会异步转换这些对象 生命周期配置规则中的转换日期与实际转换日期之间可能存在延迟 文档版本 05 ( ) 版权所有 华为技术有限公司 69

75 9 对象生命周期管理 对象存档 ( 将对象转换为 COLD 存储类型 ) 对象过期 版本控制的生命周期支持 对于您无需实时访问的对象,OBS 还提供了 COLD 存储类型 此存储类型适用于为存档目的而存储的对象 OBS 中的每个对象都与存储类型相关联 上传对象时,OBS 默认会将它与桶的存储类型关联, 比如桶的存储类型时标准存储类型, 则对象默认也是标准存储类型, 也可以在上传时显示指定对象存储类型为 STANDARD WARM COLD 生命周期配置只允许从 STANDARD 或 WARM 向 COLD 存储类型单向转换, 不允许将 COLD 直接转换为 STANDARD 或 WARM 如果要将 COLD 存储类型的对象更改为 STANDARD 或 WARM, 您必须取回 COLD 对象, 然后将取回对象拷贝为一个新的对象, 并在拷贝时指定新对象的存储类型 您存储在 OBS 桶中的某些对象可能有明确定义的生存期 例如, 您可能定期将日志上传到您的桶, 但您可能只需要将这些日志保留一段特定的时间 您可以使用对象生命周期管理为桶中的对象指定生存期 ; 当对象的生存期过期时,OBS 会根据桶的版本控制状态将对象排队以执行永久删除或逻辑删除 OBS 提供 Expiration 操作, 您可在生命周期配置中指定该操作以使对象过期 此外, 对于启用了版本控制的桶,OBS 还提供 NoncurrentVersionExpiration 操作, 用于使非当前版本的对象过期 如果桶不受版本控制, 则 Expiration 操作会使 OBS 永久删除对象 如果桶启用了版本控制 ( 或版本控制已暂停 ), 则 Expiration 操作会通过将删除标记添加为新的当前版本, 在逻辑上删除当前版本 NoncurrentVersionExpiration 操作永久删除非当前版本 除 OBS 桶可以设置生存期外, 上传对象时也可以设置生存期 对象的生存期优先于桶的生存期 在对象的生存期结束后,OBS 会将该对象加入删除队列并异步删除它 过期日期和 OBS 删除对象的日期之间可能会有一段滞后 对象过期后, 不会再向您收取相关的存储时间费用 要找出对象计划过期的时间, 您可以使用 GET 对象或 HEAD 对象 API 这些 API 将返回可提供对象过期信息的响应标头 您可以向不受版本控制的桶和启用了版本控制的桶添加生命周期配置 默认情况下, 桶不受版本控制, 您可以选择启用版本控制 启用了版本控制的桶会维护一个当前对象版本, 以及零个或零个以上非当前对象版本 您可以结合使用版本控制和生命周期规则来帮助管理对象的存储成本 通过使用预定义的生命周期配置操作, 可以管理当前和非当前对象版本的生命周期 9.3 生命周期配置元素 您可将生命周期配置指定为 XML 该配置包含一个或多个生命周期规则 每个规则由以下内容组成 : 规则元数据, 包含规则 ID 以及用于指示规则是已启用还是已禁用的状态 如果规则处于禁用状态, 则 OBS 将不会执行规则中指定的任何操作 文档版本 05 ( ) 版权所有 华为技术有限公司 70

76 9 对象生命周期管理 筛选条件, 用于标识规则将应用于的对象 您可以通过使用对象的前缀来指定筛选条件 您希望 OBS 执行指定操作时的一个或多个转换或过期操作, 带有位于对象的生命周期内的日志或时间段 以下是两个介绍性示例配置 : Example1. 不受版本控制的桶的生命周期配置 默认情况下, 您的桶不受版本控制 即桶中的每个对象只有一个版本 假设您有未启用版本控制的桶 ; 对于每个对象, 桶中只有一个版本 您希望在创建 30 天后将对象名前缀为 documents/ 的对象转为温对象, 创建 60 天后转为冷对象, 创建 1 年之后永久删除 为此, 您可以向桶附加以下生命周期配置 该生命周期配置定义一个包含两个操作 (Transition 和 Expiration) 的规则 该规则应用于键前缀为 documents ( 在 Prefix 元素中指定 ) 的对象 <LifecycleConfiguration> <Rule> <ID>sample-rule</ID> <Prefix>documents/</Prefix> <Status>Enabled</Status> <Expiration> <Days>365</Days> </Expiration> <Transition> <Days>30</Days> <StorageClass>WARM</StorageClass> </Transition> <Transition> <Days>60</Days> <StorageClass>COLD</StorageClass> </Transition> </Rule> </LifecycleConfiguration> Example2. 启用了版本控制的桶的生命周期配置 您可以选择在桶上启用版本控制 如果您的桶启用了版本控制, 则您有一个当前对象版本, 以及零个或零个以上非当前版本 有关更多信息, 请参见对象多版本控制 通过对象版本控制, 您可以维护对象版本的历史记录, 而通过生命周期, 您可以控制各版本存在的时间长度, 或是各版本在转换为 WARM 或 COLD 存储类型以进行长期存档之前保持活动状态的时间长度 对于启用了版本控制的桶, 生命周期配置提供了更多预定义操作, 可用于管理非当前对象版本, 如示例所示 该生命周期配置有一个规则 它对键前缀为 logs/ 的对象指定两个操作 (NoncurrentVersionTransition 和 NoncurrentVersionExpiration) NoncurrentVersionTransition 操作在对象成为非当前版本 30 天之后请求 OBS 将对象转换为 WARM 存储类型, 成为非当前版本 60 天后请求 OBS 转换为 COLD 存储类型 ; NoncurrentVersionExpiration 操作在对象成为非当前版本 180 天之后请求 OBS 永久删除对象 <LifecycleConfiguration> <Rule> <ID>sample-rule</ID> <Prefix>logs/</Prefix> <Status>Enabled</Status> <NoncurrentVersionExpiration> <NoncurrentDays>180</NoncurrentDays> </NoncurrentVersionExpiration> <NoncurrentVersionTransition> <NoncurrentDays>30</NoncurrentDays> <StorageClass>WARM</StorageClass> </NoncurrentVersionTransition> 文档版本 05 ( ) 版权所有 华为技术有限公司 71

77 9 对象生命周期管理 <NoncurrentVersionTransition> <NoncurrentDays>60</NoncurrentDays> <StorageClass>COLD</StorageClass> </NoncurrentVersionTransition> </Rule> </LifecycleConfiguration> 您可以使用预定义 NoncurrentVersionTransition 和 NoncurrentVersionExpiration 操作管理您桶中的非当前版本 以下部分详细讨论了这些规则和操作 一般而言, 每个生命周期配置规则都由以下内容组成 : 规则元数据, 包括规则 ID(<ID> 元素 ) 以及用于指示规则是处于启用还是禁用状态的状态 (<Status> 元素 ) 如果规则处于禁用状态, 则 OBS 不会执行规则中指定的任何操作 前缀 (<Prefix> 元素 ), 用于通过键前缀标识要应用规则的对象 您希望 OBS 对指定对象执行的操作 ( 例如, 上面示例中 <NoncurrentVersionTransition> 和 <NoncurrentVersionExpiration> 元素 ) 每个操作都指定对象生命周期中您希望 OBS 执行指定操作的日期或时间段 下面几部分详细讨论每个生命周期配置规则的这些元素 ID 元素 一个生命周期配置最多可以有 1000 个规则 ID 元素唯一地标识规则 Status 元素 Status 元素值可以是 Enabled 或 Disabled 如果规则处于禁用状态, 则 OBS 不会执行在规则中定义的任何操作 Prefix 元素 生命周期配置规则可应用于键名称以规则指定的前缀开头的单个对象或多个对象 例如, 假设您拥有以下对象 : logs/day1 logs/day2 logs/day3 ExampleObject.jpg Action 元素 如果您将 ExampleObject.jpg 指定为前缀, 则规则仅应用于该特定对象 如果您将 logs/ 指定为前缀, 规则将应用于密钥名称以字符串 logs/ 开头的三个对象 如果您指定空的前缀, 该规则将应用于桶中的所有对象 通过在生命周期配置规则中指定预定义操作, 您可以请求 OBS 在对象的生命周期中执行特定操作 预定义操作包括 :Transition Expiration NoncurrentVersionTransition 和 NoncurrentVersionExpiration 这些操作的效果取决于桶的版本控制状态 说明 默认情况下, 桶不受版本控制 您可以选择在桶上启用版本控制, 在这种情况下, 对象有一个当前版本和零个或零个以上非当前版本 您还可以临时暂停版本控制 有关版本控制状态的更多信息, 请参阅对象多版本控制 Transition 操作 通过将对象的存储类型更改为 WARM 或 COLD 来存档对象 达到对象生命周期中指定的日期或时间段时,OBS 将适用的对象转换为 WARM 或 COLD 存储类型 不受版本控制的桶 Transition 操作将对象的存储类型设置为 WARM 或 COLD 文档版本 05 ( ) 版权所有 华为技术有限公司 72

78 9 对象生命周期管理 启用了版本控制和暂停了版本控制的桶 Transition 操作将当前版本对象的存储类型设置为 WARM 或 COLD 此操作不影响对象的非当前版本 Expiration 操作 此操作使规则中识别的对象过期 OBS 使所有过期的对象不可用 是否永久删除对象取决于桶的版本控制状态 说明 Expiration 操作不会删除未合并的多段对象 不受版本控制的桶 Expiration 操作永久删除对象, 删除的对象无法恢复 启用了版本控制的桶 此操作仅应用于当前对象版本 ; 它不影响非当前版本 这种情况下的 Expiration 操作不会永久删除当前版本 它通过引入删除标记作为新的当前版本 ( 仅当现有当前版本不是删除标记时 ), 将当前版本保留为非当前版本 如果当前版本已是删除标记, 则不执行任何操作 如果当前版本是唯一的对象版本并且带有删除标记, 则 OBS 将删除当前版本 清除删除标记时可能存在一些延迟, 因为 OBS 需确保这是唯一的对象版本 如果在不指定版本 ID 的情况下为当前版本是删除标记的对象执行 GET 请求, 则 OBS 的行为如同对象已删除时一样, 会返回 404 Object Not Found 错误 但是, 您可以通过在 GET 请求中指定版本 ID 来恢复删除的对象 例如, 您可以设置一个规则, 使 OBS 在名为 photo.gif 的对象创建五天之后使该对象过期 如果 photo.gif 在 2016 年 1 月 1 日上午 10:30 UTC 创建, 则过期规则会在 2016 年 1 月 7 日 00:00 UTC( 对象创建五天之后 ) 后的某个时间点执行, 该时间点不会晚于 2016 年 1 月 7 日 23:59 UTC 对于不受版本控制的桶, 删除操作会将 photo.gif 永久删除 ; 而对于启用了版本控制的桶, 在过期规则执行之后,photo.gif( 版本 ) 仍处于存储状态, 可以在需要时进行访问, 但是对象的当前版本 ( 版本 ) 现在是删除标记 原始 photo.gif 成为非当前版本 有关删除标记工作原理的信息, 请参阅对象多版本控制 已暂停版本控制的桶 桶的状态是已暂停版本控制时, 过期会导致使用 null 版本 ID 创建删除标记 任何现有 null 版本都会由新的 null 版本覆盖, 与该版本关联的数据无法恢复 有关从已暂停版本控制的桶删除对象的更多信息 特定于启用版本控制 ( 或已暂停版本控制 ) 的桶的操作 通过 Transition 和 Expiration 生命周期操作可以管理对象当前版本的生命周期 通过 NoncurrentVersionTransition 和 NonCurrentVersionExpiration 操作可以管理对象非当前 ( 以前 ) 版本的生命周期 仅当桶是启用版本控制 ( 或已暂停版本控制 ) 的桶时, 以下生命周期配置操作才适用 启用版本控制的桶可以有一个对象的许多版本, 也就是一个当前版本和零个或零个以上非当前版本 您可以使用这些操作请求 OBS 对非当前对象版本执行特定操作 这些操作不会影响对象的当前版本 NoncurrentVersionTransition 操作 您可以使用此操作指定希望非当前版本在转换为较低成本的 WARM 或 COLD 存储类型之前保留为 STANDARD 存储类型的时间长度 NoncurrentVersionExpiration 操作 您可以使用此操作指定希望在 OBS 永久删除非当前对象版本之前保留它们的时间长度 删除的对象无法恢复 例如, 如果您要启用一个为期五天的时段以更正任何意外删除或覆盖, 您可以配置一个过期规则, 用于在对象成为非当前版本五天之后删除非当前版本的对象 在 2016 年 1 月 1 日上午 10:30 UTC, 您创建一个名为 photo.gif( 版本 ID ) 的对象 在 2016 年 1 月 2 日上午 10:30 UTC, 您意外删除了 photo.gif( 版本 ID ), 这会使用新版本 ID( 如版本 ID ) 创建一个删除标记 您现在有五天时间可以在永久删除之前, 恢复原始版本的 photo.gif( 版本 ID ) 文档版本 05 ( ) 版权所有 华为技术有限公司 73

79 9 对象生命周期管理 在 2016 年 1 月 8 日 00:00 UTC, 过期生命周期规则执行并永久删除 photo.gif( 版本 ID111111)( 在它成为非当前版本五天之后 ) OBS 如何计算对象已成为非当前版本的时间长度 在启用版本控制的桶中, 您可以有一个对象的多个版本, 始终有一个当前版本和零个或零个以上非当前版本 每次上传对象时, 当前版本都保留为非当前版本, 新添加的版本 ( 后续者 ) 成为当前版本 为了确定对象成为非当前版本的天数,OBS 会查看其后继者的创建时间 OBS 使用自后继者创建以来的天数作为对象成为非当前版本的天数 在使用生命周期配置时还原对象的以前版本 可通过两种方式检索对象的以前版本 : 1. 通过将对象的非当前版本复制到相同桶中 复制的对象将成为该对象的当前版本, 且所有对象版本都保留 2. 通过永久删除当前版本的对象 当您删除当前对象版本时, 实际上是将非当前版本转换为该对象的当前版本 将生命周期配置规则用于启用版本控制的桶时, 我们建议的最佳实践是不使用方法 #2, 即通过删除对象的当前版本来检索非当前版本 而应使用方法 #1, 即将对象的非当前版本复制到相同桶中, 使非当前版本成为当前版本, 从而检索对象的非当前版本 由于 OBS 的最终一致性语义, 在更改传播之前, 永久删除的当前版本可能不会消失 (OBS 可能不知道此删除操作 ) 同时, 您配置来使非当前对象过期的生命周期可能会永久删除非当前对象, 包括您要还原的对象 因此, 复制旧版本的方法 #1 是更安全的替代方法 下表总结了对对象执行的生命周期配置规则操作的行为与包含对象的桶的版本控制状态的关系 表 9-1 生命周期配置规则操作与桶多版本控制状态 操作 未开启多版本控制的桶 启用多版本控制的桶 已暂停多版本控制的桶 Transition 达到对象生命周期中指定的日期或时间段时 Transition 迁移对象, 可以转换为 WARM 或 COLD 存储类型 如果当前版本不是删除标记且是最新版本, 则满足迁移时间可以迁移为 WARM 或 COLD 存储类型 行为与启用了版本控制的桶相同 Expiration 达到对象生命周期中指定的日期或时间段时 Expiration 删除对象, 删除的对象无法恢复 如果当前版本不是删除标记, 则生命周期创建删除标记 ( 这会成为当前版本 ), 现有当前版本保留为非当前版本 生命周期使用版本 ID 创建删除标记, 这会成为当前版本 如果对象当前版本的版本 ID 是 null, 则 Expiration 操作永久删除此版本 否则, 当前版本保留为非当前版本 文档版本 05 ( ) 版权所有 华为技术有限公司 74

80 9 对象生命周期管理 操作 未开启多版本控制的桶 启用多版本控制的桶 已暂停多版本控制的桶 NoncurrentVersionT ransition 对象成为非当前版本之后达到指定天数时 NoncurrentVersionT ransition 无效 如果当前版本不是删除标记且不是最新版本, 则满足迁移时间可以迁移为 WARM 或 COLD 存储类型 行为与启用了版本控制的桶相同 NoncurrentVersionE xpiration 对象成为非当前版本之后达到指定天数时 NoncurrentVersionE xpiration 无效 NoncurrentVersionE xpiration 操作删除对象的非当前版本, 删除的对象无法恢复 行为与启用了版本控制的桶相同 基于特定日期的生命周期规则 使用 Transition 和 Expiration 操作时, 您可以指定执行操作的日期 ( 该日期必须符合 ISO8601 格式, 时间始终为 UTC 午夜 0 点 ) 如果指定一个过去的日期, 所有合格对象会立即执行符合该生命周期条件的操作 基于日期的操作并非一次性操作 即使过了该日期后, 只要规则状态为 已启用, OBS 仍会继续应用该基于日期的操作 例如, 假设您指定一个基于日期的过期操作来删除所有对象 ( 假设规则中未指定任何筛选条件 ) 在指定日期,OBS 会使存储桶中的所有对象过期 此外,OBS 还会继续使你在存储桶中创建的所有新对象过期 要终止生命周期操作, 您必须从生命周期配置中删除操作, 禁用规则或从生命周期配置中删除规则 您无法使用 OBS 控制台创建基于日期的生命周期规则 基于对象期限的生命周期规则 使用 Transition 和 Expiration 操作时, 您可以指定执行操作的时间段 ( 自对象创建以来的天数 ) 指定天数后,OBS 通过为对象创建时间添加规则中指定的天数, 并将得出的时间舍入至第二天的午夜 UTC 来计算时间 例如, 如果对象的创建时间是 2016 年 1 月 15 日上午 10:30 UTC, 并且您在转换规则中指定了 3 天, 则对象的转换日期将计算为 2016 年 1 月 19 日 00:00 UTC OBS 仅为每个对象保持上次修改日期 例如,OBS 控制台在对象 Properties( 属性 ) 窗格中显示 LastModified( 上次修改日期 ) 日期 最初创建新对象时, 此日期反映对象的创建日期 如果您替换对象, 则此日期会相应地更改 因此, 在我们使用术语创建日期时, 它与上次修改日期术语是同义词 文档版本 05 ( ) 版权所有 华为技术有限公司 75

81 9 对象生命周期管理 使用 NoncurrentVersionTransition 和 NoncurrentVersionExpiration 操作时, 您可将对象版本成为非当前版本之后 ( 即, 自对象覆盖或删除以来 ) 的天数指定为对指定对象执行操作的时间段 在使用 NoncurrentVersionTransition 和 NoncurrentVersionExpiration 操作的规则中指定天数时,OBS 将规则中指定的天数与创建对象的新后继者版本的时间相加, 将得到的时间四舍五入到后一天午夜 UTC, 从而计算时间 例如, 在您的桶中, 某个对象的当前版本的创建时间是 2016 年 1 月 1 日上午 10:30 UTC, 如果替换当前版本的对象新后继者版本的创建时间是 2016 年 1 月 15 日上午 10:30 UTC, 并且您在转换规则中指定了 3 天, 则对象的转换日期计算为 2016 年 1 月 19 日 00:00 UTC 说明 配置 lifecycle 规则时, 在同一个 rule 内或前缀包含关系的 rule 间, 如果配置 Transition 和 Expiration, 那么 Date 或 Days 应保持一致 9.4 生命周期配置的示例 此部分提供生命周期配置的示例 每个示例演示如何在各个示例方案中指定 XML 示例 1: 指定一个规则 下面的生命周期配置包含了两种操作的规则 它请求 OBS 在对象名前缀为 projectdocs/ 的对象创建 30 天之后将它们转换为 WARM 存储类型,60 天后转换为 COLD 存储类型, 并在创建 365 天之后删除这些对象 <LifecycleConfiguration> <Rule> <ID>Transition and Expiration Rule</ID> <Prefix>projectdocs</Prefix> <Status>Enabled</Status> <Expiration> <Days>365</Days> </Expiration> <Transition> <Days>30</Days> <StorageClass>WARM</StorageClass> </Transition> <Transition> <Days>60</Days> <StorageClass>COLD</StorageClass> </Transition> </Rule> </LifecycleConfiguration> 除了时间段, 您可以为每个操作指定日期 ; 但是您不能在同一规则中同时使用日期和时间段 当一个生命周期配置中有多种操作的规则时, 一个对象可能匹配多个规则 在这种情况下,OBS 遵循的规则一般为 : - 永久删除优先于迁移 - 当一个对象同时匹配转换为 COLD 和 WARM 两种存储类型,OBS 选择匹配转换为 COLD 存储类型 示例 2: 指定将应用于桶中所有对象的规则 文档版本 05 ( ) 版权所有 华为技术有限公司 76

82 9 对象生命周期管理 下面的生命周期配置后将指定一个空的前缀和零转换天数 如果您没有指定前缀, 该规则将应用于桶中的所有对象 因为 Days 元素设置为 0, 所以所有对象都将在创建之后的午夜 UTC 时转换为 COLD 存储类型 <LifecycleConfiguration> <Rule> <ID>Archive all object same-day upon creation</id> <Prefix></Prefix> <Status>Enabled</Status> <Transition> <Days>0</Days> <StorageClass>COLD</StorageClass> </Transition> </Rule> </LifecycleConfiguration> 示例 3: 禁用规则 下面的生命周期配置指定了两个规则, 但其中一个是禁用的 OBS 不会执行在禁用规则中指定的任何操作 <LifecycleConfiguration> <Rule> <ID>30 days log objects expire rule</id> <Prefix>logs/</Prefix> <Status>Enabled</Status> <Expiration> <Days>30</Days> </Expiration> </Rule> <Rule> <ID>1 year documents expire rule</id> <Prefix>documents/</Prefix> <Status>Disabled</Status> <Expiration> <Days>365</Days> </Expiration> </Rule> </LifecycleConfiguration> 示例 4: 允许重叠前缀 不同操作的配置规则可以使用重叠前缀, 只要规则不共享相同操作即可 以下生命周期配置具有一个规则, 该规则将桶中的所有非当前版本 ( 通过指定空前缀 ) 设置为在 10 天后过期 这样, 有 10 天时间可恢复为对象的旧版本 在另一个规则中, 前缀为 logs/ 的当前对象设置为在 30 天后过期 <LifecycleConfiguration> <Rule> <ID>111</ID> <Prefix></Prefix> <Status>Enabled</Status> <NoncurrentVersionExpiration> <NoncurrentDays>10</NoncurrentDays> </NoncurrentVersionExpiration> </Rule> <Rule> <ID>222</ID> <Prefix>logs/</Prefix> <Status>Enabled</Status> <Expiration> <Days>30</Days> </Expiration> </Rule> </LifecycleConfiguration> 示例 5: 指定包含用于非当前版本对象的操作的规则 文档版本 05 ( ) 版权所有 华为技术有限公司 77

83 9 对象生命周期管理 下面是一个生命周期配置示例, 包含用于启用了版本控制的桶中非当前版本对象的操作 <LifecycleConfiguration> <Rule> <ID>sample-rule</ID> <Prefix>key-prefix</Prefix> <Status>Enabled</Status> <Transition> <Days>31</Days> <StorageClass>COLD</StorageClass> </Transition> <Expiration> <Days>730</Days> </Expiration> <NoncurrentVersionTransition> <NoncurrentDays>31</NoncurrentDays> <StorageClass>COLD</StorageClass> </NoncurrentVersionTransition> <NoncurrentVersionExpiration> <NoncurrentDays>365</NoncurrentDays> </NoncurrentVersionExpiration> </Rule> </LifecycleConfiguration> 9.5 设置生命周期配置 使用 OBS 管理控制台管理对象的生命周期 您可以使用 OBS 控制台为某个桶创建生命周期规则 在控制台中, 桶属性页面提供了一个生命周期规则选项卡, 如下面的示例屏幕快照中所示 使用 REST API 管理对象生命周期 您可以使用 OBS 管理控制台为桶设置生命周期配置 如果您的应用程序需要它, 您也可以直接发送 REST 请求 对象存储服务 API 参考 中的以下各部分介绍与生命周期配置相关的 REST API 操作 设置桶的生命周期配置 获取桶的生命周期配置 删除桶的生命周期配置 文档版本 05 ( ) 版权所有 华为技术有限公司 78

84 10 静态网站托管 10 静态网站托管 10.1 托管静态网站原理 10.2 设置静态网站托管 10.3 FLASH 跨域访问配置 10.1 托管静态网站原理 OBS 服务允许在桶上托管静态网站, 支持索引页 错误页展示和页面跳转 在设置了静态网站托管后, 有以下两种方式访问桶内对象 资源管理方式 : 资源管理方式通过普通的域名访问 REST API 使用普通域名访问时, 实现普通的上传 下载 删除 列举等桶和对象操作 静态网站方式 : 静态网站方式通过特定的域名访问 使用静态网站访问时, 根据配置好的域名托管规则, 实现访问目录的索引页 错误页展示和访问页面资源的跳转 修改静态网站托管设置后会在两分钟内生效, 静态网站托管设置生效后, 用户可以通过如下的访问域名访问静态资源 桶名称. 静态网站托管域名 / 对象名 桶名称. 静态网站托管域名 / 对象名 说明 尽量避免目标桶名中带有., 否则通过 HTTPS 访问时可能出现客户端校验证书出错 为了使您的客户可以访问网站终端节点上的内容, 您必须使您的所有内容公开可读 这样, 您可以使用对象上的桶策略或 ACL 来授予必要的权限 资源管理方式和静态网站方式之间的主要差异如下 : 主要差异资源管理方式静态网站方式 访问控制 错误消息处理 同时支持公共内容和私有内容 返回 XML 格式的错误响应 仅支持公开可读的内容 返回 HTML 文档 文档版本 05 ( ) 版权所有 华为技术有限公司 79

85 10 静态网站托管 主要差异资源管理方式静态网站方式 重定向支持 不适用 同时支持对象级和桶级重 定向 支持的请求 支持所有桶和对象操作 仅支持对象上的 GET 和 HEAD 请求 对桶根级的 GET 和 HEAD 请求的响应 返回桶中对象 key 的列表 返回配置中指定的索引文档 10.2 设置静态网站托管 概述 若要为静态网站托管配置桶, 则要将网站配置添加到桶 该配置包含以下信息 : 索引文档 当您键入诸如 的 URL 时, 您不是在请求特定的页面 在这种情况下,Web 服务器将提供默认页面, 该页面包含存储了请求的网站内容的目录 此默认页面称为索引文档, 大多数情况下, 它被命名为 index.html 当您为网站托管配置桶时, 您必须指定索引文档 当对根域或任何子文件夹发出请求时,OBS 将返回此索引文档 错误文档 如果出现错误, 则 OBS 将返回 HTML 错误文档 对于 4XX 类错误, 您可以选择性地提供您自己的自定义错误文档, 您可以在该文档中向您的用户提供其他指南 重定向所有请求 如果根域为 example.com, 且您需要响应对 和 的请求, 则可以创建名为 example.com 和 的两个桶, 仅在一个桶中保留网站内容 ( 如 example.com), 将另一个桶配置为将所有请求重定向到 example.com 桶 高级条件重定向 您可以根据请求中的特定对象名称或前缀, 或者根据响应代码按条件对请求进行重定向 例如, 假设您在桶中删除或重命名了某个对象 您可以添加一个将请求重定向到其他对象的路由规则 通过设置重定向规则特定请求, 设置语法格式如下 : <WebsiteConfiguration> <IndexDocument> <Suffix>index.html</Suffix></IndexDocument> <ErrorDocument> <Key>SomeErrorDocument.html</Key> </ErrorDocument> <RoutingRules> RoutingRules </RoutingRules> </WebsiteConfiguration> 文档版本 05 ( ) 版权所有 华为技术有限公司 80

86 10 静态网站托管 表 10-1 重定向所有请求 Website 配置元素 名称 描述 是否必 选 WebsiteConfiguration RedirectAllRequestsTo HostName Protocol Website 配置的根节点 类型 : 容器 父节点 : 无 描述所有请求的重定向行为, 如果这个节点出现, 所有其他的兄弟节点都不能出现 类型 : 容器 父节点 :WebsiteConfiguration 描述重定向的站点名 类型 : 字符串 父节点 :RedirectAllRequestsTo 描述重定向请求时使用的协议 (HTTP, HTTPS), 默认使用 HTTP 协议 类型 : 字符串 父节点 :RedirectAllRequestsTo 是是是否 RoutingRules 语法格式如下, 中括号 [] 中的内容为可选项 : <RoutingRules> = <RoutingRules> <RoutingRule>...</RoutingRule> [<RoutingRule>...</RoutingRule>...] </RoutingRules> <RoutingRule> = <RoutingRule> [ <Condition>...</Condition> ] <Redirect>...</Redirect> </RoutingRule> <Condition> = <Condition> [ <KeyPrefixEquals>...</KeyPrefixEquals> ] [ <HttpErrorCodeReturnedEquals>...</HttpErrorCodeReturnedEquals> ] </Condition> <Redirect> = <Redirect> [ <HostName>...</HostName> ] [ <Protocol>...</Protocol> ] [ <ReplaceKeyPrefixWith>...</ReplaceKeyPrefixWith> ] [ <ReplaceKeyWith>...</ReplaceKeyWith> ][ <HttpRedirectCode>...</HttpRedirectCode> ] </Redirect> 文档版本 05 ( ) 版权所有 华为技术有限公司 81

87 10 静态网站托管 表 10-2 设定重定向规则 Website 配置元素 名称 描述 是否必 选 WebsiteConfiguration IndexDocument Suffix ErrorDocument Key RoutingRules RoutingRule Condition Website 配置的根节点 类型 : 容器 父节点 : 无 Suffix 元素的容器 类型 : 容器 父节点 :WebsiteConfiguration Suffix 元素被追加在对文件夹的请求的末尾 ( 例如 :Suffix 配置的是 index.html, 请求的是 samplebucket/images/, 返回的数据将是 samplebucket 桶内名为 images/ index.html 的对象的内容 ) Suffix 元素不能为空或者包含 / 字符 类型 : 字符串 父节点 :IndexDocument Key 元素的容器 类型 : 容器 父节点 :WebsiteConfiguration 当 4XX 错误出现时使用的对象的名称 这个元素指定了当错误出现时返回的页面 类型 : 字符串 父节点 :ErrorDocument 条件 : 父节点 ErrorDocument 存在时 RoutingRule 元素的集合的容器 类型 : 容器 父节点 :WebsiteConfiguration 重定向规则的容器 一条重定向规则包含一个 Condition 和一个 Redirect, 当 Condition 匹配时,Redirect 生效 类型 : 容器 父节点 :RoutingRules 条件 : 在 RoutingRules 容器中至少要有一个 RoutingRule 元素 描述重定向规则匹配的条件的容器 类型 : 容器 父节点 :RoutingRule 是是是否否否是否 文档版本 05 ( ) 版权所有 华为技术有限公司 82

88 10 静态网站托管 名称 描述 是否必 选 KeyPrefixEquals HttpErrorCodeReturnedE quals Redirect Protocol HostName 描述当重定向生效时对象名的前缀 例如 : 重定向 ExamplePage.html 对象的请求, KeyPrefixEquals 设为 ExamplePage.html 类型 : 字符串 父节点 :Condition 条件 : 父节点 Condition 存在, 并且兄弟节点 HttpErrorCodeReturnedEquals 不存在 如果设定了两个条件, 只有都匹配时,Redirect 才生效 描述 Redirect 生效时的 HTTP 错误码 当发生错误时, 如果错误码等于这个值, 那么 Redirect 生效 例如 : 当返回的 http 错误码为 404 时重定向到 NotFound.html, 可以将 Condition 中的 HttpErrorCodeReturnedEquals 设置为 404, Redirect 中的 ReplaceKeyWith 设置为 NotFound.html 类型 : 字符串 父节点 :Condition 条件 : 父节点 Condition 存在, 并且兄弟节点 KeyPrefixEquals 不存在 如果设定了多个条件, 需要同时匹配所有的条件,Redirect 才可生效 重定向信息的容器 可以重定向到另一个站点 另一个页面或使用另一个协议 当事件或错误发生时, 可以指定不同的返回码 类型 : 容器 父节点 :RoutingRule 描述重定向请求时使用的协议 类型 : 字符串 父节点 :Redirect 可选值 :http https 条件 : 有其他兄弟节点存在时非必选 描述重定向请求时使用的站点名 类型 : 字符串 父节点 :Redirect 条件 : 有其他兄弟节点存在时非必选 否否是否否 文档版本 05 ( ) 版权所有 华为技术有限公司 83

89 10 静态网站托管 名称 描述 是否必 选 ReplaceKeyPrefixWith ReplaceKeyWith HttpRedirectCode 描述重定向请求时使用的对象名前缀 例如 : 想把所有对 docs( 目录下的对象 ) 的请求重定向到 documents( 目录下的对象 ), 可以将 Condition 中的 KeyPrefixEquals 设置为 docs, Redirect 中的 ReplaceKeyPrefixWith 设置为 documents 类型 : 字符串 父节点 :Redirect 条件 : 有其他兄弟节点存在时非必选, 不可与 ReplaceKeyWith 同时存在 描述重定向请求时使用的对象名 例如 : 重定向请求到 error.html 类型 : 字符串 父节点 :Redirect 条件 : 有其他兄弟节点存在时非必选, 不可与 ReplaceKeyPrefixWith 同时存在 描述响应中的 HTTP 状态码 类型 : 字符串 父节点 :Redirect 条件 : 有其他兄弟节点存在时非必选 否 否 否 以下是一些示例 : 例 1: 修改对象名前缀进行重定向 假设您的桶包含了以下对象 : index.html docs/article1.html docs/article2.html 现在, 您决定将该文件夹从 docs/ 重命名为 documents/ 修改后, 将需要对前缀 /docs 的请求重定向到 documents/ 例如, 对 docs/article1.html 的请求需要重定向到 documents/ article1.html 在这种情况下, 您可以将以下路由规则添加到网站配置中 : <RoutingRules> <RoutingRule> <Condition> <KeyPrefixEquals>docs/</KeyPrefixEquals> </Condition> <Redirect> <ReplaceKeyPrefixWith>documents/</ReplaceKeyPrefixWith> </Redirect> 文档版本 05 ( ) 版权所有 华为技术有限公司 84

90 10 静态网站托管 </RoutingRule> </RoutingRules> 例 2: 把发往已删除的文件夹的请求重定向到指定页面 假设您删除了 images/ 文件夹 ( 即, 您删除了对象名前缀为 images/ 的所有对象 ) 您可以添加路由规则, 该规则将把对象名前缀为 images/ 的所有对象的请求重定向到名为 folderdeleted.html 的页面 <RoutingRules> <RoutingRule> <Condition> <KeyPrefixEquals>images/</KeyPrefixEquals> </Condition> <Redirect> <ReplaceKeyWith>folderdeleted.html</ReplaceKeyWith> </Redirect> </RoutingRule> </RoutingRules> 例 3: 为 HTTP 错误进行重定向 假设在未找到请求的对象时, 需要将请求重定向到 您可以添加重定向规则, 以便当返回 HTTP 状态代码 404( 未找到 ) 时, 站点访问者可重定向到 以下示例也将在重定向中插入对象名前缀 report-404/ 例如, 如果您请求页面 ExamplePage.html, 且它导致了 HTTP 404 错误, 该请求将重定向到 上的页面 report-404/examplepage.html 如果没有路由规则, 且发生了 HTTP 错误 404, 将返回在配置中指定的错误文档 <RoutingRules> <RoutingRule> <Condition> <HttpErrorCodeReturnedEquals>404</HttpErrorCodeReturnedEquals > </Condition> <Redirect> <HostName> <ReplaceKeyPrefixWith>report-404/</ReplaceKeyPrefixWith> </Redirect> </RoutingRule> </RoutingRules> 索引文档支持 索引文档是当对网站的根或任何子文件夹发出请求时返回的网页 例如, 如果用户在浏览器中输入 则该用户没有请求任何特定页面 在这种情况下,OBS 将提供索引文档, 该文档有时也称为默认页面 当您将您的桶配置为网站时, 您应该提供索引文档的名称 您必须上传具有此名称的对象并将其配置为公开可读 根级 URL 的尾部斜杠是可选的 例如, 如果您将具有 index.html 的网站配置为索引文档, 以下任意一个 URL 将返回 index.html 在 OBS 中, 对象在桶中是水平存储的 ; 它不会像计算机上的文件系统那样提供任何分层组织 您可以通过使用表示文件夹结构的对象名称创建逻辑层级结构 例如, 考虑具有三个对象的桶和以下对象名 sample1.jpg photos/2006/jan/sample2.jpg 文档版本 05 ( ) 版权所有 华为技术有限公司 85

91 10 静态网站托管 自定义错误文档支持 photos/2006/feb/sample3.jpg 虽然它们没有按任何物理分层组织进行存储, 但您可以从对象名推断以下逻辑文件夹结构 sample1.jpg 对象位于桶的根级 sample2.jpg 对象位于 photos/2006/jan 子文件夹中 sample3.jpg 对象位于 photos/2006/feb 子文件夹中 下表列出了发生错误时 OBS 返回的 HTTP 响应代码的子集 表 10-3 错误码列表 HTTP 错误代码 说明 301 永久移动当用户将请求直接发送到 OBS 网站终端节点 ( 时,OBS 返回 301 Moved Permanently (301 永久移动 ) 响应 302 Found (302 已找到 ) 当 OBS 收到对不包含尾部斜杠的键 x 的请求时 ( 它首先查找键名称为 x 的对象 如果未找到对象, 则 OBS 确定该请求是针对子文件夹 x 发出的, 并通过在末尾添加斜杠重定向请求并返回 302 Found (302 已找到 ) 304 Not Modified (304 未修改 ) OBS 用户请求标头 If-Modified-Since If- Unmodified-Since 以确定所请求的对象是否与客户端保存的缓存副本相同 如果对象相同, 网站终端节点将返回 304 Not Modified 响应 403 禁止访问当用户请求转换为不可公开读取的对象时, 网站终端节点的响应包含 403 Forbidden 对象所有者必须使用桶策略或 ACL 使该对象公开可读 文档版本 05 ( ) 版权所有 华为技术有限公司 86

92 10 静态网站托管 HTTP 错误代码 说明 404 未找到由于以下原因, 网站终端节点的响应包含 404 Not Found: OBS 确定网站 URL 引用了不存在的对象键 OBS 推断该请求针对不存在的索引文档 在 URL 中指定的桶不存在 在 URL 中指定的桶存在, 但它未配置为网站 您可以创建为 404 Not Found 返回的自定义文档 确保该文档已上传到配置为网站的桶, 且网站托管配置已设置为使用该文档 500 Service Error 当出现内部服务器错误时, 网站终端节点的响应包含 500 Service Error 503 服务不可用当 OBS 确定您需要降低请求频率时, 网站终端节点的响应包含 503 Service Unavailable (503 服务不可用 ) 网站访问所需的权限 当您将桶配置为网站时, 您必须使要提供的对象公开可读 要执行此操作, 您需要编写向每个人授予 GetObject 权限的桶策略 在网站终端节点上, 如果用户请求的对象不存在, 则 OBS 返回 HTTP 响应代码 404 (Not Found) 如果该对象存在, 但您未授予对对象的读取权限, 则网站终端节点将返回 HTTP 响应代码 403 (Access Denied) 用户可以使用该响应代码推断特定对象是否存在 如果您不需要此行为, 则不要启用对桶的网站支持 以下示例桶策略向每个人授予了访问指定文件夹中的对象的权限 有关桶策略的更多信息, 请参阅 5.4 使用桶策略 (Bucket policy) { "Statement":[{ "Sid":"PublicReadGetObject", "Effect":"Allow", "Principal": {"ID":"*"}, "Action":["GetObject"], "Resource":["example-bucket/*" ] } ] } 桶策略仅适用于桶拥有者拥有的对象 如果桶包含非桶拥有者拥有的对象, 则应使用对象 ACL 对这些对象授予公有 READ 权限 文档版本 05 ( ) 版权所有 华为技术有限公司 87

93 10 静态网站托管 您可以通过桶策略或对象 ACL 授予对您的对象的公开读取权限 若要使用 ACL 使对象公开可读, 您可以向 Everyone 授予 READ 权限, 如以下授权元素所示 您可以将此授权元素添加到对象 ACL 有关管理 ACL 的信息, 请参阅 5.3 使用 ACL <Grant> <Grantee> <Canned>Everyone</Canned> </Grantee> <Permission>READ</Permission> </Grant> 10.3 FLASH 跨域访问配置 OBS 系统提供的默认配置为根域名跨域访问允许所有域访问, 会使客户端存在被攻击的风险 客户端可通过在自己的桶内创建配有自己规则的 crossdomain.xml, 并在其 flash 代码中添加 Security.loadPolicyFile(" crossdomain.xml"), 从而避免被攻击的风险 crossdomain.xml 需严格遵守 XML 语法, 有且仅有一个根节点 cross-domain-policy, 且不包含任何属性 在此根节点下只能包含如下的子节点 :site-control allow-accessfrom allow-access-from-identity allow-http-request-headers-from 下表为对其子节点的介绍 名称 site-control allow-access-from 描述 检查属性值, 确认是否可以允许加载其他策略文件 属性值如下 : none: 不允许使用 loadpolicyfile 方法加载任何策略文件 ; master-only: 只允许使用主策略文件 [ 默认值 ]; by-content-type: 只允许使用 loadpolicyfile 方法加载 HTTP/HTTPS 协议下 Content-Type 为 text/xcross-domain-policy 的文件作为跨域策略文件 ; by-ftp-filename: 只允许使用 loadpolicyfile 方法加载 FTP 协议下文件名为 crossdomain.xml 的文件作为跨域策略文件 ; all: 可使用 loadpolicyfile 方法加载目标域上的任何文件作为跨域策略文件 检查属性值, 确认能读取本域内容的 flash 文件来源域 属性值如下 : domain: 该属性指定一个确切的 IP 地址 一个确切的域或一个通配符域 ( 任何域 ) 只有 domain 中指定的域, 才有权限通过 flash 读取本域中的内容 ; to-ports: 允许访问读取本域内容的 socket 连接端口范围 ; secure: 指明信息是否经加密传输 文档版本 05 ( ) 版权所有 华为技术有限公司 88

94 10 静态网站托管 名称 allow-access-from-identity allow-http-request-headers-from 描述 为允许有特定证书的来源跨域访问本域上的资源 授权第三方域将数据以 http 头的形式发送到本域中 属性值如下 : domain: 该属性指定一个确切的 IP 地址 一个确切的域或一个通配符域 ( 任何域 ) 只有 domain 中指定的域, 才有权限通过 flash 读取本域中的内容 ; headers: 以逗号隔开的列表, 表明允许发送的 http 头 可用通配符 (*) 表示全部 http 头 ; secure: 指明信息是否经加密传输 文档版本 05 ( ) 版权所有 华为技术有限公司 89

95 11 跨区域复制 11 跨区域复制 跨区域复制简介 使用对象存储过程中, 客户有时希望在不同区域间进行对象的备份, 以提高可靠性, 或者提供更好的就近访问体验 跨区域复制功能就可以满足客户这一场景需求, 根据客户的配置, 系统会自动地将客户设定的一批对象复制到指定的区域 我们将这些存储桶分别称为源桶和目标桶 ( 例如 : 在区域 1 的桶 A 和在区域 2 的桶 B, 桶 A 配置了跨区域复制, 将桶 A 中的对象复制到桶 B, 则 A 为源桶,B 为目标桶 ), 这些桶可由不同的 OBS 租户拥有 跨区域复制是跨不同区域中的桶自动 异步地复制对象 目标存储桶中的对象副本是源存储桶中对象的精确副本 它们具有相同的对象名称和元数据 ( 例如, 创建时间 拥有者 租户定义的元数据 版本 存储类别和 ACL) 要使用此功能, 您可以给源存储桶配置跨区域复制策略, 来指示 OBS 根据此配置复制对象 在复制配置中, 您需要提供如下所示的信息 : 您希望 OBS 将对象复制到的目标桶 您要复制的对象 您可以请求 OBS 复制所有对象, 也可以通过在配置中提供一个键名称前缀来请求复制部分对象 例如, 您可以将跨区域复制配置为仅复制具有名称前缀 Doc/ 的对象 这会使 OBS 复制具有 Doc/doc1 或 Doc/doc2 等前缀的对象, 但不复制具有 Host/ doc3 前缀的对象 默认情况下,OBS 使用源对象的存储类型来创建对象副本 您可以通过选择指定 StorageClass 用于目标存储桶中对象副本的存储类型 此外, 还有可供您指定的其他可选配置 除非您在跨区域复制配置中指定特定的配置, 否则目标存储桶中的对象副本与源存储桶中的对象完全相同 例如 : 副本具有相同的键名称和元数据 ( 例如, 创建时间 用户定义的元数据和版本 ID) 除非您在复制配置中明确指定其他存储类型, 否则 OBS 将使用与源对象相同的存储类型存储对象副本 假定对象副本仍由源对象拥有者拥有, 当 OBS 最初复制对象时, 它还将复制相应的对象访问控制列表 (ACL) 文档版本 05 ( ) 版权所有 华为技术有限公司 90

96 11 跨区域复制 当在配置中指定存储类型与原对象不同, 则副本对象的元数据与原对象不同 ( 例如, 源桶 A 对象 a 的存储类型为标准类型, 跨区域配置指定存储类型为归档存储, 则在目标桶 B 中源桶中 a 的副本对象 a1 的存储类型为归档存储类型 ) OBS 使用安全套接字层 (SSL) 跨 OBS 区域加密传输中的所有数据 源存储桶中的对象只能复制到一个目标存储桶 在 OBS 复制一个对象后, 无法再次复制该对象 例如, 您可以在现有复制配置中更改目标存储桶, 但 OBS 不会再次复制它 使用场景 您可能基于各种原因为存储桶配置跨区域复制, 其中包括 : 合规性要求 虽然 OBS 默认跨多个地理位置较远的可用区存储数据, 但是合规性要求所规定的数据存储距离可能更远 通过跨区域复制, 可以在远距离 OBS 区域之间复制数据以满足这些合规性要求 最大限度减少延迟 客户处于两个地理位置 为了最大限度缩短访问对象时的延迟, 可以在地理位置与用户接近的 OBS 区域中维护对象副本 易维护 您在两个不同 OBS 区域中具有分析同一组对象的计算集群 您可能选择在这些区域中维护对象副本 数据复制 由于业务原因, 需要将数据从 OBS 的一个数据中心迁移到另一个数据中心 数据备份与容灾 对数据的安全性和可用性有极高的要求, 对所有写入的数据, 都希望在另一个数据中心显式地维护一份副本, 以备发生特大灾难, 如地震 海啸等导致一个 OBS 数据中心损毁时, 还能启用另一个 OBS 数据中心的备份数据 应用限制 跨区域复制的要求 : 源桶和目标桶版本控制需要保持一致 源桶和目标桶必须处于不同的 OBS 区域 OBS 必须有权代表您将对象从源桶复制到目标桶, 也就是说您必须创建 OBS 云服务委托, 并赋予 OBS 云服务 Tenant Administrator 权限 如果源桶拥有者与对象拥有者不同, 则对象拥有者必须通过对象 ACL 向源桶拥有者授予 READ 和 READ_ACP 权限 ; 如果目标桶拥有者与源桶拥有者不同, 需要目标桶拥有者通过桶策略向源桶拥有者授予 ReplicateObject 和 ReplicateDelete 权限 源桶中的对象只能复制到一个目标桶, 且复制过去的对象称之为 副本 对象, 这种副本对象不能再被复制到另外一个目标桶 例如, 源桶 A 配置跨区域复制将对象 a 复制到目标桶 B, 生成的对象 a1 则称为副本对象 更改 A 的目标桶为 C, 则 a 不能再复制到 C; 设置 B 的目标桶 D, 则 a1 不能够复制到目标桶 D 不支持复制存储类型为 COLD( 归档存储 ) 的源对象, 目标对象可以是归档存储 复制到目标桶的对象的存储类型支持 STANDARD( 标准存储 ) WARM( 低频访问存储 ) COLD( 归档存储 ), 如果目标桶所在区域不支持 WARM 或者 COLD 特性, 则采用 STANDARD 存储 文档版本 05 ( ) 版权所有 华为技术有限公司 91

97 11 跨区域复制 对象的 ACL 属性在源与目标区域间的并发操作由两个区域的时间来决定时序, 时间新的覆盖旧的 例如 : 同时修改源对象和副本对象的 ACL, 源端修改的 ACL 可能会覆盖目标端修改副本对象的 ACL 多版本未开启时, 删除源桶中的对象, 目标桶不会同步删除副本对象 ; 多版本开启时, 源桶中删除指定版本对象后, 不会同步这个删除操作, 即目标桶不会删除这个版本的对象 关闭跨区域复制后新上传的对象不会被复制到目标桶 注意以下场景下, 对象会复制失败 : 在启用跨区域复制过程中, 若您改变目标桶的多版本控制, 会导致对象复制失败, 此时后台会保持重试, 直到两端多版本控制状态一致时复制成功 ; 若您尝试改变源桶多版本控制, 您必须先删除复制配置, 然后才能对源桶更改版本控制 在启用跨区域复制过程中, 若您删掉 OBS 云服务委托, 会导致对象复制状态为 FAILED 如果目标区域没有开启 KMS 加密服务, 则源桶中 KMS 加密对象会复制失败, 导致对象复制状态为 FAILED 如果用户配置源桶或者目标桶对对象的读写权限错误, 导致 OBS 没有读源对象或者写目标对象的权限, 这种对象的跨区域复制状态会是 FAILED 状态 即使用户把配置修改正确以后, 复制失败的对象不会重新复制, 只对改完配置以后新上传的对象生效 其他注意场景 : 源存储桶通过生命周期管理配置对象过期删除或归档时间, 可能存在对象尚未复制到目标端时, 源对象已被删除或者转为归档对象, 此时对象可能复制不到目标端 当源桶与目标桶多版本控制未开启时, 源桶删除对象操作同跨区域复制操作并发, 可能存在该对象仍被复制到目标桶 ; 当源桶与目标桶多版本控制开启时, 源桶带版本号删除对象操作同跨区域复制操作并发, 可能存在该对象仍被复制到目标桶 目标端的对象与跨区域复制而来的同名副本对象可能存在版本顺序不一致, 建议目标端不要上传与跨区域复制而来的副本对象同名的对象 复制的内容 OBS 会复制以下内容 : 添加复制配置之后创建的任何新对象 ( 归档存储对象除外 ) 除了未加密的对象之外,OBS 还复制通过服务端加密 (OBS 托管加密密钥 ) 创建的对象, 副本对象同样是加密对象 除了对象数据之外,OBS 还会复制对象元数据 OBS 仅复制存储桶拥有者有权读取对象和访问控制列表 (ACL) 的源存储桶中的对象 如果源对象的 ACL 发生变化, 这些变化会同步复制到对象副本 启用了桶日志功能后产生的日志对象也会被复制 如果从源存储桶中删除对象, 则跨区域复制行为如下所示 : 如果进行 DELETE 请求而不指定对象版本 ID, 则 OBS 会添加删除标记, 而跨区域复制会将该标记复制到目标存储桶 文档版本 05 ( ) 版权所有 华为技术有限公司 92

98 11 跨区域复制 如果 DELETE 请求指定了要删除的特定对象版本 ID, 则 OBS 会在源存储桶中删除该对象版本, 但不会在目标存储桶中复制删除操作 ( 换句话说, 它不会从目标存储桶中删除同一对象版本 ) 此行为可防止恶意删除数据 不复制的内容 设置跨区域复制 OBS 不复制以下内容 : OBS 不会复制在启用跨区域复制之前已上传的对象 不会复制以下加密的对象 : 目标端没有启用 KMS 服务或者委托中没有赋予源桶和目标桶所在区域 KMS Admin 权限, 这样的在源端通过 KMS 加密的对象不会进行复制 对桶的 ACL 桶策略 生命周期配置等桶子资源的修改, 不会应用于目标桶 例如, 更改源桶上的生命周期配置或向源桶添加通知配置或者配置桶策略, 这些更改不会应用于目标桶 仅复制客户操作, 不复制生命周期配置执行的操作 例如, 如果仅对源存储桶启用了生命周期配置, 则 OBS 会为过期对象创建删除标记, 但不会复制这些标记 不建议您对目标桶中的副本对象进行删除 覆盖或者修改 ACL 操作, 最新版本或者对象访问控制权限与源区域不一致 要设置跨区域复制, 需要两个桶 : 源和目标 这两个桶版本控制需要保持一致, 并且处于不同的 OBS 区域 源桶中的对象只能复制到一个目标桶中 为由同一个 OBS 租户拥有的存储桶设置跨区域复制 如果这两个桶由同一个 OBS 租户拥有, 则可以通过执行以下操作, 设置从源存储桶到目标存储桶的跨区域复制 : 在租户中创建 OBS 云服务委托 此委托向 OBS 云服务授予代表您复制对象的权限 对源桶设置跨区域复制配置 创建 OBS 云服务委托 OBS 将源存储桶中的对象复制到目标存储桶 您必须通过创建委托向 OBS 云服务授予必要权限 默认情况下, 所有 OBS 资源 ( 存储桶 对象和相关子资源 ) 都是私有的 : 只有资源拥有者可以访问资源 因此,OBS 需要从源存储桶读取对象以及将它们复制到目标存储桶的权限 说明 如何创建 OBS 云服务委托, 请参考 统一身份认证服务用户指南 中 如何创建委托 章节 您也可以在 对象存储服务控制台, 进入 统一身份认证服务 页面, 创建委托 选择 OBS 云服务 ", 并赋予 "Tenant Administrator" 权限 如果待复制的对象是使用了 KMS 加密的对象, 还需要赋予 OBS 云服务具有 "KMS Administrator" 权限 添加跨区域复制的配置 文档版本 05 ( ) 版权所有 华为技术有限公司 93

99 11 跨区域复制 除了委托 OBS 云服务之外, 配置还指定一个规则, 如下所示 : <?xml version="1.0" encoding="utf-8"?> <ReplicationConfiguration> <Agency>AgencyName</Agency> <Rule> <Status>Enabled</Status> <Prefix></Prefix> <Destination> <Bucket>destinationbucket</Bucket> <StorageClass>STANDARD</StorageClass> </Destination> </Rule> </ReplicationConfiguration> AgencyName 为委托 OBS 云服务的委托名称 Status 规则状态, 指示规则是有效的 Prefix 前缀, 当为空时, 指示规则适用于桶中的所有对象 Bucket 目标桶, 指跨区域复制到的目的桶 StorageClass 存储类型指定了对象副本的存储类型 如果不指定, 则 OBS 将使用源对象的存储类别创建对象副本 您可以设置多条 Rule 规则, 每个规则均指定一个不同的键名称前缀, 用于标识要将规则应用于的源存储桶中的一组单独的对象,OBS 仅复制带特定前缀的对象 注意您不能指定重叠前缀 所有 Rule 规则中, 目标桶只能指定为同一个 为由其他 OBS 租户拥有的存储桶设置跨区域复制 如果这两个桶由不同的 OBS 租户拥有, 除了执行上一个部分中概述的相同配置之外, 目标存储桶拥有者还必须添加一个存储桶策略, 以便向源存储桶拥有者授予执行复制操作的权限 设置目标桶的桶策略, 允许源桶拥有者对目标桶具有 ReplicateObject 和 ReplicateDelete 的权限, 桶策略样例 : { "Effect":"Allow", "Principal" : { "ID":[ "domain/sourcebucketownerid"] }, "Action":[ "ReplicateObject", "ReplicateDelete" ], "Resource":"destination-bucket/*" } 配置跨区域复制 ( 其中源存储桶和目标存储桶由同一 OBS 租户拥有 ) 在此部分中, 您将在不同的 OBS 区域中创建两个存储桶 ( 源和目标 ), 这两个存储桶版本控制需要保持一致, 然后对源存储桶配置跨区域复制 1. 在 OBS 控制台创建 OBS 云服务委托 2. 在源区域与目标区域分别创建源桶 目标桶, 参见创建桶章节 a. 在一个 OBS 区域中创建源桶 例如, 华东 - 上海二 (cn-east-2) b. 在另一个 OBS 区域中创建目标桶 例如, 华南 - 广州 (cn-south-1) 3. 确认两个桶版本控制保持一致, 参见桶多版本控制章节 文档版本 05 ( ) 版权所有 华为技术有限公司 94

100 11 跨区域复制 4. 配置桶的跨区域复制的配置 <ReplicationConfiguration> <Agency>crr_agency</Agency> <Rule> <ID>Rule-1</ID> <Status>Enabled</Status> <Prefix>key</Prefix> <Destination> <Bucket>example_target_bucket</Bucket> <StorageClass>STANDARD</StorageClass> </Destination> </Rule> </ReplicationConfiguration> crr_agency 为在 OBS 控制台创建的委托名称 Rule 为复制规则 Status 为跨区域复制的状态 Prefix 为要复制对象的前缀 Destination 为设置目标桶信息,StorageClass 为源桶中复制到目标桶中对象的存储类别 配置跨区域复制 ( 其中源存储桶和目标存储桶由不同 OBS 租户拥有 ) 由于源桶和目标桶由两个不同的 OBS 租户拥有, 除了这两个桶版本控制保持一致和对源桶配置跨区域复制之外, 这里需要额外对目标桶配置桶策略, 指定源桶拥有者能够复制对象到目标桶中 在配置跨区域复制之前, 您需要创建 OBS 云服务委托 说明 如何创建 OBS 云服务委托, 请参考 统一身份认证服务用户指南 中 如何创建委托 章节 您也可以在 对象存储服务控制台, 进入 统一身份认证服务 页面, 创建委托 选择 OBS 云服务 ", 并赋予 "Tenant Administrator" 权限 如果待复制的对象是使用了 KMS 加密的对象, 还需要赋予 OBS 云服务具有 "KMS Administrator" 权限 在 OBS 控制台创建 OBS 云服务委托后, 您将继续执行如下步骤 : 1. 在源区域与目标区域分别用两个账号创建源桶 目标桶, 参考创建桶章节 a. 在一个 OBS 区域中创建源存储桶 例如, 华东 - 上海二 (cn-east-2) b. 在另一个 OBS 区域中创建目标存储桶 例如, 华南 - 广州 (cn-south-1) 2. 确认两个桶版本控制保持一致, 参见桶多版本控制章节 3. 为目标存储桶配置桶策略 { "Effect":"Allow", "Principal" : { "ID":[ "sourcebucketownerid:root"] }, "Action":[ "ReplicateObject", "ReplicateDelete" ], "Resource":"destination-bucket/*" } 4. 给源桶配置跨区域复制, 请参考 对象存储服务 API 参考 中设置桶的跨区域复制章节 跨区域复制是跨不同区域中的存储桶自动 异步地复制对象 通过激活跨区域复制, OBS 可将新创建的对象 对象更新以及对象删除从一个源存储桶复制到不同区域中的 文档版本 05 ( ) 版权所有 华为技术有限公司 95

101 11 跨区域复制 配置代理人权限 配置跨 region 复制 目标存储桶 跨区域复制有具体要求, 根据对象的创建方式和加密方式确定哪些可以或不可以跨区域复制 设置桶的跨 region 复制, 需要满足以下两个要求 : 1. 要求源桶和目标桶版本控制保持一致, 否则不能设置复制 2. 代理人和源桶的 owner 必须要有目标桶的写权限 ( 目标桶需要配置 BucketPolicy), 同时代理人还要有源桶的读权限 这需要通过 BucketPolicy 来实现这个权限委托 配置代理人的权限可通过配置桶的 policy 来设置 如果目标桶与源桶的 owner 不一致, 那么目标桶的 Bucketpolicy 配置如下 : { "Effect":"Allow", "Principal" : { "ID":[ "sourcebucketownerid:root"] }, "Action":[ "ReplicateObject", "ReplicateDelete" ], "Resource":"destination-bucket/*" } 配置桶策略后, 代理人 (obs) 就有权限可以读取源桶的对象, 也有权限将对象复制到目标桶中 配置桶的跨 region 复制使用 XML 描述, 一个复制设置有可能包含多条规则, 具体的配置元素如下表描述 表 11-1 设置桶的跨 region 复制配置元素 名称 描述 是否必 须 ReplicationConfiguration 复制规则的容器, 最多可以达到 100 条规则, 所有的复制配置大小可达到 50KB 类型 : 容器 子节点 :Rule 父节点 : 无 是 Agency 用户创建的委托名字, 最大长度为 64 字符 类型 : 字符串 父节点 :ReplicationConfiguration 是 文档版本 05 ( ) 版权所有 华为技术有限公司 96

102 11 跨区域复制 名称 描述 是否必 须 Rule ID Status Prefix Destination Bucket StorageClass 一条特定复制规则信息的容器 复制配置必须至少配置一条规则, 最多能达到 100 条规则 类型 : 容器 父节点 : ReplicationConfiguration 规则的特殊辨识符, 最大长度为 255 字符 类型 : 字符串 父节点 :Rule 如果 Status 为 Disabled, 这条规则会被忽略 类型 : 字符串 父节点 :Rule 有效值 :Enabled,Disabled 对象键值名的前缀, 适配于一个或者多个对象 最大前缀长度可达到为 1024 个字节, 不支持重叠的前缀 类型 : 字符串 父节点 :Rule 目标桶信息的容器 类型 : 容器 父节点 :Rule 存储被规则标识的对象副本的桶名称 如果在复制配置中有多条规则, 这些规则必须都要标识同一个桶作为目标桶 类型 : 字符串 父节点 :Destination 对象的存储类型 类型 : 枚举值 父节点 :Destination 有效值 :STANDARD WARM COLD 是否是是是是否 例如 : <?xml version="1.0" encoding="utf-8"?> <ReplicationConfiguration> <Agency>testAcy</Agency> <Rule> <ID>rule1</ID> 文档版本 05 ( ) 版权所有 华为技术有限公司 97

103 11 跨区域复制 <Status>Enabled</Status> <Prefix></Prefix> <Destination> <Bucket>exampletargetbucket</Bucket> <StorageClass>WARM</StorageClass> </Destination> </Rule> </ReplicationConfiguration> 桶的跨 region 复制设置之后, 符合要求的源桶内的对象就会自动复制到目标 region 的目标桶中 费用说明 跨区域复制的收费包括两部分 : 从源区域到目标区域的流量传输费用和请求费用 收费的标准参考源区域的收费细则,KMS 加密对象复制收费标准参考 KMS 计费细则, 收费的主体是源桶的拥有者 举例 : 从源区域复制 1GB 对象到目标区域, 收费如下 : 1GB * 源区域跨区域复制流量费用 + 1 * 源区域单个请求费用 源区域上传 100 个段, 每个段 50MB, 合并后复制到目标区域, 收费如下 : 100*50MB/1024MB * 源区域复制流量费用 * 源区域单个请求费用 文档版本 05 ( ) 版权所有 华为技术有限公司 98

104 12 消息通知 12 消息通知 OBS 支持的事件类型 通过 OBS 通知功能, 您可以在桶中发生某些事件时接收到通知 要启用通知, 您必须首先添加通知配置, 标识希望 OBS 发布的事件以及希望 OBS 将事件通知发送到的目的地 OBS 可以发布以下类型的事件, 您需要在通知配置中指定这些事件类型 表 12-1 受支持的事件类型 事件类型 ObjectCreated:* ( 所有上传操作 ) ObjectCreated:Put ( 上传对象 ) ObjectCreated:Post ( 使用浏览器上传对象 ) ObjectCreated:Copy ( 拷贝对象 ) ObjectCreated:CompleteMultipartUpload ( 合并段 ) ObjectRemoved:* ( 所有删除操作 ) ObjectRemoved:Delete ( 删除对象 ) ObjectRemoved:DeleteMarkerCreated ( 产生了 deletemarker 对象 ) 描述 OBS 可以通过 PUT POST 和 COPY 之类的 API 创建对象, 配置与之对应的事件类型, 您会在使用特定 API 创建对象时收到通知 您也可以使用 ObjectCreated:* 事件类型请求所有的创建对象通知 说明您不会从失败的操作收到事件通知 通过使用 ObjectRemoved 事件类型, 您可以在从存储中删除一个对象或一批对象时启用通知 您可以使用 ObjectRemoved:Delete 事件类型请求在删除对象或永久删除受版本控制对象时收到通知 或者, 也可以使用 ObjectRemoved:DeleteMarkerCreated 请求在为受版本控制对象创建删除标记时收到通知 您还可以使用 ObjectRemoved:* 请求在每次删除对象时收到通知 说明您不会从生命周期策略中的自动删除或失败的操作收到事件通知 文档版本 05 ( ) 版权所有 华为技术有限公司 99

105 12 消息通知 OBS 支持的发布事件的目标 如何启用事件通知 OBS 可以将事件通知消息发布至以下目标, 您需要授予 OBS 将消息发布到目标的权限, 并在通知配置中指定这些目标的 URN 值 Simple-Message-Notification(SMN) 主题 说明 消息通知服务 (Simple Message Notification) 是一种让用户能够轻松构建 维护并从云中发送通知的 Web 服务 SMN 依照 发布 - 订阅 (pub-sub) 消息发送模式, 发布者将消息发送至他们有权发布消息的主题, 由 SMN 向主题订阅者 ( 电子邮件 短息地址等 ) 主动推送消息 启用通知是桶级别的操作,OBS 会将您设置的事件通知配置以 XML 形式存储在桶子资源中 默认情况下, 不为任何类型的事件启用通知, 即每个桶最初的事件通知配置信息为空 要为特定类型的事件启用通知, 则需要添加相应的 XML 配置, 该配置可标识您希望 OBS 发布通知的事件类型和您希望将通知发布到的目标, 例如 : 将事件消息发布到 SMN 主题 - 要将 SMN 主题设置为特定事件类型的通知目标, 请添加 TopicConfiguration <NotificationConfiguration> <TopicConfiguration> <Id>optional-id-string</Id> <Topic>topic-urn</Topic> <Event>event-type</Event> <Event>event-type</Event>... </TopicConfiguration>... </NotificationConfiguration> 使用对象键名称筛选事件通知 要移除桶上所有的通知配置, 请将 <NotificationConfiguration> 元素设置为空 您可以将通知配置为按对象键名称的前缀和后缀进行筛选 例如, 您可以设置一项配置, 仅在将带有 ".jpg" 扩展名的对象添加到桶时发布通知 OBS 以 XML 形式存储通知配置, 您可以在 XML 结构中使用 Filter 元素, 定义按对象键名称前缀和后缀对事件进行筛选的通知规则 使用 Filter 的通知配置无法定义采用重叠前缀 重叠后缀或前缀和后缀重叠的筛选规则, 以下是采用对象键名称筛选事件通知的示例 : 采用对象键名称筛选的有效通知配置示例 以下信息包含用于标识 OBS 发布 ObjectCreated:Put 事件类型的通知至 SMN 主题的配置 每当出现以前缀 image 和后缀 jpg 命名的对象被上传 (PUT) 至桶时, 就会发布该事件通知 <NotificationConfiguration> <TopicConfiguration> <Id>01</Id> <Filter> <Object> <FilterRule> <Name>prefix</Name> <Value>image</Value> </FilterRule> 文档版本 05 ( ) 版权所有 华为技术有限公司 100

106 12 消息通知 <FilterRule> <Name>suffix</Name> <Value>jpg</Value> </FilterRule> </Object> </Filter> <Topic>urn:smn:southchina:11aa22bb:s3notification</Topic> <Event>ObjectCreated:Put</Event> </TopicConfiguration> </NotificationConfiguration> 以下通知配置有多个非重叠前缀 该配置做出以下定义 : 以 images 为前缀的对象上传到桶时的事件通知将发布到 topic-a, 以 videos 为前缀的对象上传到桶时的事件通知将发布到 topic-b <NotificationConfiguration> <TopicConfiguration> <Id>01</Id> <Filter> <Object> <FilterRule> <Name>prefix</Name> <Value>images</Value> </FilterRule> </Object> </Filter> <Topic>urn:smn:southchina:11aa22bb:topic-A</Topic> <Event>ObjectCreated:Put</Event> </TopicConfiguration> <TopicConfiguration> <Id>02</Id> <Filter> <Object> <FilterRule> <Name>prefix</Name> <Value>videos</Value> </FilterRule> </Object> </Filter> <Topic>urn:smn:southchina:11aa22bb:topic-B</Topic> <Event>ObjectCreated:Put</Event> </TopicConfiguration> </NotificationConfiguration> 以下通知配置有多个非重叠后缀 该配置做出以下定义 : 对所有上传 (PUT) 至桶的.jpg 对象都发布通知到 topic-a, 而所有的.png 对象都发布通知到 topic-b 后缀.jpg 和.png 是不重叠的后缀, 即使它们的最后一个字母是相同的 <NotificationConfiguration> <TopicConfiguration> <Id>01</Id> <Filter> <Object> <FilterRule> <Name>suffix</Name> <Value>.jpg</Value> </FilterRule> </Object> </Filter> <Topic>urn:smn:southchina:11aa22bb:topic-A</Topic> <Event>ObjectCreated:Put</Event> </TopicConfiguration> <TopicConfiguration> <Id>02</Id> <Filter> <Object> <FilterRule> <Name>suffix</Name> <Value>.png</Value> </FilterRule> 文档版本 05 ( ) 版权所有 华为技术有限公司 101

107 12 消息通知 </Object> </Filter> <Topic>urn:smn:southchina:11aa22bb:topic-B</Topic> <Event>ObjectCreated:Put</Event> </TopicConfiguration> </NotificationConfiguration> 采用无效前缀 / 后缀重叠的通知配置示例 大多数情况下, 使用 Filter 的通知配置无法使用重叠配置前缀 重叠后缀或前缀和后缀的重叠组合为相同事件定义筛选规则 ( 如果后缀不重叠, 您可以使用重叠前缀 ) 您可以将重叠对象键名称筛选规则用于不同的事件类型, 例如 : 您可以创建一个通知配置, 该配置将前缀 image 用于 ObjectCreated:Put 事件类型, 并将前缀 image 用于 ObjectDeleted:* 事件类型 没有 Filter 属性的配置信息默认与任何前缀和后缀都匹配 以下通知配置因具有重叠前缀而失效 ( 如果在此示例中使用后缀而不是前缀, 配置则会因具有重叠后缀无效 ) <NotificationConfiguration> <TopicConfiguration> <Topic>urn:smn:southchina:11aa22bb:topic-A</Topic> <Event>ObjectCreated:*</Event> </TopicConfiguration> <TopicConfiguration> <Filter> <Object> <FilterRule> <Name>prefix</Name> <Value>abc</Value> </FilterRule> </Object> </Filter> <Topic>urn:smn:southchina:11aa22bb:topic-B</Topic> <Event>ObjectCreated:*</Event> </TopicConfiguration> </NotificationConfiguration> 以下配置由于具有重叠后缀无效 如果某个给定的字符串能够同时以这两个后缀结尾, 则认为后缀重叠, 一个字符串能够以 jpg 和 pg 结尾, 因此后缀重叠 ( 对于前缀, 此结论同样成立 ) <NotificationConfiguration> <TopicConfiguration> <Filter> <Object> <FilterRule> <Name>suffix</Name> <Value>jpg</Value> </FilterRule> </Object> </Filter> <Topic>urn:smn:southchina:11aa22bb:topic-A</Topic> <Event>ObjectCreated:*</Event> </TopicConfiguration> <TopicConfiguration> <Filter> <Object> <FilterRule> <Name>suffix</Name> <Value>pg</Value> </FilterRule> </Object> </Filter> <Topic>urn:smn:southchina:11aa22bb:topic-B</Topic> <Event>ObjectCreated:Put</Event> </TopicConfiguration> </NotificationConfiguration> 文档版本 05 ( ) 版权所有 华为技术有限公司 102

108 12 消息通知 事件通知消息结构 OBS 发布的事件通知消息是具有以下结构的 JSON 消息 请注意以下几点 : 如果您希望通过练习 OBS 支持跟踪请求, 则 responseelements 键值很有用,x-obsrequest-id 和 x-obs-id-2 都可帮助 OBS 跟踪单个请求 这些值与 OBS 为响应您原始请求而返回的值相同 提供事件中涉及的桶和对象的相关信息 请注意, 对象键名称值进行了 URL 编码, 例如 : TEST/ 中文.jpg 将变为 TEST%2F%E4%B8%AD+ %E6%96%87%2F.jpg 二次开发时, 如果使用 OBS SDK 下载此对象, 则需要先对对象名进行 URL 解码, 再调用下载接口 而如果直接使用浏览器访问此对象, 则不需要解码 sequencer 键提供了确定事件顺序的方法 无法保证事件通知按事件发生的顺序到达, 但是, 来自创建对象 (PUT) 和删除对象的事件通知包含 sequencer, 可用于确定给定对象键的事件顺序 如果将来自同一对象键上的两个事件通知的十六进制 sequencer 字符串进行比较, 您会发现 sequencer 值较大的事件通知是后发生的 1. sequencer 不能用于确定不同对象键上的事件顺序 2. sequencer 表示的事件顺序仅供参考, 不能用于高可靠性系统 消息示例 : 测试消息 - 当您在桶上配置事件通知时,OBS 会发送以下测试消息 { "Service":"OBS", "Event":"TestEvent", "Time":" T00:00:00.000Z", "Bucket":"examplebucketname", "RequestId":"0002F4BCF B064B17B2094D", "HostId":"2Zf+b9AmbaBgNQ+YE8XU2j87DZaBNxu4TaMiOCTqpmkC2SA9ouf8TpB2SY5j3i4" } 使用 PUT 请求创建对象时的示例消息 - 以下消息是 OBS 发布的 ObjectCreated:Put 事件的消息示例 { "Records":[ { "eventversion":"3.0", "eventsource":"obs", "eventregion":"cn-east-2", "eventtime":" t14:37:05.468z", "eventname":"objectcreated:put", "useridentity":{ "ID":"71f e ea2c26d1999" }, "requestparameters":{ "sourceipaddress":" " }, "responseelements":{ "x-obs-request-id":" c86d03c300be8860fa7", "x-obs-id-2":"2+/ucr6uincjabuejwyq+rhxkuf/k/9uoaxuewii/ SE9j4tU5LwaXTTlD1gvMv2o" 文档版本 05 ( ) 版权所有 华为技术有限公司 103

109 12 消息通知 } ] } }, "obs":{ "Version":"1.0", "configurationid":"configurationid", "bucket":{ "name":"examplebucket", "owneridentity":{ "ID":"b4bf1b36d9ca43d984fbcb9491b6fce9" }, "bucket":"examplebucket" }, "object":{ "key":"object0001.txt", "etag":"3b b9a12733c5490d1b15c7607", "size":538, "versionid":"null", "sequencer":" c86d06576f " } } 说明 由于潜在的 Internet 问题或电子邮件传送限制, 有时通知可能无法成功送达 HTTP 或电子邮件终端节点 文档版本 05 ( ) 版权所有 华为技术有限公司 104

110 13 桶日志管理 13 桶日志管理 桶访问日志主要用于桶所有者获取自己桶的访问数据 桶日志功能开启后, 桶的每次操作将会产生一条日志, 并将多条日志打包成一个日志文件 桶访问日志通过记录请求者的信息和请求参数, 并把这些记录的信息作为对象保存在目标桶中, 提供给桶的所有者统计信息的能力 日志文件存放位置需要在开启桶日志功能时指定, 可以存放到开启日志功能的桶中, 也可以存放到其他你有权限的桶中, 但需要和开启日志功能的桶在同一个 region 中 由于日志文件是 OBS 产生, 并且有 OBS 上传到存放日志的桶中, 因此 OBS 需要获得委托授权, 用于上传生成的日志文件 在配置桶日志管理前, 需要先到统一身份认证服务生成一个对 OBS 服务的委托, 并将委托名作为参数配置到桶上 日志并且配置产生 logging 日志桶 Owner 创建委托 OBS 上传 logging 日志的委托名 默认存储类别为低频访问存储或归档存储的桶不能作为存放日志文件的桶 日志文件存放到桶中后, 这些日志文件会占用空间, 并按照用户存放数据同样的计费策略进行计费 生成日志格式 开启桶日志功能后, 每次访问 OBS 将产生一条日志, 存放在目标桶生成的桶访问日志文件格式 : 3ebc47240f7640e4b6c4b33937dd9b58 hw203 [15/Jun/2015:06:38: ] ebc47240f7640e4b6c4b33937dd9b58 A196564DC12F13AAA19FD56D23B04C58 REST.GET.BUCKET - "GET /hw203 HTTP/1.1" "-" "curl/ (x86_64-suse-linux-gnu) libcurl/ OpenSSL/ 0.9.8^? zlib/1.2.3 libidn/1.10" 3ebc47240f7640e4b6c4b33937dd9b58 hw203 [15/Jun/2015:06:38: ] ebc47240f7640e4b6c4b33937dd9b58 2CFE324941EE96DDDD41F5FE57B369DD REST.GET.BUCKET - "GET /hw203 HTTP/1.1" "-" "curl/ (x86_64-suse-linux-gnu) libcurl/ OpenSSL/0.9.8 zlib/1.2.3 libidn/1.10" - - 3ebc47240f7640e4b6c4b33937dd9b58 hw203 [15/Jun/2015:06:38: ] ebc47240f7640e4b6c4b33937dd9b E A1F41F4060DF2E7268 REST.GET.BUCKET - "GET /hw203 HTTP/1.1" "-" "curl/ (x86_64-suse-linux-gnu) libcurl/ OpenSSL/ 0.9.8^? zlib/1.2.3 libidn/1.10" 3ebc47240f7640e4b6c4b33937dd9b58 hw203 [15/Jun/2015:06:38: ] ebc47240f7640e4b6c4b33937dd9b58 0F1A4E95C42D7A491D8868CD040DD2EB REST.GET.BUCKET - "GET /hw203 HTTP/1.1" "-" "curl/ (x86_64-suse-linux-gnu) libcurl/ OpenSSL/0.9.8 zlib/1.2.3 libidn/1.10" - - 3ebc47240f7640e4b6c4b33937dd9b58 hw203 [15/Jun/2015:06:39: ] ebc47240f7640e4b6c4b33937dd9b58 C09CD463EC71251C41B58F B REST.GET.BUCKET - "GET /hw203 HTTP/1.1" "-" "curl/ (x86_64-suse-linux-gnu) libcurl/ OpenSSL/0.9.8 zlib/1.2.3 libidn/1.10" 每条桶访问日志都包含了如下表所示信息 : 文档版本 05 ( ) 版权所有 华为技术有限公司 105

111 13 桶日志管理 表 13-1 Bucket Logging 格式 名称示例含义 BucketOwner 3ebc47240f7640e4b6c4b33937d d9b58 桶的 ownerid Bucket hw203 桶名 Time [15/Jun/2015:06:38: ] 请求时间戳 RemoteIP 请求 IP Requester RequestID 3ebc47240f7640e4b6c4b33937d d9b E A1F41F4060D F2E7268 请求者租户 ID 请求 ID Operation REST.GET.BUCKET 操作名称 Key phtoto.gif 对象名 Request-URI "GET /hw203 HTTP/1.1" 请求 URI HTTPStatus 200 返回码 ErrorCode NoSuchBucket 错误码 BytesSent 555 HTTP 响应的字节大小 ObjectSize 400 对象大小 TotalTime 58 服务端处理时间 ( 毫秒 ) Turn-AroundTime 58 总请求时间 ( 毫秒 ) Referrer 请求的 referrer 头域 User-Agent "curl/ 请求的 user-agent 头域 VersionID 25HXDUX78WEUU367 请求中带的 versionid STSLogUrn - 联邦认证及委托授权信息 设置桶访问日志 设置桶的访问日志用 XML 描述如下 : <BucketLoggingStatus> <Agency>agency-name</Agency> <LoggingEnabled> <TargetBucket>mybucketlogs</TargetBucket> <TargetPrefix>mybucket-access_log-/</TargetPrefix> <TargetGrants> <Grant> <Grantee> <ID>domainID</ID> </Grantee> <Permission>READ</Permission> </Grant> 文档版本 05 ( ) 版权所有 华为技术有限公司 106

112 13 桶日志管理 </TargetGrants> </LoggingEnabled> </BucketLoggingStatus> 文档版本 05 ( ) 版权所有 华为技术有限公司 107

113 14 监控 14 监控 14.1 相关概念 14.2 查看 OBS 监控指标 14.1 相关概念 监控指标 该章节主要介绍 OBS 监控指标的查看方法, 因此这里只对云监控服务的监控指标和聚合做基本的介绍 详细可参考云监控服务 监控指标是云监控的核心概念, 通常是指云平台上某个资源的某个维度状态的量化值, 如对象存储服务的上传流量 GET 类请求次数 4xx 异常次数等 监控指标是与时间有关的变量值, 会随着时间的变化产生一系列监控数据, 帮助用户了解特定时间内该监控指标的变化 对象存储服务的监控指标共有 7 项 ( 详见表 1 对象存储服务监控指标 ) 表 14-1 对象存储服务监控指标 指标名称含义取值范围测量对象 下载流量 该指标用于统计所有桶的所有下载请求响应的字节数, 包括 http body 体 以字节为单位 0 Byte 对象存储服务 上传流量 该指标用于统计所有桶的所有上传请求消息体的字节数, 包括 http body 体 以字节为单位 0 Byte 对象存储服务 文档版本 05 ( ) 版权所有 华为技术有限公司 108

114 14 监控 指标名称含义取值范围测量对象 GET 类请求次数 该指标用于统计所有桶及桶中对象的 GET/HEAD/ OPTIONS 请求次数 以次为单位 0 Counts 对象存储服务 PUT 类请求次数 该指标用于统计所有桶及桶中对象的 PUT/POST/ DELETE 请求次数 以次为单位 0 Counts 对象存储服务 GET 类请求首字节平均时延 该指标用于统计 GET/HEAD/ OPTIONS 操作, 在一个统计周期内从系统收到完整请求到开始返回响应的耗时平均值 0 ms 对象存储服务 4xx 异常次数 该指标用于统计服务端响应错误状态码为 4xx 的请求数 以次为单位 0 Counts 对象存储服务 5xx 异常次数 该指标用于统计服务端响应错误状态码为 5xx 的请求数 以次为单位 0 Counts 对象存储服务 聚合 聚合是云监控在设定周期内对各服务上报的原始采样数据采取平均值 最大值 最小值 求和值 方差值计算的过程 这个计算的周期又叫做聚合周期, 目前对象存储服务监控指标支持 5 分钟 20 分钟 1 小时 4 小时 24 小时共五种聚合周期 对象存储服务监控指标聚合可以对相应数据进行统计分析, 以便更全面地了解一段时间内桶及桶中对象的操作次数等 14.2 查看 OBS 监控指标 操作方法与步骤 操作步骤 查看对象存储服务的监控指标, 主要在云监控中的云服务监控栏目下查看 这可以帮助您实时查看对象存储服务运行状态 各个指标数据情况, 精确掌握运行情况 步骤 1 登录管理控制台 根据页面提示, 登录系统 文档版本 05 ( ) 版权所有 华为技术有限公司 109

115 14 监控 图 14-1 登录页面 步骤 2 选择区域和项目 ( 非必须 ) 您可以在登录之后, 在管理控制台左上角单击图标, 选择区域和项目 另外, 您也可以在进入到 对象存储服务 监控指标页面之后再选择或修改区域和项目, 以便查看不同区域内 OBS 服务的监控指标 图 14-2 选择区域和项目 步骤 3 进入云监控服务页面 在管理控制台页面左上角点击服务列表, 在 管理与部署 栏目下选择 云监控 文档版本 05 ( ) 版权所有 华为技术有限公司 110

116 14 监控 图 14-3 服务列表栏 步骤 4 进入到云监控服务页面之后, 在页面左侧点击 云服务监控 > 对象存储服务 图 14-4 对象存储服务页面 步骤 5 进入监控指标整体概览面 点击 查看监控图表, 就可以进入监控指标概览页面 图 14-5 监控页面整体概览页 ---- 结束 文档版本 05 ( ) 版权所有 华为技术有限公司 111

javascript sdk javascript sdk 列出 Bucket 内的对象上传 textarea 内容到 Bucket 上传本地文件生成私有下载链接生成带过期时间的私有链接删除对象下载对象拷贝对象查看文件访问权限设置文件访问权限获取静态网站配置设置静态网站删除静态网站查询对象元数据查询

javascript sdk javascript sdk 列出 Bucket 内的对象上传 textarea 内容到 Bucket 上传本地文件生成私有下载链接生成带过期时间的私有链接删除对象下载对象拷贝对象查看文件访问权限设置文件访问权限获取静态网站配置设置静态网站删除静态网站查询对象元数据查询 javascript sdk javascript sdk 列出 Bucket 内的对象上传 textarea 内容到 Bucket 上传本地文件生成私有下载链接生成带过期时间的私有链接删除对象下载对象拷贝对象查看文件访问权限设置文件访问权限获取静态网站配置设置静态网站删除静态网站查询对象元数据查询桶的多版本 Bucket 开启对象多版本支持挂起 Bucket 的多版本对象功能浏览器客户端浏览器客户端的

More information

获取 Access Token access_token 是接口的全局唯一票据, 接入方调用各接口时都需使用 access_token 开发者需要进行妥善保存 access_token 的存储至少要保留 512 个字符空间 access_token 的有效期目前为 2 个小时, 需定时刷新, 重复

获取 Access Token access_token 是接口的全局唯一票据, 接入方调用各接口时都需使用 access_token 开发者需要进行妥善保存 access_token 的存储至少要保留 512 个字符空间 access_token 的有效期目前为 2 个小时, 需定时刷新, 重复 获取 Access Token access_token 是接口的全局唯一票据, 接入方调用各接口时都需使用 access_token 开发者需要进行妥善保存 access_token 的存储至少要保留 512 个字符空间 access_token 的有效期目前为 2 个小时, 需定时刷新, 重复 获取将导致上次获取的 access_token 失效 接入方可以使用 AppID 和 AppSecret

More information

完成后, 目录结构应该像下面这样 :. app.php composer.json composer.phar composer.lock vendor 其中 app.php 是用户的应用程序,vendor/ 目录下包含了所依赖的库, 用户需要在 app.php 中 引入依赖 : require_o

完成后, 目录结构应该像下面这样 :. app.php composer.json composer.phar composer.lock vendor 其中 app.php 是用户的应用程序,vendor/ 目录下包含了所依赖的库, 用户需要在 app.php 中 引入依赖 : require_o S3 PHP SDK 使用文档 S3 PHP SDK 说明 对象存储 S3 PHP SDK 使用开源的 S3 PHP SDK aws/aws sdk php 本文档介绍用户如何使用 aws/aws sdk php 来使用对象存储服务 更加详细的接口参数说明, 请在使用时参照 aws/aws sdk php API 官方说明 http://docs.aws.amazon.com/aws sdk php/v3/api/api

More information

SDK 说明 Onest python SDK 来源于开源的 boto3 用户在使用 Onest 云存储服务时, 可以选择直接使用 aws 原生的 sdk, 本文档只是提供了一些常用接口的简单实示例, 如需更加详细的接口参数说明, 请在使用时参照 boto3 API 官方说明 boto3 安装 py

SDK 说明 Onest python SDK 来源于开源的 boto3 用户在使用 Onest 云存储服务时, 可以选择直接使用 aws 原生的 sdk, 本文档只是提供了一些常用接口的简单实示例, 如需更加详细的接口参数说明, 请在使用时参照 boto3 API 官方说明 boto3 安装 py Python SDK 使用文档 Python SDK 使用文档接口域名 SDK 说明安装 python SDK Client 初始化 API 接口说明 1. listbuckets 2. getbucketlocation 3. createbucket 4. headbucket 5. deletebucket 6. getbucketacl 7. putbucketacl 8. listobjects

More information

目 录(目录名)

目  录(目录名) 目录 目录...1-1 1.1 域名解析配置命令... 1-1 1.1.1 display dns domain... 1-1 1.1.2 display dns dynamic-host... 1-1 1.1.3 display dns server... 1-2 1.1.4 display ip host... 1-3 1.1.5 dns domain... 1-4 1.1.6 dns resolve...

More information

S3.Net SDK 文档 1 SDK 说明 对象存储.Net SDK 使用开源的 S3.Net SDK 本文档介绍用户如何使用 S3.Net SDK 来 使用对象存储服务 更加详细的接口参数说明, 请在使用时参照 S3.Net SDK 官方说 明

S3.Net SDK 文档 1 SDK 说明 对象存储.Net SDK 使用开源的 S3.Net SDK 本文档介绍用户如何使用 S3.Net SDK 来 使用对象存储服务 更加详细的接口参数说明, 请在使用时参照 S3.Net SDK 官方说 明 S3.Net SDK 文档 1 SDK 说明 对象存储.Net SDK 使用开源的 S3.Net SDK 本文档介绍用户如何使用 S3.Net SDK 来 使用对象存储服务 更加详细的接口参数说明, 请在使用时参照 S3.Net SDK 官方说 明 https://aws.amazon.com/cn/sdk-for-net/ 2 安装 SDK 2.1 依赖环境 windows 平台 : 安装.Net

More information

目 录(目录名)

目  录(目录名) 目录 1 域名解析配置命令... 1-1 1.1 域名解析配置命令...1-1 1.1.1 display dns domain... 1-1 1.1.2 display dns dynamic-host... 1-2 1.1.3 display dns proxy table... 1-2 1.1.4 display dns server... 1-3 1.1.5 display ip host...

More information

产品介绍

产品介绍 对象存储服务 产品介绍 文档版本 16 发布日期 2018-11-30 华为技术有限公司 版权所有 华为技术有限公司 2018 保留一切权利 非经本公司书面许可, 任何单位和个人不得擅自摘抄 复制本文档内容的部分或全部, 并不得以任何形式传播 商标声明 和其他华为商标均为华为技术有限公司的商标 本文档提及的其他所有商标或注册商标, 由各自的所有人拥有 注意 您购买的产品 服务或特性等应受华为公司商业合同和条款的约束,

More information

phar 方式 使用 phar 单文件方式, 在 https://github.com/aws/aws sdk php/releases?after= 页面中, 选择 版本 , 下载已经打包好的 phar 文件, 然后在你的代码中引入这个文件即可 : require_once

phar 方式 使用 phar 单文件方式, 在 https://github.com/aws/aws sdk php/releases?after= 页面中, 选择 版本 , 下载已经打包好的 phar 文件, 然后在你的代码中引入这个文件即可 : require_once S3 PHP SDK 使用文档 S3 PHP SDK 说明 对象存储 S3 PHP SDK 使用开源的 S3 PHP SDK aws/aws sdk php 本文档介绍用户如何使用 aws/aws sdk php 来使用对象存储服务 更加详细的接口参数说明, 请在使用时参照 aws/aws sdkphp API 官方说明 http://docs.aws.amazon.com/aws sdk php/v3/api/api

More information

SDK 概要 使用 Maven 的用户可以从 Maven 库中搜索 "odps-sdk" 获取不同版本的 Java SDK: 包名 odps-sdk-core odps-sdk-commons odps-sdk-udf odps-sdk-mapred odps-sdk-graph 描述 ODPS 基

SDK 概要 使用 Maven 的用户可以从 Maven 库中搜索 odps-sdk 获取不同版本的 Java SDK: 包名 odps-sdk-core odps-sdk-commons odps-sdk-udf odps-sdk-mapred odps-sdk-graph 描述 ODPS 基 开放数据处理服务 ODPS SDK SDK 概要 使用 Maven 的用户可以从 Maven 库中搜索 "odps-sdk" 获取不同版本的 Java SDK: 包名 odps-sdk-core odps-sdk-commons odps-sdk-udf odps-sdk-mapred odps-sdk-graph 描述 ODPS 基础功能的主体接口, 搜索关键词 "odpssdk-core" 一些

More information

Chapter #

Chapter # 第三章 TCP/IP 协议栈 本章目标 通过本章的学习, 您应该掌握以下内容 : 掌握 TCP/IP 分层模型 掌握 IP 协议原理 理解 OSI 和 TCP/IP 模型的区别和联系 TCP/IP 介绍 主机 主机 Internet TCP/IP 早期的协议族 全球范围 TCP/IP 协议栈 7 6 5 4 3 应用层表示层会话层传输层网络层 应用层 主机到主机层 Internet 层 2 1 数据链路层

More information

本章学习目标 小风 Java 实战系列教程 SpringMVC 简介 SpringMVC 的入门案例 SpringMVC 流程分析 配置注解映射器和适配器 注解的使用 使用不同方式的跳转页面 1. SpringMVC 简介 Spring web mvc

本章学习目标 小风 Java 实战系列教程 SpringMVC 简介 SpringMVC 的入门案例 SpringMVC 流程分析 配置注解映射器和适配器 注解的使用 使用不同方式的跳转页面 1. SpringMVC 简介 Spring web mvc 本章学习目标 SpringMVC 简介 SpringMVC 的入门案例 SpringMVC 流程分析 配置注解映射器和适配器 配置视图解析器 @RequestMapping 注解的使用 使用不同方式的跳转页面 1. SpringMVC 简介 Spring web mvc 和 Struts2 都属于表现层的框架, 它是 Spring 框架的一部分, 我们可 以从 Spring 的整体结构中看得出来 :

More information

API参考

API参考 文档版本 03 发布日期 2018-06-20 华为技术有限公司 版权所有 华为技术有限公司 2018 保留一切权利 非经本公司书面许可, 任何单位和个人不得擅自摘抄 复制本文档内容的部分或全部, 并不得以任何形式传播 商标声明 和其他华为商标均为华为技术有限公司的商标 本文档提及的其他所有商标或注册商标, 由各自的所有人拥有 注意 您购买的产品 服务或特性等应受华为公司商业合同和条款的约束, 本文档中描述的全部或部分产品

More information

ChinaBI企业会员服务- BI企业

ChinaBI企业会员服务- BI企业 商业智能 (BI) 开源工具 Pentaho BisDemo 介绍及操作说明 联系人 : 杜号权苏州百咨信息技术有限公司电话 : 0512-62861389 手机 :18616571230 QQ:37971343 E-mail:du.haoquan@bizintelsolutions.com 权限控制管理 : 权限控制管理包括 : 浏览权限和数据权限 ( 权限部分两个角色 :ceo,usa; 两个用户

More information

SDK参考

SDK参考 文档版本 03 发布日期 2019-01-30 华为技术有限公司 版权所有 华为技术有限公司 2019 保留一切权利 非经本公司书面许可, 任何单位和个人不得擅自摘抄 复制本文档内容的部分或全部, 并不得以任何形式传播 商标声明 和其他华为商标均为华为技术有限公司的商标 本文档提及的其他所有商标或注册商标, 由各自的所有人拥有 注意 您购买的产品 服务或特性等应受华为公司商业合同和条款的约束, 本文档中描述的全部或部分产品

More information

C SDK开发指南

C SDK开发指南 文档版本 04 发布日期 2019-08-27 华为技术有限公司 版权所有 华为技术有限公司 2019 保留一切权利 非经本公司书面许可, 任何单位和个人不得擅自摘抄 复制本文档内容的部分或全部, 并不得以任何形式传播 商标声明 和其他华为商标均为华为技术有限公司的商标 本文档提及的其他所有商标或注册商标, 由各自的所有人拥有 注意 您购买的产品 服务或特性等应受华为公司商业合同和条款的约束, 本文档中描述的全部或部分产品

More information

水晶分析师

水晶分析师 大数据时代的挑战 产品定位 体系架构 功能特点 大数据处理平台 行业大数据应用 IT 基础设施 数据源 Hadoop Yarn 终端 统一管理和监控中心(Deploy,Configure,monitor,Manage) Master Servers TRS CRYSTAL MPP Flat Files Applications&DBs ETL&DI Products 技术指标 1 TRS

More information

PowerPoint 演示文稿

PowerPoint 演示文稿 The BitCoin Scripting Language 交易实例 交易结构 "result": { "txid": "921a dd24", "hash": "921a dd24", "version": 1, "size": 226, "locktime": 0, "vin": [ ], "vout": [ ], "blockhash": "0000000000000000002c510d

More information

}; "P2VTKNvTAnYNwBrqXbgxRSFQs6FTEhNJ", " " string imagedata; if(0!= read_image("a.jpg",imagedata)) { return -1; } string rsp; ytopen_sdk m_sd

}; P2VTKNvTAnYNwBrqXbgxRSFQs6FTEhNJ,   string imagedata; if(0!= read_image(a.jpg,imagedata)) { return -1; } string rsp; ytopen_sdk m_sd tencentyun-youtu c++ sdk for 腾讯云智能优图服务 & 腾讯优图开放平台 安装 运行环境 Linux 依赖项 - curl-7.40.0, 获取更新版本 https://github.com/bagder/curl - openssl-1.0.1k, 获取更新版本 https://github.com/openssl/openssl 构建工程 工程采用 CMake 构建 1.

More information

目录 1 IPv6 快速转发 IPv6 快速转发配置命令 display ipv6 fast-forwarding aging-time display ipv6 fast-forwarding cache ipv6 fas

目录 1 IPv6 快速转发 IPv6 快速转发配置命令 display ipv6 fast-forwarding aging-time display ipv6 fast-forwarding cache ipv6 fas 目录 1 IPv6 快速转发 1-1 1.1 IPv6 快速转发配置命令 1-1 1.1.1 display ipv6 fast-forwarding aging-time 1-1 1.1.2 display ipv6 fast-forwarding cache 1-1 1.1.3 ipv6 fast-forwarding aging-time 1-3 1.1.4 ipv6 fast-forwarding

More information

OOP with Java 通知 Project 4: 4 月 18 日晚 9 点 关于抄袭 没有分数

OOP with Java 通知 Project 4: 4 月 18 日晚 9 点 关于抄袭 没有分数 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 4: 4 月 18 日晚 9 点 关于抄袭 没有分数 复习 类的复用 组合 (composition): has-a 关系 class MyType { public int i; public double d; public char c; public void set(double

More information

注意 : 请不要用生产 Bucket 试验本文档中的例子 查看 Bucket 列表 from boto3.session import Session import boto3 #Client 初始化 access_key = " 您的 AccessKey" secret_key = " 您的 Se

注意 : 请不要用生产 Bucket 试验本文档中的例子 查看 Bucket 列表 from boto3.session import Session import boto3 #Client 初始化 access_key =  您的 AccessKey secret_key =  您的 Se S3 Python SDK 文档 SDK 说明 对象存储 Python SDK 使用开源的 S3 Python SDK boto3 本文档介绍用户如何使用 boto3 来使用对象存储服务 更加详细的接口参数说明, 请在使用时参照 boto3 API 官方说 明 boto3 环境依赖 此版本的 Python SDK 适用于 Python 2.7 安装 Python S3 SDK 通过 pip 安装,

More information

Kubenetes 系列列公开课 2 每周四晚 8 点档 1. Kubernetes 初探 2. 上 手 Kubernetes 3. Kubernetes 的资源调度 4. Kubernetes 的运 行行时 5. Kubernetes 的 网络管理理 6. Kubernetes 的存储管理理 7.

Kubenetes 系列列公开课 2 每周四晚 8 点档 1. Kubernetes 初探 2. 上 手 Kubernetes 3. Kubernetes 的资源调度 4. Kubernetes 的运 行行时 5. Kubernetes 的 网络管理理 6. Kubernetes 的存储管理理 7. Kubernetes 包管理理 工具 Helm 蔺礼强 Kubenetes 系列列公开课 2 每周四晚 8 点档 1. Kubernetes 初探 2. 上 手 Kubernetes 3. Kubernetes 的资源调度 4. Kubernetes 的运 行行时 5. Kubernetes 的 网络管理理 6. Kubernetes 的存储管理理 7. Kubernetes

More information

友普云对象存储操作手册 友普云对象存储操作手册 1 登录友普云管理平台 对象存储服务订购 对象存储使用方法 使用 Cyberduck 客户端管理对象存储 客户端下载 新建连接 新建容器..

友普云对象存储操作手册 友普云对象存储操作手册 1 登录友普云管理平台 对象存储服务订购 对象存储使用方法 使用 Cyberduck 客户端管理对象存储 客户端下载 新建连接 新建容器.. 1 登录友普云管理平台... 2 2 对象存储服务订购... 2 3 对象存储使用方法... 3 3.1 使用 Cyberduck 客户端管理对象存储... 4 3.1.1 客户端下载... 4 3.1.2 新建连接... 4 3.1.3 新建容器... 6 3.1.4 上传文件 ( 对象 )... 7 3.1.5 下载容器或对象... 9 3.1.6 删除文件 ( 对象 )... 10 3.1.7

More information

MASQUERADE # iptables -t nat -A POSTROUTING -s / o eth0 -j # sysctl net.ipv4.ip_forward=1 # iptables -P FORWARD DROP #

MASQUERADE # iptables -t nat -A POSTROUTING -s / o eth0 -j # sysctl net.ipv4.ip_forward=1 # iptables -P FORWARD DROP # iptables 默认安全规则脚本 一 #nat 路由器 ( 一 ) 允许路由 # iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT ( 二 ) DNAT 与端口转发 1 启用 DNAT 转发 # iptables -t nat -A PREROUTING -p tcp -d 192.168.102.37 dprot 422 -j DNAT to-destination

More information

目录 1 IPv6 快速转发 IPv6 快速转发配置命令 display ipv6 fast-forwarding aging-time display ipv6 fast-forwarding cache ipv6 fas

目录 1 IPv6 快速转发 IPv6 快速转发配置命令 display ipv6 fast-forwarding aging-time display ipv6 fast-forwarding cache ipv6 fas 目录 1 IPv6 快速转发 1-1 1.1 IPv6 快速转发配置命令 1-1 1.1.1 display ipv6 fast-forwarding aging-time 1-1 1.1.2 display ipv6 fast-forwarding cache 1-1 1.1.3 ipv6 fast-forwarding aging-time 1-3 1.1.4 ipv6 fast-forwarding

More information

SDK参考

SDK参考 文档版本 05 发布日期 2019-06-25 华为技术有限公司 版权所有 华为技术有限公司 2019 保留一切权利 非经本公司书面许可, 任何单位和个人不得擅自摘抄 复制本文档内容的部分或全部, 并不得以任何形式传播 商标声明 和其他华为商标均为华为技术有限公司的商标 本文档提及的其他所有商标或注册商标, 由各自的所有人拥有 注意 您购买的产品 服务或特性等应受华为公司商业合同和条款的约束, 本文档中描述的全部或部分产品

More information

1 1 大概思路 创建 WebAPI 创建 CrossMainController 并编写 Nuget 安装 microsoft.aspnet.webapi.cors 跨域设置路由 编写 Jquery EasyUI 界面 运行效果 2 创建 WebAPI 创建 WebAPI, 新建 -> 项目 ->

1 1 大概思路 创建 WebAPI 创建 CrossMainController 并编写 Nuget 安装 microsoft.aspnet.webapi.cors 跨域设置路由 编写 Jquery EasyUI 界面 运行效果 2 创建 WebAPI 创建 WebAPI, 新建 -> 项目 -> 目录 1 大概思路... 1 2 创建 WebAPI... 1 3 创建 CrossMainController 并编写... 1 4 Nuget 安装 microsoft.aspnet.webapi.cors... 4 5 跨域设置路由... 4 6 编写 Jquery EasyUI 界面... 5 7 运行效果... 7 8 总结... 7 1 1 大概思路 创建 WebAPI 创建 CrossMainController

More information

一 登录 crm Mobile 系统 : 输入 ShijiCare 用户名和密码, 登录系统, 如图所示 : 第 2 页共 32 页

一 登录 crm Mobile 系统 : 输入 ShijiCare 用户名和密码, 登录系统, 如图所示 : 第 2 页共 32 页 第 1 页共 32 页 crm Mobile V1.0 for IOS 用户手册 一 登录 crm Mobile 系统 : 输入 ShijiCare 用户名和密码, 登录系统, 如图所示 : 第 2 页共 32 页 二 crm Mobile 界面介绍 : 第 3 页共 32 页 三 新建 (New) 功能使用说明 1 选择产品 第 4 页共 32 页 2 填写问题的简要描述和详细描述 第 5 页共

More information

停止混流接口 请注意 : 该功能需要联系 ZEGO 技术支持开通 1 接口调用说明 http 请求方式 : POST/FORM, 需使用 https 正式环境地址 access_token=access_token (http

停止混流接口 请注意 : 该功能需要联系 ZEGO 技术支持开通 1 接口调用说明 http 请求方式 : POST/FORM, 需使用 https 正式环境地址   access_token=access_token (http 停止混流接口 请注意 : 该功能需要联系 ZEGO 技术支持开通 1 接口调用说明 http 请求方式 : POST/FORM, 需使用 https 正式环境地址 https://webapi.zego.im/cgi/stop-mix? access_token=access_token (https://webapi.zego.im/cgi/stop-mix? access_token=access_token)

More information

OOP with Java 通知 Project 4: 4 月 19 日晚 9 点

OOP with Java 通知 Project 4: 4 月 19 日晚 9 点 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 4: 4 月 19 日晚 9 点 复习 类的复用 组合 (composition): has-a 关系 class MyType { public int i; public double d; public char c; public void set(double x) { d

More information

Guava学习之Resources

Guava学习之Resources Resources 提供提供操作 classpath 路径下所有资源的方法 除非另有说明, 否则类中所有方法的参数都不能为 null 虽然有些方法的参数是 URL 类型的, 但是这些方法实现通常不是以 HTTP 完成的 ; 同时这些资源也非 classpath 路径下的 下面两个函数都是根据资源的名称得到其绝对路径, 从函数里面可以看出,Resources 类中的 getresource 函数都是基于

More information

手册 doc

手册 doc 1. 2. 3. 3.1 3.2 3.3 SD 3.4 3.5 SD 3.6 3.7 4. 4.1 4.2 4.3 SD 4.4 5. 5.1 5.2 5.3 SD 6. 1. 1~3 ( ) 320x240~704x288 66 (2G SD 320x2401FPS ) 32M~2G SD SD SD SD 24V DC 3W( ) -10~70 10~90% 154x44x144mm 2. DVR106

More information

RPC SOAP REST API API HTTP JSON XML PHP PHP PHP PHP PHP HTTP request/response cycle HTTP HTTP verbs headers Cookies JSON XML PHP RPC SOAP RESTful HTTP

RPC SOAP REST API API HTTP JSON XML PHP PHP PHP PHP PHP HTTP request/response cycle HTTP HTTP verbs headers Cookies JSON XML PHP RPC SOAP RESTful HTTP RPC SOAP REST API API HTTP JSON XML PHP PHP PHP PHP PHP HTTP request/response cycle HTTP HTTP verbs headers Cookies JSON XML PHP RPC SOAP RESTful HTTP API API 前言 vii 第一章 HTTP HTTP HyperText Transfer Protocol

More information

0 配置 Host MIB 设备 V ( 简体版 ) 0 Update: 2016/1/30

0 配置 Host MIB 设备 V ( 简体版 ) 0 Update: 2016/1/30 0 配置 Host MIB 设备 V 1.1.2 ( 简体版 ) 0 Update: 2016/1/30 前言 N-Reporter 支持 Host Resource MIB 监控主机 (Host) 状态, 本文件描述 N-Reporter 用户如何配置 Host MIB 设备 文件章节如下 : 1. 配置 Windows Server 2003... 2 1-1.Windows Server 2003

More information

Partition Key: 字 符 串 类 型, 表 示 当 前 Entity 的 分 区 信 息 这 个 Property 对 于 Table Service 自 动 纵 向 和 横 向 扩 展 至 关 重 要 Row Key: 字 符 串 类 型, 在 给 定 Partition Key 的

Partition Key: 字 符 串 类 型, 表 示 当 前 Entity 的 分 区 信 息 这 个 Property 对 于 Table Service 自 动 纵 向 和 横 向 扩 展 至 关 重 要 Row Key: 字 符 串 类 型, 在 给 定 Partition Key 的 4.2 使 用 Table Service Table Service 相 对 来 说 是 三 个 Storage Service 中 最 好 理 解 和 最 易 于 接 受 的, 它 主 要 用 来 存 储 结 构 化 数 据 但 是 Table Service 却 并 不 是 一 个 关 系 型 数 据 库 Table Service 由 两 个 部 分 组 成 :Table 和 Entity

More information

Microsoft PowerPoint - 05-Status-Codes-Chinese.ppt

Microsoft PowerPoint - 05-Status-Codes-Chinese.ppt 2004 Marty Hall 服务器响应的生成 : HTTP 状态代码 JSP, Servlet, & Struts Training Courses: http://courses.coreservlets.com Available in US, China, Taiwan, HK, and Worldwide 2 JSP and Servlet Books from Sun Press: http://www.coreservlets.com

More information

A API Application Programming Interface 见 应 用 程 序 编 程 接 口 ARP Address Resolution Protocol 地 址 解 析 协 议 为 IP 地 址 到 对 应 的 硬 件 地 址 之 间 提 供 动 态 映 射 阿 里 云 内

A API Application Programming Interface 见 应 用 程 序 编 程 接 口 ARP Address Resolution Protocol 地 址 解 析 协 议 为 IP 地 址 到 对 应 的 硬 件 地 址 之 间 提 供 动 态 映 射 阿 里 云 内 A API Application Programming Interface 见 应 用 程 序 编 程 接 口 ARP Address Resolution Protocol 地 址 解 析 协 议 为 IP 地 址 到 对 应 的 硬 件 地 址 之 间 提 供 动 态 映 射 阿 里 云 内 容 分 发 网 络 Alibaba Cloud Content Delivery Network 一

More information

SL2511 SR Plus 操作手冊_單面.doc

SL2511 SR Plus 操作手冊_單面.doc IEEE 802.11b SL-2511 SR Plus SENAO INTERNATIONAL CO., LTD www.senao.com - 1 - - 2 - .5 1-1...5 1-2...6 1-3...6 1-4...7.9 2-1...9 2-2 IE...11 SL-2511 SR Plus....13 3-1...13 3-2...14 3-3...15 3-4...16-3

More information

ext-web-auth-wlc.pdf

ext-web-auth-wlc.pdf 使 用 无 线 局 域 网 控 制 器 的 外 部 Web 身 份 验 证 配 置 示 例 目 录 简 介 先 决 条 件 要 求 使 用 的 组 件 规 则 背 景 信 息 外 部 Web 身 份 验 证 过 程 网 络 设 置 配 置 为 来 宾 用 户 创 建 动 态 接 口 创 建 预 先 身 份 验 证 ACL 在 WLC 上 为 来 宾 用 户 创 建 本 地 数 据 库 配 置 外 部

More information

新美大酒店开放平台SDK(.NET版)使用说明.pages

新美大酒店开放平台SDK(.NET版)使用说明.pages SDK(.NET 版 ) 使 用说明 1 SDK 包说明 1.1 获取 SDK SDK 可以在数据平台下载, 也可直接通过下载地址获得 下载地址 : http://s3.meituan.net/v1/mss_de81c933e113413ea913a772b707b9c9/open-platform-sdk/mthotelopenplatform-sdk-1.0-net.zip 下载成功后, 解压后可获得

More information

Ioncube Php Encoder 8 3 Crack 4. llamaba octobre traslado General Search colony

Ioncube Php Encoder 8 3 Crack 4. llamaba octobre traslado General Search colony Ioncube Php Encoder 8 3 Crack 4 ->>->>->> DOWNLOAD 1 / 5 2 / 5 Press..the..General..Tools..category4Encrypt..and..protect..files..with..PHP..encoding,..encryption,..ob fuscation..and..licensing... 2016

More information

* 4 6 R P r p . 1 2 3 4 7 89bk 6 5 1 2 3 4 5 6 7 8 9 0 bk r bl bm bn^ bo bl br bq bpbo bn bm [ ] [ ] [ ] bp 8 2 4 6 bq p [ ] [SET] br clckbt bs bs bt ck cl. 1 2 1 2+- 3 3 . 1 2 3 4 5 6 7 8 9 bk bl bm

More information

目 錄 校 徽 圖 解 1 校 訓 釋 義 2 中 華 人 民 共 和 國 國 歌 3 順 德 聯 誼 總 會 屬 校 校 歌 4 辦 學 宗 旨 及 目 標 5 校 規 8 獎 懲 制 度 14 其 他 規 定 23 注 意 事 項 29 附 錄 33

目 錄 校 徽 圖 解 1 校 訓 釋 義 2 中 華 人 民 共 和 國 國 歌 3 順 德 聯 誼 總 會 屬 校 校 歌 4 辦 學 宗 旨 及 目 標 5 校 規 8 獎 懲 制 度 14 其 他 規 定 23 注 意 事 項 29 附 錄 33 學 生 須 知 網 頁 版 (14/15 年 度 ) 目 錄 校 徽 圖 解 1 校 訓 釋 義 2 中 華 人 民 共 和 國 國 歌 3 順 德 聯 誼 總 會 屬 校 校 歌 4 辦 學 宗 旨 及 目 標 5 校 規 8 獎 懲 制 度 14 其 他 規 定 23 注 意 事 項 29 附 錄 33 校 徽 圖 解 不 規 則 圖 形 是 順 德 市 的 輪 廓, 輪 廓 內 四 小 圖 代

More information

目 录 概 述...4 1 背 景.4 1.1 社 会 背 景...4 1.2 行 业 背 景...5 2 需 求 分 析..6 3 优 势 分 析....7 3.1 资 源 优 势.....7 3.2 品 牌 优 势.....7 3.3 技 术 优 势.....8 3.4 用 户 体 验.....

目 录 概 述...4 1 背 景.4 1.1 社 会 背 景...4 1.2 行 业 背 景...5 2 需 求 分 析..6 3 优 势 分 析....7 3.1 资 源 优 势.....7 3.2 品 牌 优 势.....7 3.3 技 术 优 势.....8 3.4 用 户 体 验..... 目 录 概 述...4 1 背 景.4 1.1 社 会 背 景...4 1.2 行 业 背 景...5 2 需 求 分 析..6 3 优 势 分 析....7 3.1 资 源 优 势.....7 3.2 品 牌 优 势.....7 3.3 技 术 优 势.....8 3.4 用 户 体 验.....8 4 综 合 解 决 方 案....9 4.1 资 源 应 用 服 务 方 案. 9 4.1.1 下

More information

无类继承.key

无类继承.key 无类继承 JavaScript 面向对象的根基 周爱 民 / aimingoo aiming@gmail.com https://aimingoo.github.io https://github.com/aimingoo rand = new Person("Rand McKinnon",... https://docs.oracle.com/cd/e19957-01/816-6408-10/object.htm#1193255

More information

目录 1 IPv6 PIM Snooping 配置命令 IPv6 PIM Snooping 配置命令 display pim-snooping ipv6 neighbor display pim-snooping ipv6 routing-ta

目录 1 IPv6 PIM Snooping 配置命令 IPv6 PIM Snooping 配置命令 display pim-snooping ipv6 neighbor display pim-snooping ipv6 routing-ta 目录 1 IPv6 PIM Snooping 配置命令 1-1 1.1 IPv6 PIM Snooping 配置命令 1-1 1.1.1 display pim-snooping ipv6 neighbor 1-1 1.1.2 display pim-snooping ipv6 routing-table 1-2 1.1.3 display pim-snooping ipv6 statistics

More information

客户端指南(OBS Browser)

客户端指南(OBS Browser) 对象存储服务 客户端指南 (OBS Browser) 文档版本 11 发布日期 2018-07-30 华为技术有限公司 版权所有 华为技术有限公司 2018 保留一切权利 非经本公司书面许可, 任何单位和个人不得擅自摘抄 复制本文档内容的部分或全部, 并不得以任何形式传播 商标声明 和其他华为商标均为华为技术有限公司的商标 本文档提及的其他所有商标或注册商标, 由各自的所有人拥有 注意 您购买的产品

More information

<4D6963726F736F667420576F7264202D20A1B6BBB7BEB3B1A3BBA4D6F7B9DCB2BFC3C5CDF8D5BEBDA8C9E8D3EBCEACBBA4BCBCCAF5B5BCD4F2A3A8B7A2B2BCB8E5A3A9A1B732303135313132375B315D312E646F63>

<4D6963726F736F667420576F7264202D20A1B6BBB7BEB3B1A3BBA4D6F7B9DCB2BFC3C5CDF8D5BEBDA8C9E8D3EBCEACBBA4BCBCCAF5B5BCD4F2A3A8B7A2B2BCB8E5A3A9A1B732303135313132375B315D312E646F63> 中 华 人 民 共 和 国 国 家 环 境 保 护 标 准 HJ 771-2015 环 境 保 护 主 管 部 门 网 站 建 设 与 维 护 技 术 导 则 Technical Guideline for Construction and Maintenance of Government Website for Environmental Protection ( 发 布 稿 ) 本 电 子 版

More information

京东云存储开发者文档

京东云存储开发者文档 更新时间 更新内容 2013/05/21 创建文档 2013/07/10 增加分块上传 API 的内容 2013/07/12 增加桶和对象 API 的内容 目录 京东云存储开发者文档... 1 目录... 2 一 前言... 4 二 介绍... 5 三 相关概念... 6 3.1 AccessKey 与 SecretKey... 6 3.2 Bucket... 6 3.2.1 限制... 6 3.3

More information

第四章 102 图 4唱16 基于图像渲染的理论基础 三张拍摄图像以及它们投影到球面上生成的球面图像 拼图的圆心是相同的 而拼图是由球面图像上的弧线图像组成的 因此我 们称之为同心球拼图 如图 4唱18 所示 这些拼图中半径最大的是圆 Ck 最小的是圆 C0 设圆 Ck 的半径为 r 虚拟相机水平视域为 θ 有 r R sin θ 2 4畅11 由此可见 构造同心球拼图的过程实际上就是对投影图像中的弧线图像

More information

南華大學數位論文

南華大學數位論文 1 1 7 11 12 15 1 2 3 1 1998 9 249 2 1986 11 3 1974 4 17 3 1987 3 2 4 1980 7 1 2 5 6 7 8 5 1999 1994 1995 1999 6 1992 1 196 206 7 1952 1954 6202 231 10 8 9 10 12 13 14 1994 11 75 9 1249 10 883 11 1252

More information

ISE_11__Access-Control_

ISE_11__Access-Control_ Information Security Engineering 2017.11.29 Access Control Huiping Sun( ) sunhp@ss.pku.edu.cn 主要内容 参考书 访问控制简介 Introduction 访问控制定义 The process of granting or denying specific requests to: obtain and use

More information

一.NETGEAR VPN防火墙产品介绍

一.NETGEAR VPN防火墙产品介绍 NETGEAR VPN NETGEAR 6 http://www.netgear.com.cn - 1 - NETGEAR VPN... 4 1.1 VPN...4 1.2 Dynamic Domain Name Service...4 1.3 Netgear VPN...4 Netgear VPN... 6 2.1 FVS318 to FVS318 IKE Main...7 2.1.1 A VPN

More information

Office Office Office Microsoft Word Office Office Azure Office One Drive 2 app 3 : [5] 3, :, [6]; [5], ; [8], [1], ICTCLAS(Institute of Computing Tech

Office Office Office Microsoft Word Office Office Azure Office One Drive 2 app 3 : [5] 3, :, [6]; [5], ; [8], [1], ICTCLAS(Institute of Computing Tech - OfficeCoder 1 2 3 4 1,2,3,4 xingjiarong@mail.sdu.edu.cn 1 xuchongyang@mail.sdu.edu.cn 2 sun.mc@outlook.com 3 luoyuanhang@mail.sdu.edu.cn 4 Abstract. Microsoft Word 2013 Word 2013 Office Keywords:,, HTML5,

More information

端 变更履历 户 修改编号版本修改内容修改人修改日期 1 V1.0 编制刘玉红 第 II 页

端 变更履历 户 修改编号版本修改内容修改人修改日期 1 V1.0 编制刘玉红 第 II 页 密级 : 商秘二级 文件编号 :OPD-G-001 BC-oNest v6 支持的第三方客户端 版本 :v1.0 日期 :2017-04-24 中国移动苏州研发中心 总页数正文附录生效日期 编制 批准 端 变更履历 户 修改编号版本修改内容修改人修改日期 1 V1.0 编制刘玉红 2017-4-24 第 II 页 端 目录 户 1. 简要说明... 1 2. onest 产品概述... 2 2.1

More information

1

1 DOCUMENTATION FOR FAW-VW Auto Co., Ltd. Sales & Service Architecture Concept () () Version 1.0.0.1 Documentation FAW-VW 1 61 1...4 1.1...4 2...4 3...4 3.1...4 3.2...5 3.3...5 4...5 4.1 IP...5 4.2 DNSDNS...6

More information

PowerPoint 演示文稿

PowerPoint 演示文稿 友乾营 报表的 SQL 植入风险 规避风险 : 让你的报表变的安全起来 SQL 植入的概念 恶意的 SQL 归根结底 : 执行了不该允许执行的 SQL 命令, 达到非法的目的 常见案例 骗过登录验证非法获取账号信息篡改 删除数据 为什么存在 SQL 植入 植入原理 如何攻击 特殊的输入参数 未处理特殊字符 -- # 数据库配置不合理 植入原理 : 案例 1, 特殊输入参数 union or 猜表名

More information

Linux服务器构建与运维管理

Linux服务器构建与运维管理 1 Linux 服务器构建与运维管理 第 2 章 :Linux 基本命令 阮晓龙 13938213680 / rxl@hactcm.edu.cn http://linux.xg.hactcm.edu.cn http://www.51xueweb.cn 河南中医药大学管理科学与工程学科 2018.3 2 提纲 目录与文件的操作 mkdir touch mv cp rm rmdir file tree

More information

扬州大学(上)

扬州大学(上) ...1...1...10...21 2004...28 2003...30...32...33...35...36...37...38...38...39...39...39...40...40...41 I ...42...42...43...44...45...47...48...49...50...50...51...51...52...52...53...62...67...75...83...90...95

More information

SDK参考

SDK参考 文档版本 03 发布日期 2018-07-30 华为技术有限公司 版权所有 华为技术有限公司 2018 保留一切权利 非经本公司书面许可, 任何单位和个人不得擅自摘抄 复制本文档内容的部分或全部, 并不得以任何形式传播 商标声明 和其他华为商标均为华为技术有限公司的商标 本文档提及的其他所有商标或注册商标, 由各自的所有人拥有 注意 您购买的产品 服务或特性等应受华为公司商业合同和条款的约束, 本文档中描述的全部或部分产品

More information

工具指南

工具指南 对象存储服务 工具指南 文档版本 01 发布日期 2018-12-11 华为技术有限公司 版权所有 华为技术有限公司 2018 保留一切权利 非经本公司书面许可, 任何单位和个人不得擅自摘抄 复制本文档内容的部分或全部, 并不得以任何形式传播 商标声明 和其他华为商标均为华为技术有限公司的商标 本文档提及的其他所有商标或注册商标, 由各自的所有人拥有 注意 您购买的产品 服务或特性等应受华为公司商业合同和条款的约束,

More information

获取 Access Token 1 基础概念 access_token 是接口的全局唯一票据, 接入方调用各接口时都需使用 access_token 开发者需要妥善保存,access_token 的存储至少要保留 512 个字符空间 access_token 的有效期目前为 2 个小时, 需定时刷新

获取 Access Token 1 基础概念 access_token 是接口的全局唯一票据, 接入方调用各接口时都需使用 access_token 开发者需要妥善保存,access_token 的存储至少要保留 512 个字符空间 access_token 的有效期目前为 2 个小时, 需定时刷新 获取 Access Token 1 基础概念 access_token 是接口的全局唯一票据, 接入方调用各接口时都需使用 access_token 开发者需要妥善保存,access_token 的存储至少要保留 512 个字符空间 access_token 的有效期目前为 2 个小时, 需定时刷新 接入方可以使用 app_id 和 server_app_secret 调用本接口来获取 access_token

More information

EPSON

EPSON NPD5493-00 TC .... 5....5....5....6 SSL/TLS....7....7 IP....8.... 8 Web Config...9 Web Config...10 EpsonNet Config...11 EpsonNet Config Windows...11 EpsonNet Config Windows...11 EpsonNet Config - Windows...

More information

IP505SM_manual_cn.doc

IP505SM_manual_cn.doc IP505SM 1 Introduction 1...4...4...4...5 LAN...5...5...6...6...7 LED...7...7 2...9...9...9 3...11...11...12...12...12...14...18 LAN...19 DHCP...20...21 4 PC...22...22 Windows...22 TCP/IP -...22 TCP/IP

More information

使用Cassandra和Spark 2.0实现Rest API服务

使用Cassandra和Spark 2.0实现Rest API服务 使用 Cassandra 和 Spark 2.0 实现 Rest API 服务 在这篇文章中, 我将介绍如何在 Spark 中使用 Akkahttp 并结合 Cassandra 实现 REST 服务, 在这个系统中 Cassandra 用于数据的存储 我们已经见识到 Spark 的威力, 如果和 Cassandra 正确地结合可以实现更强大的系统 我们先创建一个 build.sbt 文件, 内容如下

More information

01

01 ZEBRA 技术白皮书 条码编码 101 相关知识介绍 引言 20 70 数据 80 20 90 (JIT) AIAG EIA HIBCC HAZMAT 条码的优势提高数据准确性 99% 85% / / 提升效率 / 2 Zebra Technologies 保持一致性 ID 改进库存和资产管理 成本 / 效益分析 ID ID ID (ERP) RFID Zebra Technologies 3 ID

More information

(i) (ii) (iii) (iv) 380,000 [ ] , , % % % 5.5% 6.5%

(i) (ii) (iii) (iv) 380,000 [ ] , , % % % 5.5% 6.5% [] [] [] [] [] [] [] 1961 40 2,000 1990 [] (i) (ii) 38 (i) (ii) (iii) (iv) 380,000 [ ] 201017,763 201422,457 20152020 7.1% 2010 2020 2010 2015 6.2% 20152020 2010 2015 20152020 7.1% 5.5% 6.5% 2010 2011

More information

温州市政府分散采购

温州市政府分散采购 温 州 市 政 府 分 散 采 购 招 标 文 件 招 标 编 号 :F - G B 2 0 1 6 0 3 1 4 0 0 4 7 招 标 项 目 : 温 州 市 人 民 政 府 办 公 室 政 务 云 平 台 ( 重 ) 招 标 方 式 : 公 开 招 标 招 标 人 : 温 州 市 人 民 政 府 办 公 室 招 标 代 理 : 二 〇 一 六 年 三 月 目 录 投 标 保 证 金 办 理

More information

版 權 2014 贊 雲 科 技 股 份 有 限 公 司 版 權 保 護 聲 明 未 經 贊 雲 科 技 股 份 有 限 公 司 書 面 許 可, 本 檔 任 何 部 分 的 內 容 不 得 被 複 製 或 抄 襲 用 於 任 何 目 的 本 檔 的 內 容 在 未 經 通 知 的 情 形 下 可

版 權 2014 贊 雲 科 技 股 份 有 限 公 司 版 權 保 護 聲 明 未 經 贊 雲 科 技 股 份 有 限 公 司 書 面 許 可, 本 檔 任 何 部 分 的 內 容 不 得 被 複 製 或 抄 襲 用 於 任 何 目 的 本 檔 的 內 容 在 未 經 通 知 的 情 形 下 可 版 權 2014 贊 雲 科 技 股 份 有 限 公 司 版 權 保 護 聲 明 未 經 贊 雲 科 技 股 份 有 限 公 司 書 面 許 可, 本 檔 任 何 部 分 的 內 容 不 得 被 複 製 或 抄 襲 用 於 任 何 目 的 本 檔 的 內 容 在 未 經 通 知 的 情 形 下 可 能 會 發 生 改 變, 敬 請 留 意 於 本 檔 中, 贊 雲 科 技 擁 有 專 利 權 商 標

More information

目录 1 简介 1 2 配置前提 1 3 配置环境 服务器 软件 1 4 配置指导 组网拓扑 操作步骤 Red Hat Enterprise Linux Server Red Hat Enterprise Lin

目录 1 简介 1 2 配置前提 1 3 配置环境 服务器 软件 1 4 配置指导 组网拓扑 操作步骤 Red Hat Enterprise Linux Server Red Hat Enterprise Lin Red Hat Enterprise Linux Server 7.x CAStools 安装操作指导书 Copyright 2015 杭州华三通信技术有限公司版权所有, 保留一切权利 非经本公司书面许可, 任何单位和个人不得擅自摘抄 复制本文档内容的部分或全部, 并不得以任何形式传播 本文档中的信息可能变动, 恕不另行通知 目录 1 简介 1 2 配置前提 1 3 配置环境 1 3.1 服务器 1

More information

ebook140-11

ebook140-11 11 VPN Windows NT4 B o r d e r M a n a g e r VPN VPN V P N V P N V P V P N V P N TCP/IP 11.1 V P N V P N / ( ) 11.1.1 11 V P N 285 2 3 1. L A N LAN V P N 10MB 100MB L A N VPN V P N V P N Microsoft PPTP

More information

器之 间 向一致时为正 相反时则为负 ③大量电荷的定向移动形成电 流 单个电荷的定向移动同样形成电流 3 电势与电势差 1 陈述概念 电场中某点处 电荷的电势能 E p 与电荷量 q Ep 的比值叫做该点处的电势 表达式为 V 电场中两点之间的 q 电势之差叫做电势差 表达式为 UAB V A VB 2 理解概念 电势差是电场中任意两点之间的电势之差 与参考点的选择无关 电势是反映电场能的性质的物理量

More information

epub29-13

epub29-13 T C P 13 HTTP 13.1 (Hypertext Transfer Protocol H T T P ) ( World Wide We b W W W We b ) H T T P We b 1 2 We b We b N F S n e t ( 13-1 ) 1994 1 H T T P.01.04.07.10.01.04 13-1 NFSnet ( f t p :// f t p.

More information

恒生银行 ( 中国 ) 银行结构性投资产品表现报告 步步稳 系列部分保本投资产品 产品编号 起始日 到期日 当前观察期是否发生下档触发事件 挂钩标的 最初价格 * 最新价格 累积回报 OTZR 年 5 月 5 日 2018 年 5 月 7 日 3 否 728 HK Equity 3.7

恒生银行 ( 中国 ) 银行结构性投资产品表现报告 步步稳 系列部分保本投资产品 产品编号 起始日 到期日 当前观察期是否发生下档触发事件 挂钩标的 最初价格 * 最新价格 累积回报 OTZR 年 5 月 5 日 2018 年 5 月 7 日 3 否 728 HK Equity 3.7 恒生银行 ( 中国 ) 银行结构性投资产品表现报告 步步稳 系列部分保本投资产品 产品编号 起始日 到期日 当前观察期是否发生下档触发事件 挂钩标的 最初价格 * 最新价格 累积回报 OTZR89 2017 年 5 月 5 日 2018 年 5 月 7 日 3 否 728 HK Equity 3.77 3.45 不适用 941 HK Equity 82.85 73.40 902 HK Equity

More information

长 安 大 学 硕 士 学 位 论 文 基 于 数 据 仓 库 和 数 据 挖 掘 的 行 为 分 析 研 究 姓 名 : 杨 雅 薇 申 请 学 位 级 别 : 硕 士 专 业 : 计 算 机 软 件 与 理 论 指 导 教 师 : 张 卫 钢 20100530 长安大学硕士学位论文 3 1 3系统架构设计 行为分析数据仓库的应用模型由四部分组成 如图3 3所示

More information

WebSphere Studio Application Developer IBM Portal Toolkit... 2/21 1. WebSphere Portal Portal WebSphere Application Server stopserver.bat -configfile..

WebSphere Studio Application Developer IBM Portal Toolkit... 2/21 1. WebSphere Portal Portal WebSphere Application Server stopserver.bat -configfile.. WebSphere Studio Application Developer IBM Portal Toolkit... 1/21 WebSphere Studio Application Developer IBM Portal Toolkit Portlet Doug Phillips (dougep@us.ibm.com),, IBM Developer Technical Support Center

More information

第 期 曹 源 等 形式化方法在列车运行控制系统中的应用

第 期 曹 源 等 形式化方法在列车运行控制系统中的应用 第 卷 第 期 年 月 交通运输工程学报 曹 源 唐 涛 徐田华 穆建成 为了确保列车运行控制系统设计和开发的正确性 比较了仿真 测试和形式化 种能够验证 系统设计正确性的方式 根据列车运行控制系统对安全的苛求性 提出了 个与系统安全相关的重要特性 即实时性 混成性 分布 并发 性 反应性 并分析了与这些特性相关的具体形式化方法 通 过对每种形式化方法的数学基础和应用范围的分析和归类 给出了各种方法的优势和不足

More information

關於本書 l 3 PhoneGap Appcelerator Titanium Sencha Touch (wrapper framework) Native App PhoneGap Build Native App Hybrid App Java Objective-C Android SDK

關於本書 l 3 PhoneGap Appcelerator Titanium Sencha Touch (wrapper framework) Native App PhoneGap Build Native App Hybrid App Java Objective-C Android SDK 2 l 跨裝置網頁設計 Android ios Windows 8 BlackBerry OS Android HTML 5 HTML 5 HTML 4.01 HTML 5 CSS 3 CSS 3 CSS 2.01 CSS 3 2D/3D PC JavaScript

More information

無障礙網頁開發規範二版(草案)

無障礙網頁開發規範二版(草案) 國 家 通 訊 傳 播 委 員 會 無 障 礙 網 頁 開 發 規 範 2.0 版 ( 草 案 ) 委 辦 單 位 : 國 家 通 訊 傳 播 委 員 會 執 行 單 位 : 中 華 民 國 資 訊 軟 體 協 會 中 華 民 國 1 0 3 年 0 5 月 I II 目 錄 壹 前 言... 1 貳 適 用 範 圍... 2 參 用 語 釋 義... 3 肆 規 範 內 文... 14 一 規 範

More information

Microsoft Word - AccessPortal使用手册v3.1.doc

Microsoft Word - AccessPortal使用手册v3.1.doc HighGuard Access Portal 使用手册 地址 : 上海市张江高科技园区松涛路 563 号海外创新园 B 座 301-302 室 电话 : 021-50806229 传真 : 021-50808180 电子邮件 : marketing@highguard.com.cn 第 1 页共 24 页 目录 1. ACCESSPORTAL 概述...4 1.1. AccessPortal 主页面

More information

ASP 電子商務網頁設計

ASP 電子商務網頁設計 Flash Flash CSIE, NTU December 22, 2007 Outline & Flash National Taiwan University December 22, 2007 Page 2 Outline & Flash National Taiwan University December 22, 2007 Page 3 Course Introduction (1/3)

More information

ABOUT ME AGENDA 唐建法 / TJ MongoDB 高级方案架构师 MongoDB 中文社区联合发起人 Spark 介绍 Spark 和 MongoDB 案例演示

ABOUT ME AGENDA 唐建法 / TJ MongoDB 高级方案架构师 MongoDB 中文社区联合发起人 Spark 介绍 Spark 和 MongoDB 案例演示 完整的大数据解決方案 ABOUT ME AGENDA 唐建法 / TJ MongoDB 高级方案架构师 MongoDB 中文社区联合发起人 Spark 介绍 Spark 和 MongoDB 案例演示 Dataframe Pig YARN Spark Stand Alone HDFS Spark Stand Alone Mesos Mesos Spark Streaming Hive Hadoop

More information

100/120EX A-61588_zh-tw 9E8696

100/120EX A-61588_zh-tw 9E8696 100/120EX A-61588_zh-tw 9E8696 1 1-1........................................... 1-2............................................... 1-3.................................................. 1-3.........................................

More information

2014 年 87 月 259 日 K-HW508K / HW516K K-NL408K / NL416K 最新固件版本 :V3.200 容量 供应商 系列 型号 格式 可用性 兼容性能 备注 500G Seagate Pipeline HD2 ST CS - 可用 Seagate Pi

2014 年 87 月 259 日 K-HW508K / HW516K K-NL408K / NL416K 最新固件版本 :V3.200 容量 供应商 系列 型号 格式 可用性 兼容性能 备注 500G Seagate Pipeline HD2 ST CS - 可用 Seagate Pi 纠正点从 2014 年 5 月 12 日的版本开始 我们缺少的 4TB 硬盘的型号 : WJ-ND400 / 和 WJ-HD616K / WJ-716K / WJ-ND400 WJ-HD616K WJ-HD716K 4TB 红 40PURX-64GVNY0 AF OK 4TB 红 40EFRX-68WT0N0 AF OK 纠正点 1 2014 年 87 月 259 日 K-HW508K / HW516K

More information

PowerPoint Presentation

PowerPoint Presentation 立 97 年度 SNMG 練 DNS & BIND enc1215@gmail.com DNS BIND Resolver Named 理 Named 更 DNS DNS Reference 2 DNS DNS 料 domain ip DNS server DNS server 理 DNS server DNS DNS 狀. root name server 理 3 DNS 狀 DNS (2). com

More information

FPGAs in Next Generation Wireless Networks WPChinese

FPGAs in Next Generation Wireless Networks WPChinese FPGA 2010 3 Lattice Semiconductor 5555 Northeast Moore Ct. Hillsboro, Oregon 97124 USA Telephone: (503) 268-8000 www.latticesemi.com 1 FPGAs in Next Generation Wireless Networks GSM GSM-EDGE 384kbps CDMA2000

More information

CAS CAS GY/Z GY/Z Extensible Markup Language (XML) 1.0 File Transfer Protocol, RFC959, RFC1123, RFC228, RFC2577, RFC

CAS CAS GY/Z GY/Z Extensible Markup Language (XML) 1.0 File Transfer Protocol, RFC959, RFC1123, RFC228, RFC2577, RFC I CAS 2003 3 CAS GY/Z 174-2001 GY/Z 175-2001 Extensible Markup Language (XML) 1.0 File Transfer Protocol, RFC959, RFC1123, RFC228, RFC2577, RFC2640 2003 6 13 2005 1 28 II 1....1 2......1 3......1 3.1...1

More information

Microsoft Word - PS2_linux_guide_cn.doc

Microsoft Word - PS2_linux_guide_cn.doc Linux For $ONY PlayStatioin2 Unofficall General Guide Language: Simplified Chinese First Write By Beter Hans v0.1 Mail: hansb@citiz.net Version: 0.1 本 人 是 菜 鸟 + 小 白 欢 迎 指 正 错 误 之 处, 如 果 您 有 其 他 使 用 心 得

More information

Microsoft Word - json入门.doc

Microsoft Word - json入门.doc Json 入门 送给亲爱的女朋友, 祝她天天快乐 作者 :hlz QQ:81452743 MSN/Email:hulizhong2008@163.com json 入门 (1) json 是 JavaScript Object Notation 的简称 ; 在 web 系统开发中与 AJAX 相结合用的比较多 在 ajax 中数据传输有 2 中方式 : 文本类型, 常用 responsetext 属性类获取

More information

册子0906

册子0906 IBM SelectStack ( PMC v2.0 ) 模块化私有云管理平台 是跨主流虚拟化技术的统一资源云管理平台 01 亮点 : 快速可靠地实现集成化 私有云管理平台 02/03 丰富的功能支持企业数据中心云计算 扩展性强 : 简单易用 : 04/05 功能丰富 : 06/07 为什么选择 IBM SelectStack (PMC v2.0)? 快速实现价值 提高创新能力 降低 IT 成本 降低复杂度和风险

More information

K-HW508K / HW516K K-NL408K / NL416K 最新固件版本 :V G Seagate Pipeline HD2 ST CS - 可用 Seagate Pipeline HD2 ST1000VM002 - 可用 1T Seagate SV35.5

K-HW508K / HW516K K-NL408K / NL416K 最新固件版本 :V G Seagate Pipeline HD2 ST CS - 可用 Seagate Pipeline HD2 ST1000VM002 - 可用 1T Seagate SV35.5 注意请使用 5T 或 6T 的硬盘架 (WJ-ND400/ WJ-HDE400/WJ-HD716/WJ-HD616) 请不要在 5TB 或 6TB 硬盘底部安 2 颗螺丝 ( 下方标记 ), 因为螺丝要长于螺旋孔的深度 顶视图 底视图 1 K-HW508K / HW516K K-NL408K / NL416K 最新固件版本 :V3.200 500G Seagate Pipeline HD2 ST3500312CS

More information

TWLOM060929

TWLOM060929 TWLOM 2006.09.29 TWLOM TWLOM 2 TWLOM TW LOM TW LOM (Taiwan Learning Object Metadata) Learning Object Metadata (IEEE 1484.12.1-2002 LOM v1.0) (learning object) LOM LOM SCORM CanCore UK LOM Core TW LOM 4

More information

VIDEOJET connect 7000 VJC-7000-90 zh- CHS Operation Manual VIDEOJET connect 7000 zh-chs 3 目 录 1 浏 览 器 连 接 7 1.1 系 统 要 求 7 1.2 建 立 连 接 7 1.2.1 摄 像 机 中 的 密 码 保 护 7 1.3 受 保 护 的 网 络 7 2 系 统 概 述 8 2.1 实 况

More information

エスポラージュ株式会社 住所 : 東京都江東区大島 東急ドエルアルス大島 HP: ******************* * 关于 Java 测试试题 ******

エスポラージュ株式会社 住所 : 東京都江東区大島 東急ドエルアルス大島 HP:  ******************* * 关于 Java 测试试题 ****** ******************* * 关于 Java 测试试题 ******************* 問 1 运行下面的程序, 选出一个正确的运行结果 public class Sample { public static void main(string[] args) { int[] test = { 1, 2, 3, 4, 5 ; for(int i = 1 ; i System.out.print(test[i]);

More information

ebook140-9

ebook140-9 9 VPN VPN Novell BorderManager Windows NT PPTP V P N L A V P N V N P I n t e r n e t V P N 9.1 V P N Windows 98 Windows PPTP VPN Novell BorderManager T M I P s e c Wi n d o w s I n t e r n e t I S P I

More information

ebook 132-2

ebook 132-2 2 SQL Server 7.0 SQL Server SQL Server 7 SQL Server 7 5 2.1 SQL Server 7 SQL Server 7 SQL Server SQL Server SQL Server 2.1.1 SQL Server Windows NT/2000 Windows 95/98 ( r a n d o m access memory R A M )

More information

参数管理接口API文档

参数管理接口API文档 云数据库 TDSQL 参数管理接口 API 文档 版权声明 2015-2016 腾讯云版权所有 本文档著作权归腾讯云单独所有, 未经腾讯云事先书面许可, 任何主体不得以任何形式复制 修改 抄袭 传 播全部或部分本文档内容 商标声明 及其它腾讯云服务相关的商标均为腾讯云计算 ( 北京 ) 有限责任公司及其关联公司所有 本文档涉及的第三方 主体的商标, 依法由权利人所有 服务声明 本文档意在向客户介绍腾讯云全部或部分产品

More information

Autodesk Product Design Suite Standard 系统统需求 典型用户户和工作流 Autodesk Product Design Suite Standard 版本为为负责创建非凡凡产品的设计师师和工程师提供供基本方案设计和和制图工具, 以获得令人惊叹叹的产品

Autodesk Product Design Suite Standard 系统统需求 典型用户户和工作流 Autodesk Product Design Suite Standard 版本为为负责创建非凡凡产品的设计师师和工程师提供供基本方案设计和和制图工具, 以获得令人惊叹叹的产品 Autodesk Product Design Suite Standard 20122 系统统需求 典型用户户和工作流 Autodesk Product Design Suite Standard 版本为为负责创建非凡凡产品的设计师师和工程师提供供基本方案设计和和制图工具, 以获得令人惊叹叹的产品设计 Autodesk Product Design Suite Standard 版本包包括以下软件产产品

More information

KV-cache 1 KV-cache Fig.1 WorkflowofKV-cache 2.2 Key-value Key ; Key Mem-cache (FIFO) Value Value Key Mem-cache ( Value 256B 100 MB 20%

KV-cache 1 KV-cache Fig.1 WorkflowofKV-cache 2.2 Key-value Key ; Key Mem-cache (FIFO) Value Value Key Mem-cache ( Value 256B 100 MB 20% 38 11 2013 11 GeomaticsandInformationScienceofWuhanUniversity Vol.38No.11 Nov.2013 :1671-8860(2013)11-1339-05 :A GIS Key-value 1 1 1 1 (1 129 430079) : 设计了一种基于 Key-value 结构的缓存 KV-cache 旨在简化数据结构 高效管理缓存数据

More information