elastic cloud storage (ecs)...7 9 s3 11 s3 13 ecs 中的 amazon s3 api 支持 14 s3 api...

174
Elastic Cloud Storage (ECS) 版本 3.1 数据访问指南 302-003-865 01

Upload: others

Post on 11-Apr-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

Elastic Cloud Storage (ECS)版本 3.1

数据访问指南302-003-865

01

Page 2: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

版权所有 © 2013-2017 Dell Inc. 或其子公司。 保留所有权利。

发布日期: 2017 年 8 月

戴尔确信本出版物在发布之日内容准确无误。本出版物中的信息可随时更改而不另行通知。

本出版物的内容按“原样”提供。戴尔对本出版物的内容不提供任何形式的陈述或担保,明确拒绝对有特定目的的适销性或适用性进行默示担保。使用、复制或分发本出版物所描述的任何戴尔软件都要有相应的软件许可证。

Dell、EMC 和其他商标为 Dell Inc. 或其子公司的商标。其他商标可能是其各自所有者的资产。中国印刷。

易安信电脑系统(中国)有限公司中国北京朝阳区霄云路 38 号 现代汽车大厦 15 层 邮编:100027电话:(8610)8438 6000 传真:(8610)8453 8174 售前服务热线:400 650 6006www.EMC.com/zh-cn/index.htm

2 Elastic Cloud Storage (ECS) 3.1 数据访问指南

Page 3: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

7

9

S3 11

S3 13ECS 中的 Amazon S3 API 支持................................................................... 14S3 API 支持和不支持的功能........................................................................ 14

存储区已存在情况下的行为............................................................ 17存储区策略支持...........................................................................................17

创建、分配和管理存储区策略........................................................ 19存储区策略方案............................................................................. 20支持的存储区策略操作................................................................... 21支持的存储区策略条件.................................................................. 22

S3 扩展.......................................................................................................24字节范围扩展.................................................................................24保留期........................................................................................... 28启用文件系统.................................................................................29

元数据搜索................................................................................................. 29向存储区分配元数据索引值........................................................... 30在元数据搜索中结合使用加密........................................................32使用 S3 协议将元数据分配给对象..................................................32使用元数据搜索查询...................................................................... 33从 ECS Java SDK 使用元数据搜索 ................................................38ECS 系统元数据和可选属性...........................................................38

S3 和 Swift 互操作性..................................................................................39创建和管理密钥...........................................................................................41

为对象用户创建密钥.......................................................................41创建 S3 密钥:自助服务................................................................42

通过 S3 服务进行身份验证......................................................................... 44在 ECS 中使用 s3curl................................................................................. 46使用 SDK 访问 S3 服务...............................................................................46

使用 Java Amazon SDK................................................................. 46适用于 ECS 的 Java SDK 客户端................................................... 48

OpenStack Swift 51

OpenStack Swift 53ECS 中的 OpenStack Swift 支持................................................................ 54OpenStack Swift 支持的操作..................................................................... 54Swift 扩展.................................................................................................. 56Swift 字节范围扩展.................................................................................... 56

在对象中更新字节范围.................................................................. 56覆盖对象的一部分..........................................................................57向对象添加数据............................................................................. 58

第 1 部分

第 1 章

第 2 部分

第 2 章

目录

Elastic Cloud Storage (ECS) 3.1 数据访问指南 3

Page 4: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

在一个对象中读取多个字节范围....................................................59保留期........................................................................................................ 60启用文件系统............................................................................................. 60S3 和 Swift 互操作性.................................................................................. 61OpenStack Swift 身份验证..........................................................................61

在 ECS 门户创建 Swift 用户...........................................................61OpenStack 版本 1 身份验证 .......................................................... 62OpenStack 版本 2 身份验证.......................................................... 64使用 ECS Keystone V3 集成进行的身份验证................................. 66

容器授权.....................................................................................................68

EMC Atmos(Syncplicity 技术白皮书:EMC Atmos) 71

EMC Atmos(Syncplicity 技术白皮书:EMC Atmos) 73ECS 中的 EMC Atmos API 支持..................................................................74支持的 EMC Atmos REST API 调用............................................................ 74不支持的 EMC Atmos REST API 调用.........................................................76EMC Atmos REST API 调用中的子租户支持...............................................76API 扩展......................................................................................................77

向对象添加数据............................................................................. 77ECS 支持 Atmos 对象的保留期和保留过期期限.............................78

CAS 83

CAS 85在 ECS 中设置 CAS 支持............................................................................86冷存储........................................................................................................ 86法规遵从性................................................................................................. 87

平台加固和法规遵从性.................................................................. 87法规遵从性和保留策略.................................................................. 88法规遵从性代理............................................................................. 89

ECS 中的 CAS 保留....................................................................................89CAS 应用程序的高级保留:基于事件的保留、诉讼封存和 小/ 大调控器..91设置命名空间保留策略............................................................................... 96为 CAS 用户创建和设置存储区...................................................................97设置 CAS 对象用户.....................................................................................98设置 CAS 的存储区 ACL............................................................................. 99支持 CAS 用户的 ECS Management API....................................................101内容寻址存储 (CAS) SDK API 支持........................................................... 102

ECS 管理 REST API 103

ECS 管理 REST API 105ECS Management REST API 简介.............................................................106使用 ECS Management REST API 进行身份验证...................................... 106

不使用 cookie 进行身份验证 ....................................................... 106注销............................................................................................. 108ECS Management REST API whoami 命令................................... 108ECS Management REST API 摘要................................................109

第 3 部分

第 3 章

第 4 部分

第 4 章

第 5 部分

第 5 章

目录

4 Elastic Cloud Storage (ECS) 3.1 数据访问指南

Page 5: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

HDFS 113

ECS HDFS 简介 115ECS HDFS 简介......................................................................................... 116配置 Hadoop 以使用 ECS HDFS ................................................................117Hadoop 身份验证模式................................................................................ 117

作为文件系统访问存储区.............................................................. 118存储区自定义组 ACL 和默认组......................................................118Hadoop 超级用户和超级组............................................................119多协议(跨标头)访问..................................................................119代理用户....................................................................................... 119对等用户...................................................................................... 120

从简单群集迁移到 Kerberos Hadoop 群集.................................................120Hadoop Kerberos 身份认证模式................................................... 120

文件系统交互.............................................................................................121支持的 Hadoop 应用程序........................................................................... 121

配置简单的 Hadoop 群集与 ECS HDFS 之间的集成 123将简单的 Hadoop 群集与 ECS HDFS 相集成............................................. 124使用 Ambari 安装 Hortonworks HDP......................................................... 124使用 ECS 门户为 HDFS 创建存储区.......................................................... 126

设置自定义组存储区 ACL............................................................. 128设置用户存储区 ACL.................................................................... 129Hadoop 和 ECS 存储区权限示例.................................................. 130

计划 HDFS 和 Hadoop 集成.......................................................................132获取 ECS HDFS 安装和支持包.................................................................. 132部署 ECS HDFS 客户端库......................................................................... 133配置 ECS 客户端属性................................................................................ 133设置 Hive.................................................................................................. 135验证对 ECS 的 Hadoop 访问权限.............................................................. 136保护存储区................................................................................................136将默认文件系统从 HDFS 重新定位到 ECS 存储区.....................................137

使用 ECS HDFS 配置 Kerberized Hadoop 群集 l 139与 ECS HDFS 集成安全的 Hadoop 群集 ................................................... 140规划从简单群集到 Kerberos 群集的迁移................................................... 140映射组名称................................................................................................140使用 ECS 服务主体配置 ECS 节点............................................................. 141使用 Ambari 启用 Kerberos....................................................................... 144使用元数据保证 ECS 存储区的安全.......................................................... 145

使用 Management REST API 将元数据值加载到 ECS.................. 148重新配置 ECS 客户端属性.........................................................................149启动 Hadoop 服务,并验证对 ECS 的 Hadoop 访问权限........................... 149

故障排除 151简介.......................................................................................................... 152验证是否使用安全 Hadoop 群集正确配置了 AD/LDAP..............................152Pig 测试失败:无法获取 Kerberos 主体.................................................... 152AD 用户拒绝的权限................................................................................... 153权限错误................................................................................................... 153无法处理请求............................................................................................ 156启用 Kerberos 客户端日志记录和调试.......................................................156在 KDC 上调试 Kerberos........................................................................... 157

第 6 部分

第 6 章

第 7 章

第 8 章

第 9 章

目录

Elastic Cloud Storage (ECS) 3.1 数据访问指南 5

Page 6: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

消除时钟偏差............................................................................................ 157使用 ECS 服务主体配置一个或多个新 ECS 节点....................................... 157“Yarn 目录不存在”错误消息的解决方法................................................ 159

附录:有关 Kerberos 配置的指导 161有关 Kerberos 配置的指导.........................................................................162

设置 Kerberos KDC...................................................................... 162为 Kerberos 配置 AD 用户身份认证.............................................. 163

附录:ECS HDFS 的 Hadoop core-site.xml 属性 165ECS HDFS 的 Hadoop core-site.xml 属性................................................. 166

简单身份认证模式的 core-site.xml 示例....................................... 169

附录:安全存储区元数据示例 171安全存储区元数据..................................................................................... 172

第 10 章

第 11 章

第 12 章

目录

6 Elastic Cloud Storage (ECS) 3.1 数据访问指南

Page 7: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

在 ECS 门户中的新命名空间上启用法规遵从性..........................................................89CAS 存储区的保留选项.............................................................................................. 92EBR 方案.................................................................................................................... 94诉讼封存方案............................................................................................................. 96新建保留策略..............................................................................................................97命名空间的保留策略................................................................................................... 97对象用户的 CAS 设置................................................................................................. 99编辑存储区 ACL........................................................................................................ 100存储区 ACL 管理....................................................................................................... 100在 Hadoop 群集中集成 ECS HDFS ............................................................................ 116

12345678910

Elastic Cloud Storage (ECS) 3.1 数据访问指南 7

Page 8: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

8 Elastic Cloud Storage (ECS) 3.1 数据访问指南

Page 9: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

支持的 S3 API............................................................................................................. 14其他功能..................................................................................................................... 16不支持的 S3 API..........................................................................................................16对象操作的权限...........................................................................................................21存储区操作的权限...................................................................................................... 22存储区子资源操作的权限............................................................................................22支持的通用 AWS 条件关键字......................................................................................22支持的对象操作的 S3 特定条件关键字....................................................................... 23支持的存储区操作的 S3 特定条件关键字....................................................................23OpenStack Swift 支持的调用..................................................................................... 54其他功能.....................................................................................................................55OpenStack Swift 不支持的调用..................................................................................56Keystone 身份验证提供程序设置................................................................................68支持的 Atmos REST API 调用..................................................................................... 74不支持的 Atmos REST API 调用................................................................................. 76Atmos 保留期............................................................................................................. 78常规归档和冷归档的要求比较.................................................................................... 86用于保留的 ECS Management API 资源......................................................................91用于基于事件的保留的 CAS API 函数.........................................................................94用于诉讼封存的 CAS API 函数................................................................................... 96存储区 ACL............................................................................................................... 100存储区 ACL 组........................................................................................................... 101ECS 管理 REST API— 方法汇总............................................................................... 109简单 Hadoop 群集中关于文件系统访问的存储区权限示例.........................................130Kerberos Hadoop 群集中关于文件系统访问的存储区权限......................................... 131ECS HDFS 配置前提条件.......................................................................................... 132ECS HDFS 客户端库................................................................................................. 133用于启用 ECS 访问的 Hadoop 配置...........................................................................134Hive templeton 配置..................................................................................................135支持 Hive 并发和 ACID 事务的 Hadoop 配置............................................................. 138用于启用 ECS 访问的 Hadoop 配置...........................................................................149Hadoop core-site.xml 属性........................................................................................ 166

1234567891011121314151617181920212223242526272829303132

Elastic Cloud Storage (ECS) 3.1 数据访问指南 9

Page 10: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

10 Elastic Cloud Storage (ECS) 3.1 数据访问指南

Page 11: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

第 1 部分

S3

第 1 章, "S3"

S3 11

Page 12: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

S3

12 Elastic Cloud Storage (ECS) 3.1 数据访问指南

Page 13: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

第 1 章

S3

l ECS 中的 Amazon S3 API 支持........................................................................... 14l S3 API 支持和不支持的功能............................................................................... 14l 存储区策略支持.................................................................................................. 17l S3 扩展.............................................................................................................. 24l 元数据搜索.........................................................................................................29l S3 和 Swift 互操作性......................................................................................... 39l 创建和管理密钥.................................................................................................. 41l 通过 S3 服务进行身份验证.................................................................................44l 在 ECS 中使用 s3curl......................................................................................... 46l 使用 SDK 访问 S3 服务...................................................................................... 46

S3 13

Page 14: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

ECS 中的 Amazon S3 API 支持ECS 提供了对 Amazon Simple Storage Service (Amazon S3) 应用程序编程接口 (API)的支持。

Amazon S3 对象服务在以下端口上可用。

协议 端口

HTTP 9020

HTTPS 9021

以下主题介绍对 S3 API 的支持,ECS 提供的扩展,以及如何通过服务进行身份验证以及如何使用软件开发工具包 (SDK) 来开发客户端以访问服务:

l S3 API 支持和不支持的功能(第 14 页)l S3 扩展(第 24 页)l 元数据搜索(第 29 页)l 创建和管理密钥(第 41 页)l 通过 S3 服务进行身份验证(第 44 页)l 使用 SDK 访问 S3 服务(第 46 页)

存储区寻址和身份认证的一些方面特定于 ECS。如果您想要配置现有应用程序以与ECS 进行通信,或者开发一款使用 S3 API 与 ECS 进行通信的新应用程序,那么您应该参阅 ECS 支持站点上提供的《ECS 管理指南》中的“基本 URL”部分。

S3 API 支持和不支持的功能ECS 支持 Amazon S3 REST API 的子集。

下面部分详细介绍了支持和不支持的 API:

l 支持的 S3 API(第 14 页)l 不支持的 S3 API(第 16 页)

支持的 S3 API下表列出了支持的 S3 API 方法。

表 1 支持的 S3 API

功能 注释

GET Service ECS 支持 marker 和 max-keys 参数以启用存储区列表分页。

GET /?marker=<bucket>&max-keys=<num>

例如:

GET /?marker=mybucket&max-keys=40

DELETE Bucket

S3

14 Elastic Cloud Storage (ECS) 3.1 数据访问指南

Page 15: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

表 1 支持的 S3 API (续)

功能 注释

DELETE Bucket cors

DELETE Bucket lifecycle 在生命周期中只支持到期部分。不支持与归档 (AWS Glacier)相关的策略。在启用文件系统的存储区上不支持生命周期。

DELETE Bucket policy

GET Bucket (List Objects) 对于启用文件系统的存储区,当列出存储区中的对象时,/ 是唯一受支持的分隔符。

GET Bucket cors

GET Bucket acl

GET Bucket lifecycle 在生命周期中只支持到期部分。不支持与归档 (AWS Glacier)相关的策略。在启用文件系统的存储区上不支持生命周期。

GET Bucket policy

GET Bucket Object versions

GET Bucket versioning

HEAD Bucket

List Multipart Uploads

PUT Bucket 其中 PUT 是在现有存储区上执行,请参阅存储区已存在情况下的行为(第 17 页)。

PUT Bucket cors

PUT Bucket acl

PUT Bucket lifecycle 在生命周期中只支持到期部分。不支持与归档 (AWS Glacier)相关的策略。在启用文件系统的存储区上不支持生命周期。

PUT Bucket policy 不能为启用文件系统或启用 CAS 的存储区配置存储区策略。不能为 ECS 不支持的操作配置存储区策略。有关存储区策略支持的详细信息,请参阅存储区策略支持。

PUT Bucket versioning

DELETE Object

Delete Multiple Objects

GET Object

GET Object ACL

HEAD Object

PUT Object 支持分块 PUT

PUT Object acl

PUT Object - Copy

OPTIONS object

Initiate Multipart Upload

S3

S3 API 支持和不支持的功能 15

Page 16: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

表 1 支持的 S3 API (续)

功能 注释

Upload Part

Upload Part - Copy

Complete Multipart Upload 对于该请求,ECS 将返回 00 ETag。这不同于 Amazon S3 响应。

Abort Multipart Upload

List Parts

l 使用长度不到三个字符的名称创建存储区将失败,并显示错误消息 400 BadRequest, InvalidBucketName(400 错误请求,存储区名称无效)。

l 在使用空内容创建存储区或对象时,ECS 将返回错误消息 400 invalidcontent-length value(400 无效内容长度值),而 AWS 将返回错误消息400 Bad Request(400 错误请求)。

l 将对象拷贝到另一个使用相同的用户元数据索引密钥来编制索引,但具有不受支持的不同数据类型的存储区时,此操作将失败并显示错误消息 500 Server Error(500 服务器错误)。

l 当列出存储区中的对象时,如果您使用前缀和分隔符,但提供了无效的标记,ECS会显示 500 Server Error(500 服务器错误),或者对于启用文件系统的存储区,会显示 400 Bad Request(400 错误请求)。而 AWS 会返回 200 OK(200 确定),但是不会列出任何对象。

表 2 其他功能

功能 注释

预签署的 URL ECS 支持使用预签署的 URL 以允许授予访问对象而无需凭据。

可在此处找到更多信息。

分块 PUT 可以使用 PUT 操作以块的形式上载对象。这样可以在知道有效负载的总大小之前就发送内容。分块的传输使用传输编码标头(Transfer-Encoding:chunked) 指定内容将分区块传输。

不支持的 S3 API下表列出了不支持的 S3 API 方法。

表 3 不支持的 S3 API

功能 注释

DELETE Bucket tagging

DELETE Bucket website

GET Bucket location ECS 只感知单个虚拟数据中心 (VDC)。

S3

16 Elastic Cloud Storage (ECS) 3.1 数据访问指南

Page 17: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

表 3 不支持的 S3 API (续)

功能 注释

GET Bucket logging

GET Bucket notification 在 S3 中只针对减少的冗余性功能定义通知。ECS 当前不支持通知。

GET Bucket tagging

GET Bucket requestPayment ECS 使用自己的支付模式。

GET Bucket website

PUT Bucket logging

PUT Bucket notification 在 S3 中只针对减少的冗余性功能定义通知。ECS 当前不支持通知。

PUT Bucket tagging

PUT Bucket requestPayment ECS 使用自己的支付模式。

PUT Bucket website

对象 API

GET Object torrent

POST Object

POST Object restore 此操作与 AWS Glacier 相关,目前在 ECS 中不支持。

存储区已存在情况下的行为

当尝试使用已存在的名称创建存储区时,ECS 的行为可能不同于 AWS。

当具有存储区的完全控制权限或任何其他权限的用户尝试重新创建存储区时,AWS 将始终返回 409 Conflict(409 冲突)。当具有存储区的 FULL_CONTROL 或WRITE_ACP 权限的用户尝试重新创建存储区,ECS 将返回 200 OK 并且 ACL 会被覆盖,但不会更改所有者。当具有读/写权限的 ECS 用户尝试重新创建存储区时,系统将显示 409 Conflict(409 冲突)。

当存储区所有者尝试重新创建存储区时,ECS 将返回 200 OK(200 确定)并覆盖ACL。AWS 的行为方式是一样的。

当对存储区没有访问权限的用户尝试重新创建存储区时,系统会显示错误消息 409Conflict(409 冲突)。AWS 的行为方式是一样的。

存储区策略支持ECS 支持设置 S3 存储区访问策略。不同于 ACL(可以允许所有操作或不允许任何操作),访问策略支持为特定用户或所有用户提供特定操作的条件性和精细权限。可使用策略条件为符合条件的一系列对象分配权限,也可以使用策略条件自动将权限分配给新上载的对象。

有关使用 S3 协议时管理资源访问的方式,请参阅以下网址:http://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html,您可以使用此内容作为了解和在 ECS 中使用 S3 存储区策略的基础。此部分中的信息提供了有关使用存储区策略的基本信息,并明确了在 ECS 中使用存储区策略时的不同之处。

S3

存储区已存在情况下的行为 17

Page 18: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

下面提供了 ECS 存储区策略的示例。

{ "Version":"2012-10-17", "Id":"S3PolicyIdNew2", "Statement":[ { "Sid":"Granting PutObject permission to user2 ", "Effect":"Allow", "Principal":"user_n2", "Action":["s3:PutObject"], "Resource":["PolicyBuck1/*"], "Condition":{ "StringEquals":{"s3:x-amz-server-side-encryption":[ "AES256"]} } } ]}

每个策略都是一个 JavaScript 对象表示法 (JSON) 文档,其中包括版本、标识符以及一个或多个语句。

Version

“Version”字段中指定了策略语言版本,可以是 2012-10-17 或2008-10-17。如果没有指定版本,将自动插入 2008-10-17。

好将新策略的策略语言设置为 新版本,2012-10-17。

Id

“Id”字段为可选字段。

每个语句包含以下元素:

SID

语句 ID。这是一个字符串,描述了语句的作用。

资源作为语句主题的存储区或对象。资源可以与 Resource 或 NotResource 语句相关联。

资源名称是存储区和关键字名称并以不同的方式的指定,具体取决于您使用的是虚拟主机样式寻址还是路径样式寻址,如下所示:

Host Style:http://bucketname.ns1.emc.com/objectnamePath Style:http://ns1.emc.com/bucketname/objectname

在任一情况下,资源名称均为:bucketname/objectname 。

您可以使用 * 和 ? 通配符字符,其中星号 (*) 表示零个或多个字符的任意组合,问号 (?) 表示任何单个字符。例如,可以使用以下关键字在名为 “bucketname”的存储区中表示所有对象:

bucketname/*

S3

18 Elastic Cloud Storage (ECS) 3.1 数据访问指南

Page 19: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

Actions

您想要分配权限(允许或拒绝)的一组操作。支持的存储区策略操作(第 21页)中列出了支持的操作。

此操作可与 Action 或 NotAction 语句关联。

Effect

可以设置为 Allow 或 Deny 以确定您是否要允许或拒绝指定的操作。

Principal

允许或拒绝指定操作的 ECS 对象用户。

要将权限授予每个人(称为匿名访问),您可以将主体值设置为通配符“*”,如下所示:

"Principal":"*"

ECS 存储区策略不支持联合用户,也不支持 Amazon IAM 用户和角色。

条件策略生效的条件。条件表达式用于匹配在策略(具有在请求中提供的条件)中提供的条件。

不支持以下条件运算符:二进制、ARN、IfExists、Check Key Exists。支持的存储区策略条件(第 22 页)中列出了受支持的条件关键字。

有关您可以在策略中使用的元素的详细信息,请参阅此处提供的 Amazon S3 文档。

创建、分配和管理存储区策略

您可以从 ECS 门户为存储区创建存储区策略(请参见 ECS 支持站点上提供的《ECS 管理指南》)。还可以使用另一个编辑器创建策略,并使用 ECS Management REST API或 ECS S3 API 将策略与存储区相关联。

ECS Management REST API 提供了以下 API,支持添加、检索和删除存储区策略子资源:

l PUT /object/bucket/{bucketName}/policyl GET /object/bucket/{bucketName}/policyl DELETE /object/bucket/{bucketName}/policy要使用 ECS Management REST API 设置策略,您需要具有 ECS 系统管理员或命名空间管理员角色。

ECS S3 API 提供了以下 API:

l PUT Bucket Policyl GET Bucket Policyl DELETE Bucket Policy

要使用 S3 API 设置策略,您必须是存储区所有者。

S3

创建、分配和管理存储区策略 19

Page 20: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

有关这些 API 的详细信息,请参见 ECS API 参考。

存储区策略方案

通常情况下,存储区所有者具有存储区上的完全控制权限并且可向其他用户授予权限,还可以使用 S3 客户端设置 S3 存储区策略。在 ECS 中,ECS 系统或命名空间管理员还可以使用 ECS 门户的存储区策略编辑器设置存储区策略。

在以下典型情形中,您可以使用存储区策略:

l 向用户授予存储区权限(第 20 页)l 向所有用户授予存储区权限(第 20 页)l 自动将权限分配给创建的对象(第 21 页)

向用户授予存储区权限在您想要为存储区所有者以外的用户授予存储区权限时,您可以指定想要更改权限的资源,将主体属性设置为用户的名称,并指定一个或多个您想要允许的操作。

以下示例显示了向名为 user1 的用户授予权限的策略,以更新和读取名为 mybucket的存储区中的对象。

{ "Version":"2012-10-17", "Id":"S3PolicyId1", "Statement":[ { "Sid":"Grant permission to user1", "Effect":"Allow", "Principal":["user1"], "Action":[ "s3:PutObject","s3:GetObject" ], "Resource":[ "mybucket/*" ] } ]}

您还可以添加条件。例如,从特定的 IP 地址访问存储区时,如果您只希望用户能够读取和写入对象,您可以添加 IpAddress 条件,如下面的策略中所示。

{ "Version":"2012-10-17", "Id":"S3PolicyId1", "Statement":[ { "Sid":"Grant permission ", "Effect":"Allow", "Principal":["user1"], "Action":[ "s3:PutObject","s3:GetObject" ], "Resource":[ "mybucket/*" ] "Condition":{"IpAddress":{"aws:SourceIp":"<Ip address>"} } ]}

向所有用户授予存储区权限在您想要为存储区所有者以外的用户授予存储区权限时,您可以指定想要更改权限的资源,将主体属性设置为任何人 (*),并指定一个或多个您想要允许的操作。

S3

20 Elastic Cloud Storage (ECS) 3.1 数据访问指南

Page 21: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

以下示例显示了向任何人授予权限的策略,以读取名为 mybucket 的存储区中的对象。

{ "Version":"2012-10-17", "Id":"S3PolicyId2", "Statement":[ { "Sid":"statement2", "Effect":"Allow", "Principal":["*"], "Action":[ "s3:GetObject" ], "Resource":[ "mybucket/*" ] } ]}

自动将权限分配给创建的对象您可以使用存储区策略,自动启用对接收的对象数据的访问。在以下示例存储区策略中,user1 和 user2 可以在名为 mybucket 的存储区中创建子资源(即,对象),并且可以设置对象 ACL。由于能够设置 ACL,用户之后可以为其他用户设置权限。如果在同一操作中设置 ACL,可以设置一个条件,以便在创建对象时,必须指定预设的ACL 公开-读取权限。这样可确保任何人均可读取创建的所有对象。

{ "Version":"2012-10-17", "Id":"S3PolicyId3", "Statement":[ { "Sid":"statement3", "Effect":"Allow", "Principal":["user1", "user2"], "Action":[ "s3:PutObject, s3:PutObjectAcl" ], "Resource":[ "mybucket/*" ] "Condition":{"StringEquals":{"s3:x-amz-acl":["public-read"]}} } ]}

支持的存储区策略操作

下表显示了支持的权限关键字以及存储区、对象及其控制的资源上的操作。

表 4 对象操作的权限

权限关键字 支持的 S3 操作

s3:GetObject 适用于启用版本控制的存储区的 新版本

GET Object、HEAD Object

s3:GetObjectVersion GET Object、HEAD Object此权限支持指定版本号的请求

s3:PutObject PUT Object、POST Object、Initiate Multipart Upload、Upload Part、Complete Multipart Upload PUT Object - Copy

s3:GetObjectAcl GET Object ACL

s3:GetObjectVersionAcl GET ACL(针对对象的特定版本)

S3

支持的存储区策略操作 21

Page 22: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

表 4 对象操作的权限 (续)

权限关键字 支持的 S3 操作

s3:PutObjectAcl PUT Object ACL

s3:PutObjectVersionAcl PUT Object(针对对象的特定版本)

s3:DeleteObject DELETE Object

s3:DeleteObjectVersion DELETE Object(针对对象的特定版本)

s3:ListMultipartUploadParts List Parts

s3:AbortMultipartUpload Abort Multipart Upload

表 5 存储区操作的权限

权限关键字 支持的 S3 操作

s3:DeleteBucket DELETE Bucket

s3:ListBucket GET Bucket (List Objects)、HEAD Bucket

s3:ListBucketVersions GET Bucket Object versions

s3:GetLifecycleConfiguration GET Bucket lifecycle

s3:PutLifecycleConfiguration PUT Bucket lifecycle

表 6 存储区子资源操作的权限

权限关键字 支持的 S3 操作

s3:GetBucketAcl GET Bucket acl

s3:PutBucketAcl PUT Bucket acl

s3:GetBucketCORS GET Bucket cors

s3:PutBucketCORS PUT Bucket cors

s3:GetBucketVersioning GET Bucket versioning

s3:PutBucketVersioning PUT Bucket versioning

s3:GetBucketPolicy GET Bucket policy

s3:DeleteBucketPolicy DELETE Bucket policy

s3:PutBucketPolicy PUT Bucket policy

支持的存储区策略条件条件元素用于指定确定策略何时生效的条件。

下表显示了 ECS 支持并且可在条件表达式中使用的条件关键字。

表 7 支持的通用 AWS 条件关键字

关键字名称 描述 适用的运算符

aws:CurrentTime 用于检查日期/时间条件 日期运算符

S3

22 Elastic Cloud Storage (ECS) 3.1 数据访问指南

Page 23: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

表 7 支持的通用 AWS 条件关键字 (续)

关键字名称 描述 适用的运算符

aws:EpochTime 用于检查使用纪元或 UNIX 时间的日期的日期/时间条件(请参阅“日期条件运算符”)。

日期运算符

aws:principalType 用于检查适用于当前请求的主体(用户、帐户、联合用户等)的类型。

字符串运算符

aws:SourceIp 用于检查请求者的 IP 地址。 字符串运算符

aws:UserAgent 用于检查请求者的客户端应用程序。 字符串运算符

aws:username 用于检查请求者的用户名称。 字符串运算符

表 8 支持的对象操作的 S3 特定条件关键字

关键字名称 描述 适用的权限

s3:x-amz-acl 设置当用户上载对象时需要特定访问权限的条件。

s3:PutObject、s3:PutObjectAcl、s3:PutObjectVersionAcl

s3:x-amz-grant-permission(适用于显式权限),权限可以是“read”、“write”、“read-acp”、“write-acp”和“full-control”

存储区所有者可以使用这些关键字添加条件,以要求具有特定权限。

s3:PutObject、s3:PutObjectAcl、s3:PutObjectVersionAcl

s3:x-amz-server-side-encryption

要求用户在请求中指定该标头。

s3:PutObject、s3:PutObjectAcl

s3:VersionId 将用户限制为仅访问特定版本的对象的数据

s3:PutObject、s3:PutObjectAcl、s3:DeleteObjectVersion

表 9 支持的存储区操作的 S3 特定条件关键字

关键字名称 描述 适用的权限

s3:x-amz-acl 设置当用户上载对象时需要特定访问权限的条件

s3:CreateBucket、s3:PutBucketAcl

s3:x-amz-grant-permission(适用于显式权限),权限可以是“read”、“write”、“read-acp”、“write-acp”和“full-control”

存储区所有者可以使用这些关键字添加条件,以要求具有特定权限

s3:CreateBucket、s3:PutBucketAcl

s3:prefix 检索具有特定前缀的对象关键字。

s3:ListBucket、s3:ListBucketVersions

s3:delimiter 要求用户在 Get Bucket (ListObjects) 请求中指定分隔符参数。

s3:ListBucket、s3:ListBucketVersions

s3:max-keys 通过要求用户指定 max-keys参数,限制 ECS 响应 Get

s3:ListBucket、s3:ListBucketVersions

S3

支持的存储区策略条件 23

Page 24: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

表 9 支持的存储区操作的 S3 特定条件关键字 (续)

关键字名称 描述 适用的权限

Bucket (List Objects) 请求所返回的关键字数量。

S3 扩展ECS 支持大量对 S3 API 的扩展。

下表中列出了这些扩展以及支持它们的 API。

l 字节范围扩展(第 24 页)l 保留期(第 28 页)l 启用文件系统(第 29 页)l 元数据搜索(第 29 页)

字节范围扩展

提供了以下字节范围扩展:

l 在对象中更新字节范围(第 24 页)l 覆盖对象的一部分(第 25 页)l 向对象添加数据(第 26 页)l 在一个对象中读取多个字节范围(第 27 页)

版本化对象上的字节范围操作(更新/附加/覆盖)不会创建新版本,但是会更新自身的 新版本。对象的旧版本上的字节范围操作(更新/附加/重写)会更新 新版本。

在对象中更新字节范围您可以使用针对 S3 协议的 ECS 扩展来更新对象中的字节范围。

在许多情况下,更新一个对象的部分内容会非常有用。例如,修改存储在大文件开头的二进制文件标头。在 Amazon 或其他 S3 兼容平台上,必须再次发送完整的文件。

以下示例演示了如何使用字节范围更新。在示例中, object1 具有值 The quickbrown fox jumps over the lazy dog.

GET /bucket1/object1 HTTP/1.1Date:Mon, 17 Jun 2013 20:04:40 -0000x-emc-namespace:emcContent-Type:application/octet-streamAuthorization:AWS wuser1:9qxKiHt2H7upUDPF86dvGp8VdvI=Accept-Encoding:gzip, deflate, compress HTTP/1.1 200 OKDate:Mon, 17 Jun 2013 20:04:40 GMTContent-Type:application/octet-streamLast-Modified:Mon, 17 Jun 2013 20:04:28 GMTETag:6Content-Type:application/json

S3

24 Elastic Cloud Storage (ECS) 3.1 数据访问指南

Page 25: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

Content-Length:43 The quick brown fox jumps over the lazy dog.

要在此对象中更新特定字节范围,对象数据请求中的“Range”标头必须包括要更新对象的开始和结束偏移。格式为:Range:bytes=<startOffset>-<endOffset>。

在下面的示例中,PUT 请求包括“Range”标头,其中值 bytes=10-14 表明字节10、11、12、13、14 将替换为该请求中发送的值。此时,正在发送新值 green。

PUT /bucket1/object1 HTTP/1.1Content-Length:5Range:bytes=10-14ACCEPT:application/json,application/xml,text/html,application/octet-streamDate:Mon, 17 Jun 2013 20:15:16 -0000x-emc-namespace:emcContent-Type:application/octet-streamAuthorization:AWS wuser1:xHJcAYAEQansKLaF+/4PdLBHyaM=Accept-Encoding:gzip, deflate, compress green HTTP/1.1 204 No ContentETag:10x-amz-id-2:object1x-amz-request-id:027f037c-29ea-4670-8670-de82d0e9f52aContent-Length:0Date:Mon, 17 Jun 2013 20:15:16 GMT

再次读取对象时,现在的新值是 The quick green fox jumps over the lazydog.。已经更新了此对象中的特定字节范围,单词 brown 已替换为 green。

GET /bucket1/object1 HTTP/1.1Cookie:JSESSIONID=wdit99359t8rnvipinz4tbtuACCEPT:application/json,application/xml,text/html,application/octet-streamDate:Mon, 17 Jun 2013 20:16:00 -0000x-emc-namespace:emcContent-Type:application/octet-streamAuthorization:AWS wuser1:OGVN4z8NV5vnSAilQTdpv/fcQzU=Accept-Encoding:gzip, deflate, compress HTTP/1.1 200 OKDate:Mon, 17 Jun 2013 20:16:00 GMTContent-Type:application/octet-streamLast-Modified:Mon, 17 Jun 2013 20:15:16 GMTETag:10Content-Type:application/jsonContent-Length:43 The quick green fox jumps over the lazy dog.

覆盖对象的一部分您可以使用针对 S3 协议的 ECS 扩展来覆盖对象的一部分。

要覆盖对象的一部分,请提供要写入的数据以及起始偏移量。将从提供的偏移处开始写入请求中的数据。格式为:Range:<startingOffset>-。

S3

字节范围扩展 25

Page 26: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

例如,要在偏移 10 处开始写入数据 brown cat,您应该发出该 PUT 请求:

PUT /bucket1/object1 HTTP/1.1Content-Length:9Range:bytes=10-ACCEPT:application/json,application/xml,text/html,application/octet-streamDate:Mon, 17 Jun 2013 20:51:41 -0000x-emc-namespace:emcContent-Type:application/octet-streamAuthorization:AWS wuser1:uwPjDAgmazCP5lu77Zvbo+CiT4Q=Accept-Encoding:gzip, deflate, compress brown cat HTTP/1.1 204 No ContentETag:25x-amz-id-2:object1x-amz-request-id:65be45c2-0ee8-448a-a5a0-fff82573aa3bContent-Length:0Date:Mon, 17 Jun 2013 20:51:41 GMT

检索对象时,将在提供的起始偏移处替换部分数据(green fox 将替换为 browncat),并且 后一个值为:The quick brown cat jumps over the lazydog and cat.

GET /bucket1/object1 HTTP/1.1Date:Mon, 17 Jun 2013 20:51:55 -0000x-emc-namespace:emcContent-Type:application/octet-streamAuthorization:AWS wuser1:/UQpdxNqZtyDkzGbK169GzhZmt4=Accept-Encoding:gzip, deflate, compress HTTP/1.1 200 OKDate:Mon, 17 Jun 2013 20:51:55 GMTContent-Type:application/octet-streamLast-Modified:Mon, 17 Jun 2013 20:51:41 GMTETag:25Content-Type:application/jsonContent-Length:51 The quick brown cat jumps over the lazy dog and cat.

向对象添加数据您可以使用针对 S3 协议的 ECS 扩展,将数据附加到对象。

在许多情况下,您需要向对象添加数据,但确定准确的字节偏移并不有效或有作用。针对这种情况,ECS 支持向对象添加数据,而无需指定偏移(在响应中将返回正确的偏移)。例如,为了将行附加到日志文件,在 Amazon 或其他 S3 兼容平台上,您必须再次发送完整日志文件。

可以使用带有特殊值 bytes=-1- 的“Range”标头向对象添加数据。通过这种方式,可以扩展对象,而无需知道确切的对象大小。格式为:Range:bytes=-1-下面的示例请求显示了使用值为 bytes=-1- 的 Range 向现有对象添加数据。在请求中发送了值 and cat。

PUT /bucket1/object1 HTTP/1.1Content-Length:8Range:bytes=-1-ACCEPT:application/json,application/xml,text/html,application/octet-

S3

26 Elastic Cloud Storage (ECS) 3.1 数据访问指南

Page 27: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

streamDate:Mon, 17 Jun 2013 20:46:01 -0000x-emc-namespace:emcContent-Type:application/octet-streamAuthorization:AWS wuser1:/sqOFL65riEBSWLg6t8hL0DFW4c=Accept-Encoding:gzip, deflate, compress and cat HTTP/1.1 204 No ContentETag:24x-amz-id-2:object1x-amz-request-id:087ac237-6ff5-43e3-b587-0c8fe5c08732Content-Length:0Date:Mon, 17 Jun 2013 20:46:01 GMT

检索对象时,and cat 已附加,并且您可以看到完整的值:The quick green foxjumps over the lazy dog and cat.

GET /bucket1/object1 HTTP/1.1ACCEPT:application/json,application/xml,text/html,application/octet-streamDate:Mon, 17 Jun 2013 20:46:56 -0000x-emc-namespace:emcContent-Type:application/octet-streamAuthorization:AWS wuser1:D8FSE8JoLl0MTQcFmd4nG1gMDTg=Accept-Encoding:gzip, deflate, compress HTTP/1.1 200 OKDate:Mon, 17 Jun 2013 20:46:56 GMTContent-Type:application/octet-streamLast-Modified:Mon, 17 Jun 2013 20:46:01 GMTETag:24Content-Type:application/jsonContent-Length:51 The quick green fox jumps over the lazy dog and cat.

在一个对象中读取多个字节范围您可以使用针对 S3 协议的 ECS 扩展来读取对象中的多个字节范围。

在许多情况下,读取一个对象的多个部分会非常有用。例如,获取几个视频部分。在Amazon 或其他 S3 兼容平台上,必须针对每个部分发送不同的请求。

要在名为 object1 的对象中读取两个特定的字节范围,您应该针对Range:bytes==4-8,41-44 发出以下 GET 请求。读取响应为单词 quick 和lazy。

GET /bucket1/object1 HTTP/1.1Date:Mon, 17 Jun 2013 20:51:55 -0000x-emc-namespace:emcRange:bytes==4-8,41-44Content-Type:application/octet-streamAuthorization:AWS wuser1:/UQpdxNqZtyDkzGbK169GzhZmt4=Accept-Encoding:gzip, deflate, compress HTTP/1.1 206 Partial ContentDate:Mon, 17 Jun 2013 20:51:55 GMTContent-Type:multipart/byteranges;boundary=bound04acf7f0ae3cccLast-Modified:Mon, 17 Jun 2013 20:51:41 GMTContent-Length:230

S3

字节范围扩展 27

Page 28: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

--bound04acf7f0ae3cccContent-Type:application/octet-streamContent-Range:bytes 4-8/50quick--bound04acf7f0ae3cccContent-Type:application/octet-streamContent-Range:bytes 41-44/50lazy--bound04acf7f0ae3ccc--

保留期

ECS S3 标头支持保留对象,以防止它们在指定的时间段内被删除或修改。这是 ECS扩展,在标准 S3 API 中不可用。

可以通过以下方式设置保留:

对象上的保留期将保留期与对象一起存储。在对象上使用 x-emc-retention-period 标头设置保留期。

对象上的保留策略可以在对象上设置保留策略,并且可以为命名空间设置与策略关联的期间。这使得能够使用策略将对象组的保留期设置为相同值,并且可以通过更改策略来更改所有对象的保留期。与向对象应用保留期相比,使用策略提供更大灵活性。此外,可以为命名空间设置多个保留策略,以允许不同的对象组具有不同的保留期。在对象上使用 x-emc-retention-policy 标头应用于对象的保留策略和策略保留期必须由 ECS 管理员从 ECS 门户或者使用 ECS Management REST API 进行设置。

存储区上的保留期针对存储区存储的保留期可为所有对象设置保留期,在需要更长保留期的情况下,可使用对象级别保留期或策略特定对象设置。在存储区上使用 x-emc-retention-period 标头设置保留期。

当尝试修改或删除对象时,使用存储区保留期或对象保留期中的较长保留期来确定是否可以执行操作。可直接在对象上或使用对象保留策略来设置对象保留期。

还可以从 ECS Management REST API 或 ECS 门户创建 S3 存储区,并且可以从那里设置存储区的保留期。

生命周期(到期)和保留

ECS 在已启用版本控制的存储区上以及未启用版本控制的存储区上支持 S3LifecycleConfiguration。

在需要修改对象和删除对象但需要确保对象仍保留一段时间的情况下,可以对存储区启用版本控制,并使用生命周期功能确定何时从 ECS 中删除对象的已删除版本 。

版本控制和生命周期是标准 S3 功能。然而,生命周期到期与保留(其是 ECS 扩展)密切相关。如果生命周期在保留期到期之前到期,则在保留期结束之前不会删除对象。

S3

28 Elastic Cloud Storage (ECS) 3.1 数据访问指南

Page 29: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

启用文件系统

S3 存储区也可以启用文件系统 (FS),以便使用 S3 协议写入的文件可以使用文件协议(如 NFS 和 HDFS)进行读取,反之亦然。

启用文件系统访问使用 S3 协议创建存储区时,可以使用 x-emc-file-system-access-enabled 标头启用 FS 访问。当从 ECS 门户(或者使用 ECS Management REST API)创建存储区时,也可以启用文件系统访问。

文件系统支持限制适用的限制如下:

l 当存储区启用了文件系统时,无法启用 S3 生命周期管理。l 当存储区启用了文件系统时,不能使用保留。

文件系统的跨标头支持跨标头支持是指使用不同的 ECS 支持的协议访问使用一个协议写入的对象。使用 S3标头写入的对象可以使用 NFS 和 HDFS 文件系统协议读取和写入。

跨标头支持的一个重要方面是对象和文件权限如何在协议之间转换,以及在文件系统访问的情况下用户和组概念如何在对象和文件协议之间转换。

您可以在以下位置找到有关文件系统的跨标头支持的更多信息:ECS 支持站点上提供的《ECS 管理指南》。

元数据搜索ECS 兼容 S3 的 API 扩展了元数据搜索,允许存储区中的对象根据其元数据进行索引编制,并且允许查询元数据索引以查找对象及其关联的数据。

传统上,可以使用 ECS S3 API 将元数据与对象进行关联,如果您知道感兴趣对象的身份,则可读取其元数据。但是,如果没有 ECS 元数据搜索功能,则需要循环访问存储区中的数据集才能根据对象的元数据查找对象。

元素据可以是《用户元数据》 或《系统元数据》。系统元数据由 ECS 定义并自动写入对象中,用户元数据由客户端根据终端用户要求进行写入。系统元数据和用户元数据均可编制索引,并用作元数据搜索的基础。可以编制索引的元数据值的数量限制为 30且必须在创建存储区时进行定义。

对于小型对象(100 KB 及更低),在增加索引密钥的数量时,数据的接收速率会稍微降低。显示了对较小对象使用元数据索引的影响的性能测试数据可在 ECS 性能白皮书中找到。

当基于已编制索引的元数据查询对象时,将返回与查询匹配的对象及其已编制索引的元数据值。您还可以选择返回所有与返回的对象相关联的系统和/或用户元数据。除了系统元数据以外,对象还具有可作为元数据搜索结果一部分返回的属性。此处列出了可用且可编制索引的系统元数据值,以及可与搜索查询结果一起返回的元数据值(可选)。

以下主题涵盖设置和使用元数据搜索功能所涉及的步骤:

l 向存储区分配元数据索引值(第 30 页)l 使用 S3 协议将元数据分配给对象(第 32 页)l 使用元数据搜索查询(第 33 页)

S3

启用文件系统 29

Page 30: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

向存储区分配元数据索引值您可使用 ECS 门户或 ECS Management REST API 或使用 S3 协议在存储区上设置元数据索引值。索引值必须反映他们正在编制索引的元数据的名称,并可基于系统元数据或用户元数据。

ECS 系统元数据和可选属性(第 38 页)中提供了可用系统元数据的列表。

索引值在创建存储区时进行设置。您可禁用存储区上的索引编制,但无法更改或删除单个索引值。

使用门户设置索引值

借助“Manage” > “Bucket”页面,可以创建存储区并在创建过程中分配索引值。有关详细信息,请参阅 ECS 支持站点上提供的《ECS 管理指南》。

使用 ECS Management REST API 设置索引值

下表中列出了 ECS Management REST API 提供的索引处理方法,而 API 参考中提供了相关链接。

API 路径 描述

GET /object/bucket/searchmetadata 列出可分配到新存储区的所有系统元数据密钥的名称。

POST /object/bucket 分配将为指定存储区编制索引的元数据索引名称。索引名称在方法有效负载中提供。

GET /object/bucket 获取存储区的列表。每个存储区的存储区信息显示元数据搜索详细信息。

GET /object/bucket/{bucketname}/info 获取选定存储区的存储区详细信息。存储区的信息包括元数据搜索详细信息。

DELETE /object/bucket/{bucketname}/searchmetadata

停止使用元数据密钥编制索引。

示例:获取可用元数据名称的列表以下示例将获取可用于索引编制以及可在查询中返回的元数据名称的完整列表。

s3curl.pl --id myuser -- http://{host}:9020/?searchmetadata

查询结果如下所示。

<MetadataSearchList xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> <IndexableKeys> <Key> <Name>LastModified</Name> <Datatype>datetime</Datatype> </Key> <Key> <Name>Owner</Name> <Datatype>string</Datatype> </Key> <Key> <Name>Size</Name> <Datatype>integer</Datatype>

S3

30 Elastic Cloud Storage (ECS) 3.1 数据访问指南

Page 31: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

</Key> <Key> <Name>CreateTime</Name> <Datatype>datetime</Datatype> </Key> <Key> <Name>ObjectName</Name> <Datatype>string</Datatype> </Key> </IndexableKeys> <OptionalAttributes> <Attribute> <Name>ContentType</Name> <Datatype>string</Datatype> </Attribute> <Attribute> <Name>Expiration</Name> <Datatype>datetime</Datatype> </Attribute> <Attribute> <Name>ContentEncoding</Name> <Datatype>string</Datatype> </Attribute> <Attribute> <Name>Expires</Name> <Datatype>datetime</Datatype> </Attribute> <Attribute> <Name>Retention</Name> <Datatype>integer</Datatype> </Attribute> </OptionalAttributes></MetadataSearchList>

示例:获取正用于存储区索引编制的密钥的列表以下示例将获取当前正用于存储区索引编制的元数据密钥的列表。

s3curl.pl --id myuser -- http://{host}:9020/mybucket/?searchmetadata

此示例的结果如下所示。

<MetadataSearchList xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> <MetadataSearchEnabled>true</MetadataSearchEnabled> <IndexableKeys> <Key> <Name>Size</Name> <Datatype>integer</Datatype> </Key> <Key> <Name>x-amz-meta-DAT</Name> <Datatype>datetime</Datatype> </Key> </IndexableKeys></MetadataSearchList>

使用 S3 API 设置值

下表中列出了 S3 API 提供的索引处理方法,而 API 参考中提供了相关链接。

S3

向存储区分配元数据索引值 31

Page 32: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

API 路径 描述

GET /?searchmetadata 列出可用于在新存储区上编制索引的所有系统元数据的名称。

PUT /{bucket} -H x-emc-metadata-search:{name[;datatype],...}

使用标头中指明的搜索元数据密钥来创建存储区。

数据类型必须与用户元数据密钥相关联,但不是系统元数据密钥所必需的。

GET /{bucket}/?searchmetadata 获取当前正用于存储区索引编制的元数据密钥的列表。

示例下面的示例显示如何使用元数据索引为三个系统元数据密钥和两个用户元数据密钥创建存储区。

s3curl.pl --id myuser --createbucket -- http://{host}:9020/mybucket -H "x-emc-metadata-search:Size,CreateTime,LastModified,x-amz-meta-STR;String,x-amz-meta-INT;Integer"

当添加包含 x-amz-meta- 的新对象时,包含特殊字符的值不必进行 URL 编码。

在元数据搜索中结合使用加密

在存储区上使用加密时,编制索引的对象元数据密钥采用非加密形式进行存储,因此始终可以在加密的存储区上执行元数据搜索。

在使用系统提供的密钥执行加密时,查询返回的对象元数据将被解密并以文本形式显示。但是,如果使用用户提供的加密密钥对数据进行加密,那么在元数据搜索查询返回时,未编制索引的元数据仍然会被加密,因为用户加密的密钥无法通过查询提供。

使用 S3 协议将元数据分配给对象终端用户可使用“x-amz-meta-”标头将用户元数据分配给对象。分配的值可以是任何文本字符串,并且区分大小写。

在编制元数据索引以便能够将其用作对象搜索的基础(元数据搜索功能)时,可向数据分配数据类型。将元数据写入对象时,客户端应使用适当格式写入数据,以便能够在搜索中正确使用数据。

数据类型包括:

字符串如果搜索索引词标记为文本,则元数据字符串将在所有搜索比较中被视为字符串。

整数如果搜索索引词标记为整数,则元数据字符串将在搜索比较中转换为整数。

S3

32 Elastic Cloud Storage (ECS) 3.1 数据访问指南

Page 33: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

小数如果搜索索引词标记为小数,则元数据字符串将转换为小数值,以便“.”字符被视为小数点。

日期和时间如果搜索索引词标记为日期时间,则元数据字符串将被视为日期时间,且预期格式为:yyyy-MM-ddTHH:mm:ssZ。指定元数据时,如果希望该字符串被视为日期时间,则需要使用格式 yyyy-MM-ddTHH:mm:ssZ。

示例下面的示例使用 S3 API 来上载对象和对象上的两个用户元数据值。

s3curl.pl --id myuser --put myfile -- http://{host}:9020/mybucket/file4 -i -H x-amz-meta-STR:String4 -H x-amz-meta-INT:407

使用元数据搜索查询元数据搜索功能提供了丰富的查询语言,能够搜索具有已编制索引元数据的对象。

下表显示了语法。

API 语法 响应正文

GET /{bucket}/?query={expression}&attributes={fieldname,…}&sorted={selector}&include_older_version={true|false}&max-keys=(num_keys)&marker=(marker value)

<BucketQueryResult xmlns:ns2="http://s3.amazonaws.com/doc/2006-03-01/"> <Name>mybucket</Name> <Marker/> <NextMarker>NO MORE PAGES</NextMarker> <MaxKeys>0</MaxKeys> <ObjectMatches> <object> <objectName>file4</objectName> <objectId>09998027b1b7fbb21f50e13fabb481a237ba2f60f352d437c8da3c7c1c8d7589</objectId> <versionId>0</versionId> <queryMds> <type>SYSMD</type> <mdMap> <entry> <key>createtime</key> <value>1449081778025</value> </entry> <entry> <key>size</key> <value>1024</value> </entry> <entry> <key>mtime</key> <value>1449081778025</value> </entry> </mdMap> </queryMds> <queryMds> <type>USERMD</type> <mdMap> <entry> <key>x-amz-meta-INT</key> <value>407</value> </entry> <entry> <key>x-amz-meta-STR</key> <value>String4</value> </entry> </mdMap>

S3

使用元数据搜索查询 33

Page 34: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

API 语法 响应正文

</queryMds> <indexKey/> </object> <object ... </object> </ObjectMatches></BucketQueryResult>

下面列出了表达式关键字及其含义:

表达式形式如下的表达式:

[(]{condition1}[%20[and/or]%20{condition2}][)][%20[and/or]%20…]

其中“condition”是元数据关键字名称筛选器,形式如下:

{selector} {operator}{argument},

例如:

LastModified > 2015-09-02T11:22:00Z

选择器与存储区关联的可搜索关键字名称。

运算符运算符。其中一个:= =、>、<、<=、>=

参数用于测试选择器的值。

attributes=[fieldname,...]

指定应在报告中包含的任何可选对象属性。报告中将包括的属性值,在报告中,该值将显示在对象上。可选属性值包括:

l ContentEncoding

l ContentType

l 保留期

l Expiration

l Expires

此外,可能会返回与搜索查询返回的对象相关联的未编制索引的元数据。如下所示:

全部列出与返回的对象关联的系统和用户元数据。

S3

34 Elastic Cloud Storage (ECS) 3.1 数据访问指南

Page 35: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

ALL_SMD

列出与返回的对象关联的系统元数据。

ALL_UMD

列出与返回的对象关联的用户元数据。

sorted=[selector]

指定与存储区相关联的一个可搜索关键字名称。关键字名称必须是表达式中显示的关键字。如果没有 &sorted=keyname,输出内容将根据查询表达式中显示的第一个关键字名称进行排序。

如果在表达式中使用“or”运算符,则排序顺序并不确定。

include-older-versions=[true|false]

在存储区上启用 S3 版本控制时,将此设置为 true 将返回与表达式匹配的当前及更早版本的对象。默认值为“false”。

max-keys

应返回的与查询匹配的对象的 大数目。如果对象数超过 max-keys,则将返回一个可用于检索更多匹配项的标记。

标记上一个查询返回的标记,用于指示从中返回查询匹配项的点。

日期时间查询

用户元数据中的日期时间值以 ISO-8601 格式“yyyy-MM-dd'T'HH:mm:ssZ”格式进行指定,并由 ECS 采用该格式进行保留。元数据查询也使用此格式。然而,ECS 会将系统元数据的日期时间值保留为《新纪元时间》(从 1970 年开始的毫秒数)。

当查询返回结果时,将返回由 ECS 保留的日期时间格式。下面显示这两种格式的示例。

用户元数据上载标头示例:

-H x-amz-meta-Foo:2015-11-30T12:00:00Z

用户和系统查询表达式格式:

?query=CreateTime>2015-01-01T00:00:00Z and x-amz-meta-Foo==2015-11-30T12:00:00Z

查询结果片段 — 系统元数据

<key>createtime</key> <value>1449081777620</value>

S3

使用元数据搜索查询 35

Page 36: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

查询结果片段 — 用户元数据

<key>x-amz-meta-Foo</key> <value>2015-11-30T12:00:00Z</value>

使用标记和 max-keys 将结果分页

您可以使用 max-keys 查询参数指定查询将返回的 大对象数。

以下示例将对象 大数量指定为 3。

?query=CreateTime>2015-01-01T00:00:00Z and x-amz-meta-Foo==2015-11-30T12:00:00Z&max-keys=3

如果查询匹配的对象数超过指定的 max-keys,则将返回一个标记,可用于返回与查询匹配但未返回的下一页对象。

以下查询指定已从上一个查询检索到的标记:

?query=CreateTime>2015-01-01T00:00:00Z and x-amz-meta-Foo==2015-11-30T12:00:00Z&max-keys=3&marker=rO0ABXNyAD...

当返回的对象是对象的 后一页时,将在响应正文的 NextMarker 中返回 NO MOREPAGES(无更多页面)。

<NextMarker>NO MORE PAGES</NextMarker>

在查询中使用特殊字符

需要使用 url 编码来确保 ECS REST 服务正确接收特殊字符,并且可能需要引用,以确保当 ECS 解析查询时不会误解符号。例如:

l 当查询 x-amz-meta 值时,特殊字符必须进行 url 编码。例如:当使用“%”(ASCII 25 十六进制)或“/”( ASCII 2F) 时,它们必须分别编码为 %25 和 2F。

l 当查询具有 SQL 保留字符的 x-amz-meta 值时,必须转义保留字符。这是为了确保 ECS 使用的 SQL 分析器不会将它们视为运算符。例如:'ab <cd'(即,确保一对引号被传递到服务中,以便 ECS 使用的 SQL 分析器不会将它们视为运算符)。SQL 保留字符包括比较运算符(=、<、>、+、-、 !、~)和语法分隔符(逗号、分号)。可能采用不同形式的引号,具体取决于正在使用的客户端。Unix 命令行工具(如S3curl.pl)的一个示例是:

?query="'ab+cd<ed;ef'"

在这种情况下,搜索值是单引号括起来,括在双引号内。

元数据搜索示例

下面的示例使用 S3 API 来搜索存储区,以匹配特定对象大小和用户元数据值。

S3

36 Elastic Cloud Storage (ECS) 3.1 数据访问指南

Page 37: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

某些 REST 客户端可能需要您使用 url 代码 %20 对“空格”进行编码

s3curl.pl --id myuser -- "http://{host}:9020.mybucket?query=Size>1000%20and%20x-amz-meta-STR>=String4

结果显示与搜索匹配的三个对象。

<BucketQueryResult xmlns:ns2="http://s3.amazonaws.com/doc/2006-03-01/"> <Name>mybucket</Name> <Marker/> <NextMarker>NO MORE PAGES</NextMarker> <MaxKeys>0</MaxKeys> <ObjectMatches> <object> <objectName>file4</objectName> <objectId>09998027b1b7fbb21f50e13fabb481a237ba2f60f352d437c8da3c7c1c8d7589</objectId> <versionId>0</versionId> <queryMds> <type>SYSMD</type> <mdMap> <entry> <key>createtime</key> <value>1449081778025</value> </entry> <entry> <key>size</key> <value>1024</value> </entry> <entry> <key>mtime</key> <value>1449081778025</value> </entry> </mdMap> </queryMds> <queryMds> <type>USERMD</type> <mdMap> <entry> <key>x-amz-meta-INT</key> <value>407</value> </entry> <entry> <key>x-amz-meta-STR</key> <value>String4</value> </entry> </mdMap> </queryMds> <indexKey/> </object> <object> <objectName>file5</objectName> <objectId>1ad87d86ef558ca0620a26855662da1030f7d9ff1d4bbc7c2ffdfe29943b9150</objectId> <queryMds> <type>SYSMD</type> <mdMap> <entry> <key>createtime</key>

S3

使用元数据搜索查询 37

Page 38: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

<value>1449081778396</value> </entry> <entry> <key>size</key> <value>1024</value> </entry> <entry> <key>mtime</key> <value>1449081778396</value> </entry> </mdMap> </queryMds> <queryMds> <type>USERMD</type> <mdMap> <entry> <key>x-amz-meta-INT</key> <value>507</value> </entry> <entry> <key>x-amz-meta-STR</key> <value>Sring5</value> </entry> </mdMap> </queryMds> <indexKey/> </object> </ObjectMatches></BucketQueryResult>

从 ECS Java SDK 使用元数据搜索

在 3.0 SDK 中,如果您连接到 3.0 之前的 ECS,则可以选择从签名中排除“search”和“searchmetadata”参数。这些参数不是 ECS 2.x 中签名计算的一部分,但现在是增强安全性计算的一部分。

提供以下兼容性表是为了显示元数据搜索功能的 SDK 支持:

ECS 版本

2.x 3.x

SDK 2.x 是 否

SDK 3.x 是 是

ECS 系统元数据和可选属性系统元数据与对象存储区域中存储的每个对象自动关联。某些系统元数据会始终填充并可用作索引密钥,而其他元数据则不会始终填充,但如果存在,便可与元数据搜索查询结果一起返回。

系统元数据下表中列出的系统元数据可用作元数据搜索索引的密钥。

名称(别名) 类型 描述

ObjectName 字符串 对象名称。

所有者 字符串 对象所有者的身份。

大小 integer 对象大小。

S3

38 Elastic Cloud Storage (ECS) 3.1 数据访问指南

Page 39: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

名称(别名) 类型 描述

CreateTime datetime 创建对象的时间。

LastModified datetime 上次修改对象的时间和日期。

修改由 ECS S3 字节范围内的更新扩展而非纯 S3API 提供支持。

可选的元数据属性可能会也可能不会为某个对象填充可选的系统元数据属性,但可以选择性地与搜索查询结果一起返回这些属性。下表列出了可选的系统元数据属性:

名称(别名) 类型

ContentType 字符串

终止 datetime

ContentEncoding 字符串

到期日期 datetime

保留期 integer

S3 和 Swift 互操作性S3 和 Swift 协议可以进行互操作,以便 S3 应用程序可以访问 Swift 存储区中的对象,Swift 应用程序可以访问 S3 存储区中的对象。

考虑是否可使用 Swift 标头来访问使用 S3 标头创建的对象(或是反过来)时,应首先考虑用户是否可以访问存储区(在 Swift 中称为容器)。基于创建存储区的 ECS 标头为存储区分配存储区类型(例如,S3 和 Swift),因此如果您想要确保应用程序可以同时访问 Swift 和 S3 存储区,则需要确保对象用户具有此类存储区的相应权限。由于为 Swift 和 S3 存储区确定权限的方式不同,因此这需要经过一番思考。

S3 和 Swift 互操作性与存储区策略使用不兼容。存储区策略仅适用于使用 S3 标头的存储区访问并且当使用 Swift API 访问存储区时不会强制实施。

在 ECS 中,可以为相同的对象用户名称同时指定 S3 和 Swift 凭据。因此,就 ECS 而言,名为 john 并且以 Swift 用户身份进行身份验证的用户之后可以访问 S3 中允许john 访问的任何资源。

对资源的访问由存储区所有者确定,或通过在存储区上使用 ACL 分配权限来进行确定。例如,在存储区是由 S3 用户创建的情况下,该存储区将归 S3 用户名所有,并且该用户将具有该存储区的完全控制权限,而使用相同名称的 Swift 用户将同样对该存储区具有完全控制权限。

如果您希望所有者以外的用户能够访问存储区,可以使用 ACL 分配权限。可以使用组ACL(在 ECS 中,这些是自定义组 ACL)授予 Swift 容器的访问权限,并且在检查组ACL 权限之前,Swift 标头会针对组成员身份执行检查。Swift 容器可以被认为是已隐式添加 admin 组,正因如此,属于 admin 组的任何用户(admin 用户)可以访问任何其他 admin 用户的容器。仅 admin 用户拥有创建、删除和列出所有容器的权限。admin 用户的权限仅适用于用户所属的命名空间。S3 存储区的访问权限取决于用户权

S3

S3 和 Swift 互操作性 39

Page 40: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

限(用户 ACL),而非组权限。要确定存储区的访问权限,S3 标头将检查用户是否拥有对存储区的 ACL 权限。下图体现了这一现象。

S3 HEAD SWIFT HEAD

S3 APPLICATION

S3 BUCKET ACCESS SWIFT BUCKET ACCESS

GROUP ACLUSER ACL

SWIFT APPLICATION

ECS OBJECT USER

S3 KEY

SWIFT PASSWORDSWIFT GROUP

Swift user accessto Swift containerS3 user access

to S3 bucket

check Swift group ACLpermissions

Swift user access to S3 bucket

S3 user access to Swift container

check S3user ACL

CROSSHEAD

因为 Swift 使用组来支持访问资源,为了让 S3 用户能够访问 Swift 容器,还必须将 S3用户分配到一个 Swift 组(admin 组或者已经在容器上分配自定义组 ACL 的组)。

综上所述,应满足以下条件之一才能访问 S3 存储区:

l Swift 或 S3 用户必须是存储区所有者。l Swift 或 S3 用户必须已添加到存储区的用户 ACL。

应满足以下条件之一才能对 Swift 容器进行访问:

l S3 或 Swift 用户必须是容器所有者。l S3 用户还必须是 Swift 用户,并且必须已添加到 Swift 组。Swift 组必须添加为自

定义组,除非用户是 Swift admin 组的成员(将自动添加到自定义组)。

l Swift 用户必须已添加到容器的组 ACL,或用户必须在 Swift admin 组中(将自动添加到自定义组)。

通过 S3 API 读取 Swift DLO 对象将不起作用,因为请求将遵循读取的通用代码路径,而不会确认是否存在能够从其单独的路径整合对象的 X-Object-Manifest 元数据密钥。

S3

40 Elastic Cloud Storage (ECS) 3.1 数据访问指南

Page 41: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

对于 MPU 上载,Swift list parts 操作将会失败,这是因为它不能理解 '?uploadId=<uploadId>' sub-resource。

创建和管理密钥ECS 对象服务的用户需要密钥才能利用服务进行身份验证。

可通过以下方式创建密钥并将其提供给对象用户:

l 管理员创建密钥并分发给对象用户(为对象用户创建密钥(第 41 页))。l 域用户通过使用 ECS 管理 REST API 提供的自助服务 API 创建新密钥(创建 S3 密

钥:自助服务(第 42 页)),从而创建对象用户帐户。

一个用户可以具有 2 个密钥。更改(有时称为“转存”)密钥时,可以为旧密钥设置以分钟为单位的到期时间。在到期间隔中,对于请求会接受这两个密钥。这样可提供一段宽限期,在此期间应用程序可以更新为使用新密钥。

为对象用户创建密钥ECS 管理用户可以为对象用户创建密钥。

l 从 ECS 门户生成密钥(第 41 页)l 使用 ECS 管理 REST API 创建 S3 密钥(第 41 页)

有关 ECS 用户的详细信息,请参阅 ECS 支持站点上提供的《ECS 管理指南》。

从 ECS 门户生成密钥您可以在 ECS 门户上生成密钥。

准备工作

l 您必须是 ECS 系统管理员或命名空间管理员。

如果您是系统管理员,则可为属于任何命名空间的对象用户创建密钥。如果您是命名空间管理员,则可为属于您的命名空间的对象用户创建密钥。

过程

1. 在 ECS 门户中,选择“Manage” > “Users”页面。

2. 在“Object Users”表中,选择“New Object User”或者为您希望为其分配密钥的现有用户选择“Edit”。

3. 对于 S3,请选择“Generate & Add Password”。

要更改用户的密钥,您可以生成第二个密钥,并指定第一个密钥的到期时间。

4. 拷贝生成的密钥拷贝,并通过电子邮件将其发送给对象用户。

使用 ECS 管理 REST API 创建 S3 密钥ECS 管理 REST API 支持管理用户为 S3 对象用户创建密钥。

API 如下:API 路径 描述

/object/user-secret-keys/{uid} 支持将密钥分配给对象用户以及管理密钥的API。

S3

创建和管理密钥 41

Page 42: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

API 路径 描述

命名空间管理员可以为其命名空间中的用户创建密钥。系统管理员可以向任何命名空间中的用户分配密钥。

要更改密钥,可以分配第二个密钥,并且可以指定第一个密钥的到期时间。

有关 API 调用的详细信息,请参见 ECS API 参考。

创建 S3 密钥:自助服务ECS 管理 REST API 提供的功能允许经过认证的域用户请求密钥,以使其能够访问对象存储区域。

如果您希望创建自定义客户端来执行某些 ECS 管理操作,可使用 ECS API 参考。为使操作简单起见,域用户可使用 curl 或基于浏览器的 HTTP 客户端来执行创建密钥所需的 API。

当用户运行 object/secret-keys API 时,ECS 会自动创建对象用户并分配密钥。

API 路径 描述

/object/secret-keys 支持 S3 客户端用户创建新密钥的 API;使用这些新密钥可以访问用户的命名空间中的对象和存储区。

这也称作自助服务 API。

/object/secret-keys 的有效负载可以包括可选的现有密钥到期时间。

<secret_key_create_param> <existing_key_expiry_time_mins></existing_key_expiry_time_mins> </secret_key_create_param>

如果您是首次创建密钥,则可省略 existing_key_expiry_time_mins 参数,并且调用将是:

POST object/secret-keys

Request body <?xml version="1.0" encoding="UTF-8"?> <secret_key_create_param/>

Response <user_secret_key> <secret_key>...</secret_key> <key_timestamp>...</key_timestamp> <link rel="..." href="..." /> </user_secret_key>

使用自助服务密钥此处提供的示例将帮助您使用 ECS Management REST API 创建、读取和管理密钥。

要使用密钥执行操作,您必须首先通过 Management API 进行身份验证。所提供的示例使用的是 curl 工具。

l 以域用户身份登录(第 43 页)

S3

42 Elastic Cloud Storage (ECS) 3.1 数据访问指南

Page 43: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

l 生成第一个密钥(第 43 页)l 生成第二个密钥(第 43 页)l 检查密钥(第 44 页)l 删除所有密钥(第 44 页) .

以域用户身份登录您可以以域用户身份登录,然后获取可用于认证后续请求的身份认证标记。

curl -ik -u [email protected]:<Password> https://10.241.48.31:4443/loginHTTP/1.1 200 OKDate:Mon, 27 Apr 2015 17:29:38 GMTContent-Type:application/xmlContent-Length:107Connection:keep-aliveX-SDS-AUTH-TOKEN:BAAcaVAzNU16eVcwM09rOWd2Y1ZoUFZ4QmRTK2JVPQMAQQIADTE0MzAwNzQ4ODA1NTQDAC51cm46VG9rZW46YWJmODA1NTEtYmFkNC00ZDA2LWFmMmMtMTQ1YzRjOTdlNGQ0AgAC0A8=

<?xml version="1.0" encoding="UTF-8" standalone="yes"?><loggedIn><user>[email protected]</user></loggedIn>

生成第一个密钥您可以生成一个密钥。

curl -ks -H "X-SDS-AUTH-TOKEN:BAAcaVAzNU16eVcwM09rOWd2Y1ZoUFZ4QmRTK2JVPQMAQQIADTE0MzAwNzQ4ODA1NTQDAC51cm46VG9rZW46YWJmODA1NTEtYmFkNC00ZDA2LWFmMmMtMTQ1YzRjOTdlNGQ0AgAC0A8=" -H "Content-Type:application/json" -X POST -d "{}" https://10.241.48.31:4443/object/secret-keys | xmllint --format -

<?xml version="1.0" encoding="UTF-8" standalone="yes"?><user_secret_key> <link rel="self" href="/object/user-secret-keys/[email protected]"/> <secret_key>7hXZ9/EHTVvmFuYly/z3gHpihXtEUX/VZxdxDDBd</secret_key> <key_expiry_timestamp/> <key_timestamp>2015-04-27 17:39:13.813</key_timestamp></user_secret_key>

生成第二个密钥您可以再生成一个密钥,并设置第一个密钥的到期信息。

curl -ks -H "X-SDS-AUTH-TOKEN:BAAcaVAzNU16eVcwM09rOWd2Y1ZoUFZ4QmRTK2JVPQMAQQIADTE0MzAwNzQ4ODA1NTQDAC51cm46VG9rZW46YWJmODA1NTEtYmFkNC00ZDA2LWFmMmMtMTQ1YzRjOTdlNGQ0AgAC0A8=" -H "Content-Type:application/json" -X POST -d "{\"existing_key_expiry_time_mins\":\"10\"}" https://10.241.48.31:4443/object/secret-keys | xmllint --format -

<?xml version="1.0" encoding="UTF-8" standalone="yes"?><user_secret_key> <link rel="self" href="/object/user-secret-keys/[email protected]"/> <secret_key>l3fPCuFCG/bxoOXCPZoYuPwhXrSTwU0f1kFDaRUr</secret_key>

S3

创建 S3 密钥:自助服务 43

Page 44: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

<key_expiry_timestamp/> <key_timestamp>2015-04-27 17:40:12.506</key_timestamp></user_secret_key>

检查密钥您可以检查您已经分配的密钥。在本例中有两个密钥,其中第一个密钥有到期日期/时间。

curl -ks -H "X-SDS-AUTH-TOKEN:BAAcaVAzNU16eVcwM09rOWd2Y1ZoUFZ4QmRTK2JVPQMAQQIADTE0MzAwNzQ4ODA1NTQDAC51cm46VG9rZW46YWJmODA1NTEtYmFkNC00ZDA2LWFmMmMtMTQ1YzRjOTdlNGQ0AgAC0A8=" https://10.241.48.31:4443/object/secret-keys | xmllint --format -<?xml version="1.0" encoding="UTF-8" standalone="yes"?><user_secret_keys> <secret_key_1>7hXZ9/EHTVvmFuYly/z3gHpihXtEUX/VZxdxDDBd</secret_key_1> <secret_key_2>l3fPCuFCG/bxoOXCPZoYuPwhXrSTwU0f1kFDaRUr</secret_key_2> <key_expiry_timestamp_1>2015-04-27 17:50:12.369</key_expiry_timestamp_1> <key_expiry_timestamp_2/> <key_timestamp_1>2015-04-27 17:39:13.813</key_timestamp_1> <key_timestamp_2>2015-04-27 17:40:12.506</key_timestamp_2> <link rel="self" href="/object/secret-keys"/></user_secret_keys>

删除所有密钥如果您需要删除您的密钥,然后再重新生成它们,您可以使用以下操作。

curl -ks -H "X-SDS-AUTH-TOKEN:BAAcaVAzNU16eVcwM09rOWd2Y1ZoUFZ4QmRTK2JVPQMAQQIADTE0MzAwNzQ4ODA1NTQDAC51cm46VG9rZW46YWJmODA1NTEtYmFkNC00ZDA2LWFmMmMtMTQ1YzRjOTdlNGQ0AgAC0A8=" -H "Content-Type:application/json" -X POST -d "{}" https://10.241.48.31:4443/object/secret-keys/deactivate

通过 S3 服务进行身份验证ECS S3 服务允许使用 Signature V2 和 Signature V4 进行身份验证。该主题明确了身份认证流程中任何特定于 ECS 的方面。

Amazon S3 使用必须在所有请求中提供的授权标头来确认用户并提供请求签名。授权标头的格式在 Signature V2 和 Signature V4 身份验证之间不同。

若要创建授权标头,您需要 AWS 访问密钥 ID 和密码访问密钥。在 ECS 中,AWS 访问密钥 ID 映射到 ECS 用户 ID (UID)。AWS 访问密钥 ID 具有 20 个字符(对于一些 S3客户端,例如 S3 浏览器,请检查这一点),但是 ECS 数据服务不具有该限制。

引入了使用 Signature V2 和 Signature V4 进行身份验证:

l 使用 Signature V2 进行身份验证l 使用 Signature V4 进行身份验证

以下注意事项适用:

l 在 ECS 对象数据服务中,可以使用 2 个密钥配置 UID(通过 ECS API 或 ECSUI)。ECS 数据服务将尝试使用第一个密钥,并且如果计算的签名不匹配,则将尝试使用第二个密钥。如果第二个密钥失败,将拒绝请求。当用户添加或更改密钥

S3

44 Elastic Cloud Storage (ECS) 3.1 数据访问指南

Page 45: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

时,他们应该等待 2 分钟,以便使用新密钥更新所有数据服务节点,之后再使用新密钥。

l 在 ECS 数据服务中,在计算 HMAC 签名时还会考虑命名空间。

使用 Signature V2 进行身份验证

使用 Signature V2 时的授权标头如下所示:

Authorization:AWS <AWSAccessKeyId>:<Signature>

例如:

GET /photos/puppy.jpg?AWSAccessKeyId=user11&Expires=1141889120&Signature=vjbyPxybdZaNmGa%2ByT272YEAiv4%3D HTTP/1.1Host:myco.s3.amazonaws.comDate:Mon, 26 Mar 2007 19:37:58 +0000

以下位置介绍了使用 Signature V2 的身份验证:

l http://docs.aws.amazon.com/AmazonS3/latest/dev/RESTAuthentication.html

使用 Signature V4 进行身份验证

使用 Signature V4 时的授权标头如下所示:

Authorization:AWS4-HMAC-SHA256 Credential=user11/20130524/us/s3/aws4_request, SignedHeaders=host;range;x-amz-date,Signature=fe5f80f77d5fa3beca038a248ff027d0445342fe2855ddc963176630326f1024

凭据组件包含凭据范围后跟您的访问密钥 ID。凭据范围包含日期/地区/服务名称/终止字符串。对于 ECS,服务名称始终是 s3,并且“地区”可以是任意字符串。当计算签名时,ECS 将使用客户端传递的地区字符串。

以下位置介绍了使用 Signature V4 的身份验证:

l http://docs.aws.amazon.com/AmazonS3/latest/API/sig-v4-authenticating-requests.html 和

l http://docs.aws.amazon.com/AmazonS3/latest/API/sig-v4-header-based-auth.html

下面提供了使用 Signature V4 的 PUT 存储区请求的示例:

PUT /bucket_demo HTTP/1.1x-amz-date:20160726T033659ZAuthorization:AWS4-HMAC-SHA256 Credential=user11/20160726/us/s3/aws4_request,SignedHeaders=host;x-amz-date;x-emc-namespace,Signature=e75a150daa28a2b2f7ca24f6fd0e161cb58648a25121d3108f0af5c9451b09cex-emc-namespace:ns1x-emc-rest-client:TRUEx-amz-content-sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855Content-Length:0Host:10.247.195.130:9021

S3

通过 S3 服务进行身份验证 45

Page 46: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

Connection:Keep-AliveUser-Agent:Apache-HttpClient/4.2.1 (java 1.5)

响应:

HTTP/1.1 200 OKDate:Tue, 26 Jul 2016 03:37:00 GMTServer:ViPR/1.0x-amz-request-id:0af7c382:156123ab861:4192:896x-amz-id-2:3e2b2280876d444d6c7215091692fb43b87d6ad95b970f48911d635729a8f7ffLocation:/bucket_demo_2016072603365969263Content-Length:0

在 ECS 中使用 s3curl需要具有 s3curl 的修改版本,以便与 ECS 配合使用。

当使用 ECS 自定义标头 (x-emc) 时,授权标头的签名元素必须构建为包括自定义标头。此外,当连接到 ECS 3.0 及更高版本时,“search”和“searchmetadata”参数属于签名计算的一部分。

您可以从 EMCECS Git 存储库中获得为了处理这些情况而经过修改的 s3curl 的 ECS 特定版本。

使用 SDK 访问 S3 服务当开发与 ECS S3 服务进行通信的应用程序时,可以使用一些支持开发活动的 SDK。

ECS 社区提供了有关可用的各种客户端的信息并提供了使用指南:ECS 社区:开发人员资源。

下面的主题介绍了如何使用 Amazon S3 SDK 和 ECS Java SDK。

l 使用 Java Amazon SDK(第 46 页)l 适用于 ECS 的 Java SDK 客户端(第 48 页)

如果您想要利用 ECS API 扩展(请参见 S3 扩展(第 24 页)),在 ECS Java SDK 中提供了对这些扩展的支持。如果您不需要针对 ECS 扩展的支持,或者您具有正在使用它的应用程序,则可以使用 Amazon Java SDK。

从 ECS Java SDK 使用元数据搜索 (第 38 页) 中介绍了 ECS Java SDK 与元数据搜索扩展的兼容性。

使用 Java Amazon SDK您可以使用 Java S3 SDK 访问 ECS 对象存储。

默认情况下,直接针对 amazon.com 对 AmazonS3Client 客户端对象进行编码以进行使用。本部分介绍了如何针对 ECS 设置要使用的 AmazonS3Client。

S3

46 Elastic Cloud Storage (ECS) 3.1 数据访问指南

Page 47: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

为了创建 AmazonS3Client 对象的实例,您需要向其传递凭据。通过创建AWSCredentials 对象并向其传递 AWS 访问密钥(您的 ECS 用户名)以及您为 ECS生成的密钥来实现该操作。

以下代码片段说明了如何进行设置。

AmazonS3Client client = new AmazonS3Client(new BasicAWSCredentials(uid, secret));

默认情况下,Amazon 客户端将尝试联系 Amazon WebServices。要覆盖此行为并联系ECS,您需要设置特定的端点。

您可以使用 setEndpoint 方法设置端点。在端点上指定的协议指示了应该是将客户端定向到 HTTP 端口 (9020),还是 HTTPS 端口 (9021)。

如果您计划使用 HTTPS 端口,那么应用程序的 JDK 必须设置为成功验证 ECS 证书;否则客户端会显示 SSL 验证错误,而且无法连接。

在下面的片段中,正在使用客户端通过 HTTP 来访问 ECS:

AmazonS3Client client = new AmazonS3Client(new BasicAWSCredentials(uid, secret));client.setEndpoint("http://ecs1.emc.com:9020");

当使用路径样式寻址 (ecs1.emc.com/mybucket) 时,您需要设置“setPathStyleAccess”选项,如下所示:

S3ClientOptions options = new S3ClientOptions();options.setPathStyleAccess(true);

AmazonS3Client client = new AmazonS3Client(new BasicAWSCredentials(uid, secret));client.setEndpoint("http://ecs1.emc.com:9020");client.setS3ClientOptions(options);

下面的代码显示了如何在存储区中列出对象。

ObjectListing objects = client.listObjects("mybucket");for (S3ObjectSummary summary :objects.getObjectSummaries()) { System.out.println(summary.getKey()+ " "+summary.getOwner());}

CreateBucket 操作不同于指定一个区域所应该执行的其他操作。对于 S3,这是指应该在其中创建存储区的数据中心。但是,ECS 不支持区域。因此,在调用 CreateBucket操作时,我们将指定标准区域,以阻止 AWS 客户端从 Amazon CloudFront 下载Amazon 区域配置文件。

client.createBucket("mybucket", "Standard");

下面提供了与 ECS S3 数据服务进行通信,创建存储区,然后操作对象的完整示例:

public class Test { public static String uid = "root";

S3

使用 Java Amazon SDK 47

Page 48: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

public static String secret = "KHBkaH0Xd7YKF43ZPFbWMBT9OP0vIcFAMkD/9dwj"; public static String viprDataNode = "http://ecs.yourco.com:9020";

public static String bucketName = "myBucket"; public static File objectFile = new File("/photos/cat1.jpg");

public static void main(String[] args) throws Exception {

AmazonS3Client client = new AmazonS3Client(new BasicAWSCredentials(uid, secret));

S3ClientOptions options = new S3ClientOptions(); options.setPathStyleAccess(true);

AmazonS3Client client = new AmazonS3Client(credentials); client.setEndpoint(viprDataNode); client.setS3ClientOptions(options);

client.createBucket(bucketName, "Standard"); listObjects(client);

client.putObject(bucketName, objectFile.getName(), objectFile); listObjects(client);

client.copyObject(bucketName,objectFile.getName(),bucketName, "copy-" + objectFile.getName()); listObjects(client); }

public static void listObjects(AmazonS3Client client) { ObjectListing objects = client.listObjects(bucketName); for (S3ObjectSummary summary :objects.getObjectSummaries()) { System.out.println(summary.getKey()+ " "+summary.getOwner()); } }}

适用于 ECS 的 Java SDK 客户端ECS Java SDK 基于 Amazon S3 Java SDK 构建而成,并且支持 ECS API 扩展。

下面显示了使用 ViPRS3client 的示例。

package com.emc.ecs.sample;

import com.amazonaws.util.StringInputStream;import com.emc.vipr.services.s3.ViPRS3Client;

public class BucketCreate {

private ViPRS3Client s3;

public BucketCreate() {

URI endpoint = new URI(“http://ecs.yourco.com:9020”); String accessKey = “[email protected]”; String secretKey = “pcQQ20rDI2DHZOIWNkAug3wK4XJP9sQnZqbQJev3”;

S3

48 Elastic Cloud Storage (ECS) 3.1 数据访问指南

Page 49: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

BasicAWSCredentials creds = new BasicAWSCredentials(accessKey, secretKey); ViPRS3Client client = new ViPRS3Client(endpoint, creds);

}

public static void main(String[] args) throws Exception { BucketCreate instance = new BucketCreate(); instance.runSample(); } public void runSample() { String bucketName="mybucket"; String key1 = "test1.txt"; String content = "Hello World!"; try { s3.createBucket(bucketName); s3.putObject(bucketName, key1, new StringInputStream(content), null); } catch (Exception e) { } }}

S3

适用于 ECS 的 Java SDK 客户端 49

Page 50: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

S3

50 Elastic Cloud Storage (ECS) 3.1 数据访问指南

Page 51: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

第 2 部分

OpenStack Swift

第 2 章, "OpenStack Swift"

OpenStack Swift 51

Page 52: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

OpenStack Swift

52 Elastic Cloud Storage (ECS) 3.1 数据访问指南

Page 53: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

第 2 章

OpenStack Swift

l ECS 中的 OpenStack Swift 支持........................................................................54l OpenStack Swift 支持的操作.............................................................................54l Swift 扩展..........................................................................................................56l Swift 字节范围扩展............................................................................................56l 保留期................................................................................................................60l 启用文件系统.....................................................................................................60l S3 和 Swift 互操作性..........................................................................................61l OpenStack Swift 身份验证................................................................................. 61l 容器授权............................................................................................................ 68

OpenStack Swift 53

Page 54: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

ECS 中的 OpenStack Swift 支持ECS 包括对 OpenStack Swift API 的支持,并可以在 OpenStack 环境中替代 Swift。本部分介绍支持的操作以及授权和身份验证机制。

OpenStack Swift 服务在以下端口上可用。

协议 端口

HTTP 9024

HTTPS 9025

ECS 支持 OpenStack Swift API,并可与支持该 API 的应用程序配合使用。以下主题介绍支持的方法、ECS 扩展和身份验证机制:

l OpenStack Swift 支持的操作(第 54 页)l Swift 扩展(第 56 页)l OpenStack Swift 身份验证(第 61 页)l 容器授权(第 68 页)

有关使用 OpenStack Swift API 的示例,请查看:

l OpenStack API 示例

在 OpenStack 环境中,ECS 可替代 OpenStack Swift 组件或与现有的 OpenStackSwift 安装一起使用。ECS 可与任何 OpenStack 分发版一起使用,同时还经过了Mirantis OpenStack 9.1 测试。请注意,ECS 经过测试,可作为终端用户对象存储的Swift 替代,而不是 Glance 后端。

要结合使用 OpenStack 与 ECS,您需要配置 ECS 以便它可以对 OpenStack 用户进行身份验证。有关配置身份验证的详细信息,您可以参阅使用 ECS Keystone V3 集成进行的身份验证。

OpenStack Swift 支持的操作下面的部分列出了 ECS 支持的 OpenStack REST API 请求。

l 支持的 OpenStack Swift 调用(第 54 页)l 不支持的 OpenStack Swift 调用(第 55 页)

该信息摘自《OpenStack API Reference》文档的“对象存储 API V1”部分。

支持的 OpenStack Swift 调用在 ECS 中支持下列 OpenStack Swift REST API 调用。

表 10 OpenStack Swift 支持的调用

方法 路径 描述

GET v1/{account} 检索按名称排序的现有存储容器的列表。

POST v1/{account} 通过将自定义元数据标头与帐户级别的 URI 相关联,可以创建或更新帐户元数据。这些标头必须采用 X-Account-Meta-* 格式。

GET v1/{account}/{container}

检索容器中存储的对象列表。

OpenStack Swift

54 Elastic Cloud Storage (ECS) 3.1 数据访问指南

Page 55: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

表 10 OpenStack Swift 支持的调用 (续)

方法 路径 描述

PUT v1/{account}/{container}

创建容器。

DELETE v1/{account}/{container}

删除空容器。

POST v1/{account}/{container}

通过将自定义元数据标头与容器级别的 URI 相关联,可以创建或更新任意容器元数据。这些标头必须采用X-Container-Meta-* 格式。

HEAD v1/{account}/{container}

检索容器元数据。目前不包括对象计数和使用的字节。用户需要管理员权限。

GET v1/{account}/{container}/{object}

检索对象数据。

如果数据段是在 ECS 3.0 之前创建的,则静态大对象(SLO) 上的 GET 范围将不会起作用。

PUT v1/{account}/{container}/{object}

写入或覆盖对象的内容和元数据。使用 X-Copy-From 标头将现有对象拷贝到另一个对象,以指定源。

对于动态大对象 (DLO) 或 SLO,对象可以是一个清单,如此处所述。

DELETE v1/{account}/{container}/{object}

从存储系统中永久删除对象。通过结合使用 COPY 命令,您可以使用 COPY,然后使用 DELETE,以有效地移动对象。

HEAD v1/{account}/{container}/{object}

检索对象元数据和其他标准 HTTP 标头。

POST v1/{account}/{container}/{object}

设置并覆盖任意对象元数据。这些元数据必须采用 X-Object-Meta-* 格式。通过该操作也可以为到期对象分配 X-Delete-At 或 X-Delete-After。但是,该操作不能更改 Content-Type 等其他标头。

表 11 其他功能

功能 注释

临时 URL ECS 支持使用临时 URL 以允许授予用户对象访问权限而无需凭据。

可在此处找到更多信息。

不支持的 OpenStack Swift 调用在 ECS 中不支持下列 OpenStack Swift REST API 调用。

OpenStack Swift

OpenStack Swift 支持的操作 55

Page 56: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

表 12 OpenStack Swift 不支持的调用

方法 路径 描述

COPY v1/{account}/{container}/{object}

可以在 X-Copy-From 标头中使用 PUT v1/{account}/{container}/{object} 进行拷贝操作。

HEAD v1/{account} 检索帐户元数据。当对于存储的字节 (X-Account-Bytes-Used) 返回零时,不完全支持。

Swift 扩展ECS 支持大量对 Swift API 的扩展。

下表中列出了这些扩展以及支持它们的 API。l Swift 字节范围扩展(第 56 页)l 保留期(第 60 页)l 启用文件系统(第 60 页)

Swift 字节范围扩展提供了以下字节范围扩展:l 在对象中更新字节范围(第 56 页)l 覆盖对象的一部分(第 57 页)l 向对象添加数据(第 58 页)l 在一个对象中读取多个字节范围(第 59 页)

在对象中更新字节范围您可以使用针对 Swift 协议的 ECS 扩展来更新对象中的字节范围。

在许多情况下,更新一个对象的部分内容会非常有用。例如,修改存储在大文件开头的二进制文件标头。在 Swift 或其他 Swift 兼容平台上,必须再次发送完整的文件。

以下示例演示了如何使用字节范围更新。在示例中, object1 具有值 The quickbrown fox jumps over the lazy dog.

GET /container1/object1 HTTP/1.1Date:Mon, 17 Jun 2013 20:04:40 -0000x-emc-namespace:emcContent-Type:application/octet-streamAuthorization:AWS wuser1:9qxKiHt2H7upUDPF86dvGp8VdvI=Accept-Encoding:gzip, deflate, compress HTTP/1.1 200 OKDate:Mon, 17 Jun 2013 20:04:40 GMTContent-Type:application/octet-streamLast-Modified:Mon, 17 Jun 2013 20:04:28 GMTETag:6Content-Type:application/jsonContent-Length:43 The quick brown fox jumps over the lazy dog.

OpenStack Swift

56 Elastic Cloud Storage (ECS) 3.1 数据访问指南

Page 57: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

要在此对象中更新特定字节范围,对象数据请求中的“Range”标头必须包括要更新对象的开始和结束偏移。格式为:Range:bytes=<startOffset>-<endOffset>。

在下面的示例中,PUT 请求包括“Range”标头,其中值 bytes=10-14 表明字节10、11、12、13、14 将替换为该请求中发送的值。此时,正在发送新值 green。

PUT /container1/object1 HTTP/1.1Content-Length:5Range:bytes=10-14ACCEPT:application/json,application/xml,text/html,application/octet-streamDate:Mon, 17 Jun 2013 20:15:16 -0000x-emc-namespace:emcContent-Type:application/octet-streamAuthorization:AWS wuser1:xHJcAYAEQansKLaF+/4PdLBHyaM=Accept-Encoding:gzip, deflate, compress green HTTP/1.1 204 No ContentETag:10x-amz-id-2:object1x-amz-request-id:027f037c-29ea-4670-8670-de82d0e9f52aContent-Length:0Date:Mon, 17 Jun 2013 20:15:16 GMT

再次读取对象时,现在的新值是 The quick green fox jumps over the lazydog.。已经更新了此对象中的特定字节范围,单词 brown 已替换为 green。

GET /container1/object1 HTTP/1.1Cookie:JSESSIONID=wdit99359t8rnvipinz4tbtuACCEPT:application/json,application/xml,text/html,application/octet-streamDate:Mon, 17 Jun 2013 20:16:00 -0000x-emc-namespace:emcContent-Type:application/octet-streamAuthorization:AWS wuser1:OGVN4z8NV5vnSAilQTdpv/fcQzU=Accept-Encoding:gzip, deflate, compress HTTP/1.1 200 OKDate:Mon, 17 Jun 2013 20:16:00 GMTContent-Type:application/octet-streamLast-Modified:Mon, 17 Jun 2013 20:15:16 GMTETag:10Content-Type:application/jsonContent-Length:43 The quick green fox jumps over the lazy dog.

覆盖对象的一部分您可以针对 Swift 协议使用 ECS 扩展来覆盖对象的一部分。

要覆盖对象的一部分,请提供要写入的数据以及起始偏移量。将从提供的偏移处开始写入请求中的数据。格式为:Range:<startingOffset>-例如,要在偏移 10 处开始写入数据 brown cat,您应该发出以下 PUT 请求:

PUT /container1/object1 HTTP/1.1Content-Length:9Range:bytes=10-ACCEPT:application/json,application/xml,text/html,application/octet-

OpenStack Swift

覆盖对象的一部分 57

Page 58: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

streamDate:Mon, 17 Jun 2013 20:51:41 -0000x-emc-namespace:emcContent-Type:application/octet-streamAuthorization:AWS wuser1:uwPjDAgmazCP5lu77Zvbo+CiT4Q=Accept-Encoding:gzip, deflate, compress brown cat HTTP/1.1 204 No ContentETag:25x-amz-id-2:object1x-amz-request-id:65be45c2-0ee8-448a-a5a0-fff82573aa3bContent-Length:0Date:Mon, 17 Jun 2013 20:51:41 GMT

检索对象时,将在提供的起始偏移处替换部分数据(green fox 将替换为 browncat),并且 后一个值为:The quick brown cat jumps over the lazydog and cat.

GET /container1/object1 HTTP/1.1Date:Mon, 17 Jun 2013 20:51:55 -0000x-emc-namespace:emcContent-Type:application/octet-streamAuthorization:AWS wuser1:/UQpdxNqZtyDkzGbK169GzhZmt4=Accept-Encoding:gzip, deflate, compress HTTP/1.1 200 OKDate:Mon, 17 Jun 2013 20:51:55 GMTContent-Type:application/octet-streamLast-Modified:Mon, 17 Jun 2013 20:51:41 GMTETag:25Content-Type:application/jsonContent-Length:51 The quick brown cat jumps over the lazy dog and cat.

向对象添加数据您可以使用针对 Swift 协议的 ECS 扩展,将数据附加到对象。

在许多情况下,您需要向对象添加数据,但确定准确的字节偏移并不有效或有作用。针对这种情况,ECS 支持向对象添加数据,而无需指定偏移(在响应中将返回正确的偏移)。例如,要将行附加到日志文件,在 Swift 或其他 Swift 兼容平台上,您必须再次发送完整日志文件。

使用带有特殊值 bytes=-1- 的“Range”标头向对象添加数据。通过这种方式,可以扩展对象,而无需知道确切的对象大小。格式为:Range:bytes=-1-下面的示例请求显示了使用值为 bytes=-1- 的 Range 向现有对象添加数据。在请求中发送了值 and cat。

PUT /container1/object1 HTTP/1.1Content-Length:8Range:bytes=-1-ACCEPT:application/json,application/xml,text/html,application/octet-streamDate:Mon, 17 Jun 2013 20:46:01 -0000x-emc-namespace:emcContent-Type:application/octet-streamAuthorization:AWS wuser1:/sqOFL65riEBSWLg6t8hL0DFW4c=Accept-Encoding:gzip, deflate, compress

OpenStack Swift

58 Elastic Cloud Storage (ECS) 3.1 数据访问指南

Page 59: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

and cat HTTP/1.1 204 No ContentETag:24x-amz-id-2:object1x-amz-request-id:087ac237-6ff5-43e3-b587-0c8fe5c08732Content-Length:0Date:Mon, 17 Jun 2013 20:46:01 GMT

检索对象时,and cat 已附加,并且您将看到完整的值:The quick green foxjumps over the lazy dog and cat.

GET /container1/object1 HTTP/1.1ACCEPT:application/json,application/xml,text/html,application/octet-streamDate:Mon, 17 Jun 2013 20:46:56 -0000x-emc-namespace:emcContent-Type:application/octet-streamAuthorization:AWS wuser1:D8FSE8JoLl0MTQcFmd4nG1gMDTg=Accept-Encoding:gzip, deflate, compress HTTP/1.1 200 OKDate:Mon, 17 Jun 2013 20:46:56 GMTContent-Type:application/octet-streamLast-Modified:Mon, 17 Jun 2013 20:46:01 GMTETag:24Content-Type:application/jsonContent-Length:51 The quick green fox jumps over the lazy dog and cat.

在一个对象中读取多个字节范围您可以使用针对 Swift 协议的 ECS 扩展来读取对象中的多个字节范围。

在许多情况下,读取一个对象的多个部分会非常有用。例如,获取几个视频部分。在Swift 或其他 Swift 兼容平台上,必须针对每个部分发送不同的请求

要在名为 object1 的对象中读取两个特定的字节范围,您应该针对Range:bytes==4-8,41-44 发出以下 GET 请求。读取响应为单词 quick 和lazy。

GET /container1/object1 HTTP/1.1Date:Mon, 17 Jun 2013 20:51:55 -0000x-emc-namespace:emcRange:bytes==4-8,41-44Content-Type:application/octet-streamAuthorization:AWS wuser1:/UQpdxNqZtyDkzGbK169GzhZmt4=Accept-Encoding:gzip, deflate, compress HTTP/1.1 206 Partial ContentDate:Mon, 17 Jun 2013 20:51:55 GMTContent-Type:multipart/byteranges;boundary=bound04acf7f0ae3cccLast-Modified:Mon, 17 Jun 2013 20:51:41 GMTContent-Length:230 --bound04acf7f0ae3cccContent-Type:application/octet-streamContent-Range:bytes 4-8/50quick--bound04acf7f0ae3ccc

OpenStack Swift

在一个对象中读取多个字节范围 59

Page 60: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

Content-Type:application/octet-streamContent-Range:bytes 41-44/50lazy--bound04acf7f0ae3ccc--

保留期

ECS Swift 标头支持保留对象,以防止它们在指定的时间段内被删除或修改。这是ECS 扩展,在标准 Swift API 中不可用。

可以通过以下方式设置保留:

对象上的保留期将保留期与对象一起存储。在对象上使用 x-emc-retention-period 标头设置保留期。

对象上的保留策略可以在对象上设置保留策略,并且可以为命名空间设置与策略关联的期间。这使得能够使用策略将对象组的保留期设置为相同值,并且可以通过更改策略来更改所有对象的保留期。与向对象应用保留期相比,使用策略提供更大灵活性。此外,可以为命名空间设置多个保留策略,以允许不同的对象组具有不同的保留期。在对象上使用 x-emc-retention-policy 标头应用于对象的保留策略和策略保留期必须使用 ECS Management REST API(或者从 ECS 门户)进行设置。

存储区上的保留期针对存储区存储的保留期可为所有对象设置保留期,在需要更长保留期的情况下,可使用对象级别保留期或策略特定对象设置。在存储区上使用 x-emc-retention-period 标头设置保留期。

当尝试修改或删除对象时,存储区保留期或对象保留期(在对象上直接或使用对象保留策略进行设置)中的较大保留期可用于确定是否可以执行操作。

启用文件系统Swift 存储区也可以启用文件系统 (FS),以便使用 Swift 协议写入的文件可以使用文件协议(如 NFS 和 HDFS)进行读取,反之亦然。

启用文件系统访问使用 Swift 协议创建存储区时,可以使用 x-emc-file-system-access-enabled标头启用文件系统访问。当从 ECS 门户(使用 ECS Management REST API)创建存储区时,也可以启用文件系统访问。

文件系统支持限制适用的限制如下:

l 当存储区启用了文件系统时,不能使用保留。

文件系统的跨标头支持跨标头支持是指使用不同的 ECS 支持的协议访问使用一个协议写入的对象。使用Swift 标头写入的对象可以使用 NFS 和 HDFS 文件系统协议读取和写入。

跨标头支持的一个重要方面是对象/文件权限如何在协议之间转换,以及在文件系统访问的情况下用户和组概念如何在对象和文件协议之间转换。

OpenStack Swift

60 Elastic Cloud Storage (ECS) 3.1 数据访问指南

Page 61: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

您可以在以下位置找到有关文件系统的跨标头支持的更多信息:ECS 支持站点上提供的《ECS 管理指南》。

S3 和 Swift 互操作性S3 和 Swift 协议可以进行互操作,以便 S3 应用程序可以访问 Swift 存储区中的对象,Swift 应用程序可以访问 S3 存储区中的对象。

有关 Swift 和 S3 互操作性的更多详细信息,请参阅 S3 和 Swift 互操作性。

S3 和 Swift 互操作性与存储区策略使用不兼容。存储区策略仅适用于使用 S3 标头的访问并且当使用 Swift API 访问存储区时不会强制实施。

OpenStack Swift 身份验证

ECS 为不同版本的 OpenStack Swift 身份验证协议提供支持。

v1

ECS 使对象用户可以使用 ECS Swift 服务进行身份验证并获取在对 ECS Swift 服务进行后续 API 调用时可以使用的身份验证令牌。请参阅 OpenStack 版本 1 身份验证 (第 62 页)。

v2

ECS 使对象用户可以使用 ECS Swift 服务进行身份验证以获取在对 ECS Swift 服务进行后续 API 调用时可以使用的划定范围的令牌(即与租户(等效于项目)关联的令牌)。请参见 OpenStack 版本 2 身份验证(第 64 页)

v3

ECS 可验证提供范围划定到 Keystone 项目的令牌的 Keystone V3 用户。请参阅使用 ECS Keystone V3 集成进行的身份验证(第 66 页)。

对于 v1 和 v2 协议,使用 OpenStack Swift 协议访问 ECS 对象存储需要 ECS 对象用户帐户和 Swift 密码。

对于 v3,会使用 Keystone V3 服务在 ECS 外部创建用户并向其分配协议和角色。ECS不执行身份验证,但会使用 Keystone V3 服务验证身份验证令牌。

在在 ECS 门户创建 Swift 用户(第 61 页)中介绍了向 ECS 对象用户分配 Swift 凭据的过程。

在 ECS 门户创建 Swift 用户可以向 ECS 对象用户提供凭据,以便使用 OpenStack Swift 协议访问 ECS 对象存储。

准备工作

您必须具有 ECS 系统管理员身份。

您可以在 ECS 支持站点上提供的《ECS 管理指南》中找到有关添加 ECS 对象用户的详细信息。

过程

1. 在 ECS 门户中,选择“Manage” > “Users”。

此时将显示“User Management”页面。

OpenStack Swift

S3 和 Swift 互操作性 61

Page 62: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

2. 在“User Management”页面中,选择“New Object User”,或通过对用户表中列出的用户选择“Edit”操作,将 Swift 密码添加到现有用户。

如果您要创建新用户,请输入用户的名称,然后选择用户所属的命名空间。

3. 在 Swift 区域的“Groups”字段中,输入用户所属的组。

下图中突出显示了 Swift 区域。

如果您指定 admin 组,则用户将自动能够执行所有容器操作。如果您指定其他组,则必须向该组授予针对容器的权限。有关容器授权的详细信息,请参阅容器授权(第 68 页)。

4. 输入 Swift 用户的密码。

5. 选择“Set Password & Groups”。

OpenStack 版本 1 身份验证您可使用 ECS OpenStack Swift 服务通过该身份验证协议的版本 1 进行身份验证。

过程

1. 获取 ECS 对象用户的 UID 和密码。

您可以从 ECS 门户执行此操作(请参见在 ECS 门户创建 Swift 用户(第 61页)),也可以调用以下 ECS REST API 以生成密码。

请求:

PUT /object/user-password/[email protected] <user_password_create> <password>myPassword</password> <namespace>EMC_NAMESPACE</namespace> </user_password_create>

OpenStack Swift

62 Elastic Cloud Storage (ECS) 3.1 数据访问指南

Page 63: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

响应:

HTTP 200

2. 调用下面所示的 OpenStack 身份验证 REST API。对于 HTTP,使用端口9024,对于 HTTPS,使用端口 9025。

请求:

GET /auth/v1.0 X-Auth-User:[email protected] X-Auth-Key:myPassword

响应:

HTTP/1.1 204 No Content Date:Mon, 12 Nov 2010 15:32:21 GMT Server:Apache

X-Storage-Url:https://{hostname}/v1/account X-Auth-Token:ECS_e6384f8ffcd849fd95d986a0492ea9a6 Content-Length:0

结果

如果 UID 和密码通过 ECS 验证,那么在响应标头中将返回存储 URL 和令牌。通过包括此令牌对更多请求进行身份验证。存储 URL 提供主机名和资源地址。您可以通过提供以下 X-Storage-Url 标头来访问容器和对象:

X-Storage-Url:https://{hostname}/v1/{account}/{container}/{object}

生成的令牌在创建之后 24 小时后过期。如果您在 24 小时以内使用相同的 UID 和密码重复进行身份验证请求,OpenStack 将返回同一个令牌。24 小时有效期到期之后,OpenStack 将返回一个新令牌。

在下面简单的身份验证示例中,第一个 REST 调用返回了一个 X-Auth-Token。第二个REST 调用使用该 X-Auth-Token 针对某个帐户执行 GET 请求。

$ curl -i -H "X-Storage-User:[email protected]" -H "X-Storage-Pass:1fO9X3xyrVhfcokqy3U1UyTY029gha5T+k+vjLqS" http://ecs.yourco.com:9024/auth/v1.0

HTTP/1.1 204 No Content X-Storage-Url:http://ecs.yourco.com:9024/v1/s3 X-Auth-Token:ECS_8cf4a4e943f94711aad1c91a08e98435 Server:Jetty(7.6.4.v20120524)

OpenStack Swift

OpenStack 版本 1 身份验证 63

Page 64: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

$ curl -v -X GET -s -H "X-Auth-Token:8cf4a4e943f94711aad1c91a08e98435" http://ecs.yourco.com:9024/v1/s3

* About to connect() to ecs.yourco.com port 9024 (#0) * Trying 203.0.113.10... * Adding handle:conn:0x7f9218808c00 * Adding handle:send:0 * Adding handle:recv:0 * Curl_addHandleToPipeline:length:1 * - Conn 0 (0x7f9218808c00) send_pipe:1, recv_pipe:0 * Connected to ecs.yourco.com (203.0.113.10) port 9024 (#0)

> GET /v1/s3 HTTP/1.1 > User-Agent:curl/7.31.0 > Host:ecs.yourco.com:9024 > Accept:*/* > X-Auth-Token:8cf4a4e943f94711aad1c91a08e98435 > < HTTP/1.1 204 No Content < Date:Mon, 16 Sep 2013 19:31:45 GMT < Content-Type:text/plain * Server Jetty(7.6.4.v20120524) is not blacklisted < Server:Jetty(7.6.4.v20120524) <

* Connection #0 to host ecs.yourco.com left intact

OpenStack 版本 2 身份验证ECS 包括针对 OpenStack 版本 2 (Keystone) 身份验证的有限支持。

准备工作

ECS 提供了 OpenStack Swift V2 身份服务的实施,从而可实现使用 V2 身份验证来对用户进行身份验证的 Swift 应用程序。用户必须是已分配了 OpenStack Swift 凭据的ECS 对象用户,这些凭据使他们可以使用 Swift 协议访问 ECS 对象存储。

只有范围划定到 ECS 命名空间(相当于 Swift 项目)的令牌才能用于进行 Swift API调用。可以获取未划定范围的令牌并将其用于访问身份服务,以便在获取范围划定到租户和服务端点的令牌之前检索租户身份。

划定范围的令牌和服务端点可用于通过 ECS 进行身份验证,如前一部分(介绍 V1 身份验证)中所述。

下面列出的两篇文章提供了重要的背景信息。

l OpenStack Keystone 工作流和令牌范围划定l 针对 Admin API 进行身份验证

过程

1. 要从 ECS 获取未划定范围的令牌,可以使用 /v2.0/tokens API,并提供用于ECS Swift 服务的用户名和密码。

curl -v -X POST -H 'ACCEPT:application/json' -H "Content-Type:application/json" -d '{"auth":{"passwordCredentials" :{"username" :"swift_user",

OpenStack Swift

64 Elastic Cloud Storage (ECS) 3.1 数据访问指南

Page 65: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

"password" :"123"}}}' http://203.0.113.10:9024/v2.0/tokens

响应与下面内容类似。未划定范围的令牌前面带有 ECS 生成的 ID 和令牌,并且前面带有“ecs_”前缀。

{"access":{"token":{"id":"ecs_d668b72a011c4edf960324ab2e87438b","expires":"1376633127950"l},"user": {"name":"sysadmin", "roles":[ ], "role_links":[ ] },"serviceCatalog":[ ] }} , }

2. 检索与未划定范围的令牌相关联的租户信息。

curl -v http://203.0.113.10:9024/v2.0/tenants -H 'X-Auth-Token:d668b72a011c4edf960324ab2e87438b'

响应与下面内容类似。

{"tenants_links":[], "tenants":[{"description":"s3","enabled":true, "name":"s3"}]}

3. 检索带有存储 URL 的划定范围的令牌。

curl -v -X POST -H 'ACCEPT:application/json' -H "Content-Type:application/json" -d '{"auth":{"tenantName" :"s3", "token":{"id" :ecs_d668b72a011c4edf960324ab2e87438b"}}}' http://203.0.113.10:9024/v2.0/tokens

示例响应如下。划定范围的令牌前面带有 ID。

{"access":{"token":{"id":"ecs_baf0709e30ed4b138c5db6767ba76a4e","expires":"1376633255485","tenant":{"description":"s3","enabled":true,"name":"s3"}},"user":{"name":"swift_admin","roles":[{"name":"member"},{"name":"admin"}],"role_links":[]}, "serviceCatalog":[{"type":"object-store", "name":"Swift","endpoints_links":[],"endpoint":[{"internalURL": "http://203.0.113.10:9024/v1/s3","publicURL":"http://203.0.113.10:9024/v1/s3"}]}]}}

4. 使用划定范围的令牌和服务端点 URL 进行 Swift 身份验证。该步骤与OpenStack V1 中的相同。

curl -v -H "X-Auth-Token:baf0709e30ed4b138c5db6767ba76a4e"

OpenStack Swift

OpenStack 版本 2 身份验证 65

Page 66: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

http://203.0.113.10:9024/v1/s3/{container}/{object}

使用 ECS Keystone V3 集成进行的身份验证ECS 通过验证 OpenStack Swift 用户提供的身份验证令牌,来支持 Keystone V3。对于 Keystone V3,使用 Keystone V3 服务在 ECS 外部创建用户。ECS 不执行身份验证,但会使用 Keystone V3 服务验证身份验证令牌。

在 Keystone 域中,项目可以被视为相当于 ECS 租户/命名空间。可以将 ECS 命名空间视为租户。

Keystone V3 使用户可以分配有角色,并且使他们有权执行的操作基于其角色成员资格。但是,针对 Keystone V3 的 ECS 支持当前不支持 Keystone 策略,因此用户必须属于 admin 组(角色)才能执行容器操作。

身份验证令牌的范围必须划定到项目;未划定范围的令牌不允许用于 ECS。与未划定范围的令牌相关的操作(如获取项目(在 ECS 中相当于租户)和服务的列表)必须由用户直接针对 Keystone 服务执行,因而用户必须从 Keystone 服务获取划定范围的令牌,该令牌随后可以由 ECS 进行验证并且(如果有效)用于向 ECS 进行身份验证。

要启用 ECS 验证,必须在 ECS 中配置身份验证提供程序,以便从用户收到项目范围的令牌时,ECS 可以针对 Keystone V3 身份验证提供程序验证它。此外,必须创建与Keystone 项目对应的 ECS 命名空间。在配置 OpenStack Swift 和 ECS 的集成(第66 页)中提供了详细信息。

授权检查ECS 使用 Keystone 令牌提供的信息来执行授权决策。授权检查如下所示:

1. ECS 会检查作为令牌范围的项目是否与 URI 中的项目匹配。

2. 如果操作是对象操作,则 ECS 会评估与对象关联的 ACL,以确定是否允许执行操作。

3. 如果操作是容器操作,则 ECS 会评估请求的操作。如果用户具有 admin 角色,他们可以执行以下容器操作:列出、创建、更新、读取和删除。

域在 Keystone V3 中,所有用户都属于某个域,并且一个域可以具有多个项目。用户可以基于其角色访问项目。如果用户未分配给域,则其域会是 《default》。

使用 Swift Keystone V3 用户创建的对象和容器会由 <user>@<domain.com> 所拥有。如果用户未分配给域,则分配给容器和对象的用户名会是 <user>@default。

配置 OpenStack Swift 和 ECS 的集成为了确保使用 Keystone V3 的 OpenStack Swift 服务可以向 ECS 进行身份验证,必须确保 Swift 和 ECS 配置一致。

准备工作

以下前提条件适用:

l 确保您具有 Swift 服务管理员帐户的凭据。需要这些凭据,以便 ECS 可以使用Keystone 服务进行身份验证。

l 确保您具有将访问 ECS 的 Swift 用户所属 Keystone 项目的标识。l 确保您具有 ECS 系统管理员帐户的凭据。

OpenStack Swift

66 Elastic Cloud Storage (ECS) 3.1 数据访问指南

Page 67: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

过程

1. 确保 ECS 端点已添加到 Swift 服务目录,并且已正确格式化。

您必须确保端点位于默认 Keystone 域中。

2. 以系统管理员身份登录 ECS 门户。

3. 创建身份验证提供程序,指定 Keystone V3 服务端点以及可以用于验证令牌的管理员帐户凭据。

请参阅 添加 Keystone 身份验证提供程序(第 67 页)。

4. 创建 ECS 命名空间,其 ID 与希望进行身份验证的用户所属的 Keystone 项目/帐户相同。

获取 Keystone 项目 ID。

a. 在 ECS 门户中,选择“Manage” > “Namespace” > “NewNamespace”

b. 输入命名空间的名称。

这应该是 Swift 项目的名称。

c. 输入命名空间管理员帐户作为“User Admin”。

这应是之前创建的管理用户的名称。

d. 配置需要的任何其他命名空间设置。

有关命名空间设置以及在 ECS 中创建用户的详细信息,请参阅 ECS 支持站点上提供的《ECS 管理指南》。

结果

创建命名空间之后,属于对应 Keystone 项目并且拥有范围划定到该项目的令牌的用户可以向 ECS 进行身份验证(通过与 Keystone 身份验证提供程序进行 ECS 通信),并使用 Swift API 访问 ECS 对象存储。

添加 Keystone 身份验证提供程序您可以添加 Keystone 身份验证提供程序,以便对 OpenStack Swift 用户进行身份验证。

准备工作

l 此操作要求 ECS 中的系统管理员角色。l 您只能添加一个 Keystone 身份验证提供程序。l 获取在 Keystone 身份验证提供程序设置(第 68 页)中列出的身份验证提供程序

信息。

过程

1. 在 ECS 门户中,选择“Manage” > “Authentication”。

2. 在“Authentication Provider Management”页面上,单击“NewAuthentication Provider”。

3. 在“New Authentication Provider”页面上,在“Type”字段中,选择“Keystone V3”。

此时将显示必填字段。

OpenStack Swift

使用 ECS Keystone V3 集成进行的身份验证 67

Page 68: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

4. 在“Name”、“Description”、“Server URL”、“KeystoneAdministrator”和“Admin Password”字段中键入值。有关这些字段的详细信息,请参见 Keystone 身份验证提供程序设置(第 68 页)。

5. 单击“Save”。

Keystone 身份验证提供程序设置添加或编辑 Keystone 身份验证提供程序时,您必须提供身份验证提供程序信息。

表 13 Keystone 身份验证提供程序设置

字段 描述

Name Keystone 身份验证提供程序的名称。此名称用于在 ECS 中标识提供程序。

描述 身份验证提供程序的自由文本描述。

Type Keystone V3.

Server URL 为了验证 Swift 用户,ECS 需要连接到的 Keystone 系统的 URl。

Keystone Administrator Keystone 系统的管理员的用户名。ECS 使用此用户名连接到 Keystone 系统。

管理员密码 指定 Keystone 管理员的密码。

容器授权OpenStack Swift 授权只针对容器。

Swift 目前支持两种类型的授权:

l 引用样式授权l 组样式授权。

ECS 只支持基于组的授权。

OpenStack Swift

68 Elastic Cloud Storage (ECS) 3.1 数据访问指南

Page 69: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

管理员用户可以在帐户中执行所有操作。非管理员用户只能基于容器的 X-Container-Read 和 X-Container-Write 访问控制列表为每个容器执行操作。下面的操作可以授权给非管理员用户:

管理员分配针对容器的读取权限“管理员”用户可以使用以下命令向组分配读取权限:

curl -X PUT -v -H 'X-Container-Read:{GROUP LIST}' -H 'X-Auth-Token:{TOKEN}' http://127.0.0.1:8080/v1/{account}/{container1}"

该命令允许属于 GROUP LIST 的用户具有针对容器 1 的读取访问权限。例如,要向组“Member”分配读取权限,请运行以下命令:

curl –X PUT -v –H 'X-Container-Read:Member' –H 'X-Auth-Token:{ADMIN_TOKEN}' http://127.0.0.1:8080/v1/{account}/{container1}

在授予读取权限之后,属于目标组的用户可以执行以下操作:

l HEAD container — 检索容器元数据。只有当用户分配到具有租户管理员权限的组时,才允许执行。

l GET container — 列出容器中的对象。l GET objects with container — 读取容器中对象的内容。

管理员分配针对容器的写入权限“管理员”用户可以使用以下命令向组分配读取权限:

curl -XPUT -v -H 'X-Container-Write:{GROUP LIST}' -H 'X-Auth-Token:{TOKEN}' http://127.0.0.1:8080/v1/{account}/{container1}"

该命令允许属于 GROUP LIST 的用户具有针对容器 1 的写入访问权限。例如,要向组“Member”分配写入权限,请运行以下命令:

curl –X PUT -v –H 'X-Container-Write:Member' –H 'X-Auth-Token:{ADMIN_TOKEN}' http://127.0.0.1:8080/v1/{account}/{container1}

组 GROUP LIST 中的用户获得写入权限。在授予写入权限之后,属于目标组的用户可以执行以下操作:

l POST container — 设置元数据。从前缀“X-Container-Meta”开始。l PUT objects within container — 向容器中写入对象/覆盖容器中的对象。

有关授权的更多信息,请访问:容器操作。

OpenStack Swift

容器授权 69

Page 70: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

OpenStack Swift

70 Elastic Cloud Storage (ECS) 3.1 数据访问指南

Page 71: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

第 3 部分

EMC Atmos(Syncplicity 技术白皮书:EMCAtmos)

第 3 章, "EMC Atmos(Syncplicity 技术白皮书:EMC Atmos)"

EMC Atmos(Syncplicity 技术白皮书:EMC Atmos) 71

Page 72: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

EMC Atmos(Syncplicity 技术白皮书:EMC Atmos)

72 Elastic Cloud Storage (ECS) 3.1 数据访问指南

Page 73: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

第 3 章

EMC Atmos(Syncplicity 技术白皮书:EMCAtmos)

l ECS 中的 EMC Atmos API 支持......................................................................... 74l 支持的 EMC Atmos REST API 调用....................................................................74l 不支持的 EMC Atmos REST API 调用................................................................ 76l EMC Atmos REST API 调用中的子租户支持...................................................... 76l API 扩展............................................................................................................. 77

EMC Atmos(Syncplicity 技术白皮书:EMC Atmos) 73

Page 74: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

ECS 中的 EMC Atmos API 支持ECS 支持一部分 EMC Atmos API。本部分详细介绍支持的操作和 ECS 扩展。

Atmos 对象服务在以下端口上可用。

协议 端口

HTTP 9022

HTTPS 9023

有关支持的操作的详细信息,请参见 ECS 支持网站上提供的《Atmos 程序员指南》。

l 《Atmos Programmer’s Guide》(Atmos 程序员指南)

对于所有支持的操作均提供线路格式兼容性。因此,在《Atmos Programmer's Guide》(Atmos 程序员指南)中介绍的操作适用于 ECS 中的 API 操作。

《Atmos Programmer's Guide》(Atmos 程序员指南)还提供了有关通过 Atmos API 进行身份认证的信息以及许多支持功能的综合示例。

支持的 EMC Atmos REST API 调用ECS 支持一部分 EMC Atmos API。

支持下列 Atmos REST API 调用。显示了针对对象和命名空间接口的调用。

表 14 支持的 Atmos REST API 调用

方法 路径 描述

服务操作

GET /rest/service 获取关于系统的信息

对象操作

POST /rest/objects/rest/namespace/<path>

创建对象

(请参见下面的注意)

DELETE /rest/objects/<ObjectID>/rest/namespace/<path>

删除对象

PUT /rest/objects/<ObjectID>/rest/namespace/<path>

更新对象

(请参见下面的注意)

GET /rest/objects/<ObjectID>/rest/namespace/<path>

读取对象(或目录列表)

POST /rest/namespace/<path>?rename 重命名对象

元数据操作

GET /rest/objects/<ObjectID>?metadata/user/rest/namespace/<path>?metadata/user

获取对象的用户元数据

POST /rest/objects/<ObjectID>?metadata/user/rest/namespace/<path>?metadata/user

设置用户元数据

EMC Atmos(Syncplicity 技术白皮书:EMC Atmos)

74 Elastic Cloud Storage (ECS) 3.1 数据访问指南

Page 75: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

表 14 支持的 Atmos REST API 调用 (续)

方法 路径 描述

DELETE /rest/objects/<objectID>?metadata/user/rest/namespace/<path>?metadata/user

删除用户元数据

GET /rest/objects/<ObjectID>?metadata/system/rest/namespace/<path>?metadata/system

获取对象的系统元数据

GET /rest/objects/<ObjectID>?acl/rest/namespace/<path>?acl

获取 ACL

POST /rest/objects/<ObjectID>?acl/rest/namespace/<path>?acl

设置 ACL

GET /rest/objects/<ObjectID>?metadata/tags/rest/namespace/<path>?metadata/tags

获取对象的元数据标记

GET /rest/objects/<ObjectID>?info/rest/namespace/<path>?info

获取对象信息

Head /rest/objects/<ObjectID>/rest/namespace/<path>

获取所有对象元数据

对象空间操作

GET /rest/objects 列出对象

GET /rest/objects?listabletags 获取可列出的标记

匿名访问

GET /rest/objects/<ObjectId>?uid=<uid>&expires=<exp>&signature=<sig>/rest/namespace/<path>?uid=<uid>&expires=<exp>&signature=<sig>

可共享 URL

l ECS 中支持 x-emc-wschecksum 标头。

l 不支持 HTML 表单上载。

l 对于 x-emc-accept,GET /rest/objects 不支持不同的响应类型。例如,不支持文本/纯文本。

l “读取”、“写入”和“删除”ACL 在 ECS 中的工作方式与 Atmos 相同。

l POST /rest/objects 支持 x-emc-object-id 标头,以启用传统的(44 个字符)对象ID。

Atmos 可列出的标记可列出的标记是用于列出或筛选对象的用户定义的特殊标记。例如,应用程序可能会允许 终用户使用诸如“Vacation 2016”之类的标记来标记一组图片(对象)。以后,应用程序可以通过仅列出标记了此可列出标记的对象来响应“Vacation 2016”查询。

在 ECS 中使用 Atmos 协议时,用户不能删除或修改其他用户的可列出标记。某些情况下,原生 Atmos 中允许此功能。

EMC Atmos(Syncplicity 技术白皮书:EMC Atmos)

支持的 EMC Atmos REST API 调用 75

Page 76: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

可列出的标记在 ECS 中编制了索引,可提高已标记对象检索的性能和可扩展性。

在 ECS 中,EMC_TAGS 元数据标记用于保存可列出的标记。此标记名称不应在用户定义的元数据标记中使用。

对象 ID 的长度在 ECS 中支持 Atmos API,可将对象 ID 的长度从 44 个字符扩展到 101 个字符。因此,在将应用程序从 Atmos 移到 ECS 时,您需要注意对象 ID 的长度有所不同。

要使用传统的 44 个字符 ID 长度创建对象,您可以使用 x-emc-object-id 标头。这样可将对象迁移到 Atmos。

不支持的 EMC Atmos REST API 调用不支持下列 Atmos REST API 调用。

表 15 不支持的 Atmos REST API 调用

方法 路径 描述

对象版本

POST /rest/objects/<objectID>?versions

创建对象版本

DELETE /rest/objects/<objectID>?versions

删除对象版本

GET /rest/objects/<objectID>?versions

列出对象版本

PUT /rest/objects/<objectID>?versions

恢复对象版本

匿名访问

POST /rest/accesstokens 创建访问令牌

GET /rest/accesstokens/<token_id>?info

获取访问令牌详细信息

DELETE /rest/accesstokens/<token_id>

删除访问令牌

GET /rest/accesstokens 列出访问令牌

GET /rest/accesstokens/<token_id>

匿名下载内容

EMC Atmos REST API 调用中的子租户支持ECS 包括两个本机 REST API 调用,专门用于向 Atmos 应用程序添加 ECS 子租户支持。

这两个调用如下:

API 调用 示例

创建子租户 PUT Http url:/rest/subtenant

EMC Atmos(Syncplicity 技术白皮书:EMC Atmos)

76 Elastic Cloud Storage (ECS) 3.1 数据访问指南

Page 77: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

API 调用 示例

所需标头:x-emc-uid(例如,[email protected])和 x-emc-signature。

在响应的标头“subtenantID”中设置子租户ID。

删除子租户 DELETE Http url:/rest/subtenants/{subtenantID}所需标头:x-emc-uid(例如,[email protected])和 x-emc-signature。

迁移后,子租户 ID 保留在 ECS 中:标头是 x-emc-subtenant-id:{original_subt_id}。

API 扩展ECS 支持大量对 Atmos API 的扩展。

下表中列出了这些扩展以及支持它们的 API:l 向对象添加数据(第 77 页)l ECS 支持 Atmos 对象的保留期和保留过期期限(第 78 页)

向对象添加数据您可以针对 EMC Atmos 协议使用 ECS 扩展,以便将数据添加到对象。

在许多情况下,您需要向对象添加数据,但确定准确的字节偏移并不有效或有作用。针对这种情况,ECS 支持自动向对象添加数据,而无需指定偏移(在响应中将返回正确的偏移)。

使用带有特殊值 bytes=-1- 的“Range”标头向对象添加数据。通过这种方式,可以扩展对象,而无需知道确切的对象大小。格式为:Range:bytes=-1-下面的示例请求显示了使用值为 bytes=-1- 的 Range 向现有对象添加数据。在请求中发送了值 and cat。

PUT /rest/namespace/myObject HTTP/1.1Content-Length:8Range:bytes=-1-ACCEPT:application/json,application/xml,text/html,application/octet-streamDate:Mon, 17 Jun 2013 20:46:01 -0000x-emc-date:Mon, 17 Jun 2013 20:46:01 -0000x-emc-namespace:emcx-emc-uid:fa4e31a68d3e4929bec2f964d4cac3de/[email protected]:ZpW9KjRb5+YFdSzZjwufZUqkExc=Content-Type:application/octet-streamAccept-Encoding:gzip, deflate, compress

and cat

HTTP/1.1 200 OKx-emc-mtime:1431626712933

EMC Atmos(Syncplicity 技术白皮书:EMC Atmos)

API 扩展 77

Page 78: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

Date:Mon, 17 Jun 2013 20:46:01 GMTx-emc-policy:defaultx-emc-utf8:truex-emc-request-id:0af9ed8d:14cc314a9bc:112f6:9x-emc-delta:8x-emc-append-offset:24Content-Length:0Server:Jetty(7.6.4.v20120524)

在 x-emc-append-offset 标头中返回附加数据的偏移位置。

检索对象时,and cat 已附加,并且您可以看到完整的值:The quick green foxjumps over the lazy dog and cat.

ECS 支持 Atmos 对象的保留期和保留过期期限ECS 支持在 Atmos 对象上设置保留期和保留过期期限。

保留期保留期定义在编辑或删除对象之前,ECS 保留对象的时长。在保留期内无法从系统编辑或删除对象,直到保留期到期。

在 ECS 中创建 Atmos 对象时,对象保留可以:

l 直接在对象上定义l 继承在其中创建对象的 ECS 存储区上设置的保留期。

当在 ECS 命名空间上设置保留策略时,您还必须直接在对象上设置保留期。对象不继承命名空间中的保留策略。

表 16 Atmos 保留期

在以下位置设置保留

使用 注释

对象 Atmos API,通过

l 标头保留期(以秒为单位):'x-emc-retention-period:60'

l 用户元数据 (UMD)、结束日期:'x-emc-meta:user.maui.retentionEnable=true,user.maui.retentionEnd=2016-10-21:10:00Z'

l 标头和 UMD:'x-emc-meta:user.maui.retentionEnable =true,user.maui.retentionEnd=2016-10-21T18:14:30Z' -header 'x-emc-

l 在创建或更新对象设置时,可以在对象上设置保留。

l 标头保留期(以秒为单位)。

l UMD 保留由结束日期定义。

l 如果通过标头和 UMD 设置保留期,将首先检查 UMD 属性并且 UMD 属性优先于标头中的设置。

l 在对象上设置保留期之后,在到期之前,您都无法修改保留期。

l 当使用 x-emc 标 头来设置保留期时

n -1 会设置无限保留期,并禁用到期期限(如果定义了到期期限)。

n -2 会禁用在对象上设置的保留期。

EMC Atmos(Syncplicity 技术白皮书:EMC Atmos)

78 Elastic Cloud Storage (ECS) 3.1 数据访问指南

Page 79: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

表 16 Atmos 保留期 (续)

在以下位置设置保留

使用 注释

retention-period:60'

ECS 命名空间 在 ECS 门户中,从“NewNamespace”或“EditNamespace”页面。

l 如果您想要为对象设置保留期,并且已在对象用户的命名空间上定义保留策略,您仍必须直接在对象上定义保留期,如上文所述。

l 如果在 ECS 命名空间中设置了保留策略并且/或者在命名空间中的存储区上设置了保留期,而且在存储区中创建了对象,ECS 将根据为命名空间或存储区设置的 长保留期保留命名空间、存储区和对象。

l 如果已通过对象标头在对象上设置了保留期,则 ECS 将根据在命名空间、存储区或对象上设置的 长期限保留对象。

l 如果通过 Atmos API 在对象上定义了保留结束日期,ECS 将使用在对象上设置的 Atmos API 保留结束日期,并忽略创建对象时的命名空间保留策略和存储区保留期。

l 在包含 Atmos 对象的子租户(存储区)上应用保留策略时,保留策略将同时应用于在设置保留策略之后在子租户中创建的对象以及在设置保留策略之前在子租户中创建的对象。

ECS Rest APIPOST /object/namespaces/namespace/{namespace}/retention

ECS 存储区 在 ECS 门户中,从“NewBucket”或“EditBucket”页面。

ECS Rest APIPUT /object/bucket/{bucketName}/retention

有关命名空间保留策略和存储区保留期的详细信息,请参阅 ECS 支持站点上提供的《ECS 管理指南》。

示例:请求和响应以创建对象并设置保留:

POST /rest/namespace/file1 HTTP/1.1User-Agent:curl/7.37.0Host:10.247.179.228:9022Accept:*/*x-emc-date:Thu, 16 Feb 2017 19:28:13 GMTx-emc-meta:user.maui.retentionEnable=true,user.maui.retentionEnd=2017-06-30T06%3A38%3A44Zx-emc-uid:f082110e13f249649340e172fb7b4956/u1x-emc-utf8:trueContent-Type:plain/textx-emc-signature:2Gz51WT+jQdMjlobDV0mz7obsXM=Content-Length:774

Response

HTTP/1.1 201 CreatedDate:Thu, 16 Feb 2017 19:28:17 GMT

EMC Atmos(Syncplicity 技术白皮书:EMC Atmos)

ECS 支持 Atmos 对象的保留期和保留过期期限 79

Page 80: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

x-emc-policy:defaultx-emc-utf8:truex-emc-request-id:0af7b3e4:15a4849d95e:37c:0x-emc-delta:774Location:/rest/objects/0a40bd045f7373d367639f095d1db0d15acadb82d5d2cd108e2142f4be04635c-59bdb9b6-20c0-4f55-bc91-9db728a58854x-emc-mtime:1487273295379Content-Length:0Server:ViPR/1.0

示例:请求和响应以获取对象元数据:

curl --head -H "x-emc-date:Mon, 30 Jan 2017 16:56:35 GMT" -H "x-emc-uid:7a2593be81374744adbf8e3983e7bd84/u1" -H "x-emc-signature:CQgfoiIQ/DCif7TafcIskWyVpME=" http://10.247.179.228:9022/rest/objects/d1bced53f2ebbcbc51af1d84747bd198d123d3b8585293a5bf0d32bb73c6cf4b-365f4482-c24a-4eca-b24a-070efe29bf63

Response

HTTP/1.1 200 OKDate:Mon, 30 Jan 2017 16:56:35 GMTx-emc-mtime:1485795387838“x-emc-retention-period:21798212”x-emc-meta:“user.maui.retentionEnd=2017-10-10T00:00:00Z,user.maui.retentionEnable=true”,allow-inline-update=false,atime=2017-01-30T16:45:48Z,ctime=2017-01-30T16:56:27Z,ctype=plain/text,data-range=CAAQgFA=,dek=kq/W1Rg/7qbmaCcLF8pFvqlDJ8+suPTdVddBBZFwZA86muG3P0Pb7w==,dekAlgo=AESKeyWrapRFC5649,etag=0-,fs-mtime-millisec=1485795387838,itime=2017-01-30T16:45:48Z,kekId=s3.7a2593be81374744adbf8e3983e7bd843cdda755061bac6c12c06eb02800a7fee4b11ac2e03f62bb01eee02995068e56,keypoolid=s3.7a2593be81374744adbf8e3983e7bd84,keypoolname=7a2593be81374744adbf8e3983e7bd84,keyversion=0,mtime=2017-01-30T16:56:27Z,namespace=s3,nlink=1,object-name=,objectid=d1bced53f2ebbcbc51af1d84747bd198d123d3b8585293a5bf0d32bb73c6cf4b-365f4482-c24a-4eca-b24a-070efe29bf63,objname=file,parentOid=53ae036bfcfb46f5580b912222f3026835e3ef972c7e3e532ba4a5de30b1946e,parentZone=urn:storageos:VirtualDataCenterData:365f4482-c24a-4eca-b24a-070efe29bf63,policyname=default,retention=CgYIoKOZmlE=,size=0,type=regular,uid=u1,parent=apache,gid=apachex-emc-useracl:u1=FULL_CONTROLx-emc-groupacl:other=READx-emc-policy:defaultx-emc-request-id:0af7b3e4:159f0185cf7:957:4Content-Type:plain/textContent-Length:0Server:ViPR/1.0

示例:使用保留值更新对象

POST /rest/namespace/file2?metadata/user HTTP/1.1User-Agent:curl/7.37.0Host:10.247.179.228:9022Accept:*/*x-emc-date:Thu, 16 Feb 2017 19:37:15 GMTx-emc-meta:user.maui.retentionEnable=true,user.maui.retentionEnd=2017-07-30T06%3A38%3A44Z

EMC Atmos(Syncplicity 技术白皮书:EMC Atmos)

80 Elastic Cloud Storage (ECS) 3.1 数据访问指南

Page 81: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

x-emc-uid:f082110e13f249649340e172fb7b4956/u1x-emc-utf8:trueContent-Type:plain/textx-emc-signature:5UPpZcCfO0vtxMTW62fa2/2SmLg=

Response

HTTP/1.1 200 OK

Date:Thu, 16 Feb 2017 19:37:16 GMTx-emc-policy:_intx-emc-utf8:truex-emc-request-id:0af7b3e4:15a4849d95e:582:0Content-Length:0Server:ViPR/1.0

到期期限如果为 Atmos 对象定义了保留期结束日期并且还在该对象上设置了到期期限,ECS 会在到期期限中定义的日期自动删除该对象。到期期限:l 可以使用 Atmos API 或 x-emc 标头在对象上设置。l 到期期限必须晚于保留结束日期。l 默认情况下,到期期限处于禁用状态。l 当使用 x-emc 标头设置保留和到期日期时,-1 值将禁用到期期限。

示例:使用 x-emc 标头设置到期期限:

POST /rest/namespace/file2 HTTP/1.1User-Agent:curl/7.37.0Host:10.247.179.228:9022Accept:*/*x-emc-date:Tue, 31 Jan 2017 19:38:00 GMTx-emc-expiration-period:300x-emc-uid:a2b85977fd08488b80e646ea875e990b/u1Content-Type:plain/textx-emc-signature:krhYBfKSiM3mFOT6FtRB+2/xZnw=Content-Length:10240Expect:100-continue

示例:使用 Atmos API 请求和响应:

POST /rest/namespace/file2 HTTP/1.1User-Agent:curl/7.37.0Host:10.247.179.228:9022Accept:*/*x-emc-date:Thu, 02 Feb 2017 02:47:32 GMTx-emc-meta:user.maui.expirationEnable=true,user.maui.expirationEnd=2017-03-30T20:20:00Zx-emc-uid:239e20dec7a54301a0b02f6090edcace/u1Content-Type:plain/textx-emc-signature:5tGEyK/9qUZCPSnQ9OPOdktN+Zo=Content-Length:10240Expect:100-continue

Response

HTTP/1.1 100 ContinueHTTP/1.1 201 CreatedDate:Thu, 02 Feb 2017 02:47:33 GMTx-emc-policy:defaultx-emc-request-id:0af7b3e4:159fb81ddae:345e:0

EMC Atmos(Syncplicity 技术白皮书:EMC Atmos)

ECS 支持 Atmos 对象的保留期和保留过期期限 81

Page 82: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

x-emc-delta:10240Location:/rest/objects/5c3abaf60e0e207abec96baf0618c0461b7cd716898f8a12ee236aed1ec94bea-c86ee0e9-8709-4897-898e-c3d1895e1d93x-emc-mtime:1486003652813Content-Length:0Server ViPR/1.0 is not blacklistedServer:ViPR/1.0

示例:使用 Atmos API 请求和响应元数据更新:

POST /rest/namespace/file?metadata/user HTTP/1.1User-Agent:curl/7.37.0Host:10.247.179.228:9022Accept:*/*x-emc-date:Thu, 02 Feb 2017 02:44:13 GMTx-emc-meta:user.maui.expirationEnable=true,user.maui.expirationEnd=2017-03-30T20:20:00Zx-emc-uid:239e20dec7a54301a0b02f6090edcace/u1Content-Type:plain/textx-emc-signature:9pzcc/Ce4Lq3k52QKdfWLYlZ1Yc=

Response

HTTP/1.1 200 OKDate:Thu, 02 Feb 2017 02:44:14 GMTx-emc-policy:_intx-emc-request-id:0af7b3e4:159fb81ddae:339e:0Content-Length:0Server ViPR/1.0 is not blacklistedServer:ViPR/1.0

EMC Atmos(Syncplicity 技术白皮书:EMC Atmos)

82 Elastic Cloud Storage (ECS) 3.1 数据访问指南

Page 83: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

第 4 部分

CAS

第 4 章, "CAS"

CAS 83

Page 84: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

CAS

84 Elastic Cloud Storage (ECS) 3.1 数据访问指南

Page 85: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

第 4 章

CAS

l 在 ECS 中设置 CAS 支持................................................................................... 86l 冷存储................................................................................................................86l 法规遵从性.........................................................................................................87l ECS 中的 CAS 保留............................................................................................89l CAS 应用程序的高级保留:基于事件的保留、诉讼封存和 小/ 大调控器...... 91l 设置命名空间保留策略.......................................................................................96l 为 CAS 用户创建和设置存储区...........................................................................97l 设置 CAS 对象用户............................................................................................ 98l 设置 CAS 的存储区 ACL.....................................................................................99l 支持 CAS 用户的 ECS Management API........................................................... 101l 内容寻址存储 (CAS) SDK API 支持.................................................................. 102

CAS 85

Page 86: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

在 ECS 中设置 CAS 支持介绍 ECS 中的 CAS(内容寻址存储)。

ECS CAS 支持基于 CAS SDK 的客户端应用程序在 ECS 存储中存储、检索和删除固定内容对象。

在配置 ECS 安装之前,必须调配底层 ECS 存储。通常在安装新的 ECS 机架时完成调配。其中包括设置存储池、VDC 和复制组。在 ECS CAS 中,如果您需要创建或编辑这些对象以支持 CAS,可使用标准文档。请参见 ECS 支持站点上提供的《ECS 管理指南》。

对于您的存储池,可能要考虑设置冷归档。请参见冷存储(第 86 页)。

然后,使用标准文档设置您的命名空间、用户和存储区。请参见 ECS 支持站点上提供的《ECS 管理指南》。

本章介绍如何修改您的基本配置以支持 CAS。

冷存储介绍冷存储归档。

冷存储用于存储不常更改且不需要强大默认 EC 方案的对象。用于冷归档的 EC 方案是10 个数据片段和 2 个编码片段 (10/12)。效率是 1.2 倍。

在创建新存储池时,您可指定冷归档(冷存储)。创建存储池之后,不能更改 EC 方案。此方案可支持丢失单个节点。还支持在两个单独的节点上丢失一个驱动器(共 6个驱动器)或两个驱动器(共 12 个驱动器)。

EC 要求

表 17 常规归档和冷归档的要求比较

使用情形 启用方式 所需 小节点数

所需 小磁盘数

建议的磁盘数 EC 效率 EC 方案

常规归档 默认 4 16* 32 1.33 倍 12/16

冷归档 由系统管理员配置 8 12* 24 1.2 倍 10/12

*由于 C 系列应用装置的 低可部署配置是分别具有 12 个磁盘的两个应用装置,因此低有效值为 24 个磁盘。

存储池配置要通过门户建立冷归档,请在创建新存储池时选择“Cold Storage”。一旦创建存储池,便不可更改此设置。

CAS

86 Elastic Cloud Storage (ECS) 3.1 数据访问指南

Page 87: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

法规遵从性介绍支持针对电子记录存储的政府与行业标准的 ECS 功能。

ECS 满足以下标准的存储要求,经 Cohasset Associates Inc 认证:

l 证券交易委员会 (SEC) 法规 17 C.F.R.§ 240.17a-4(f)

l 商品期货交易委员会 (CFTC) 法规 17 C.F.R.§ 1.31(b)-(c)

在具有 ECS 2.2.1 版软件及更高版本的 ECS 应用装置上经认证符合法规遵从性。经ECS 认证的第三方硬件上运行的仅 ECS 3.0 版本和更高版本安装也已经过认证。

法规遵从性包括三个组件:

l 平台加固:应对常见安全漏洞。l 基于策略的记录保留:限制对保留期内记录的保留策略进行更改的能力。l 法规遵从性报告:系统代理的定期报告会记录系统的法规遵从性状态。

平台加固和法规遵从性以下 ECS 安全功能支持法规遵从性标准。

ECS 平台安全功能:

l 用户以 root 身份对节点进行访问处于禁用状态(不允许任何用户以 root 身份进行登录)。

l 在首次安装期间,ECS 客户可以通过管理员用户设置访问节点。

CAS

法规遵从性 87

Page 88: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

l 管理员用户使用 sudo 在节点上运行命令。

l sudo 命令存在完整审核记录。

l ESRS 提供了关闭所有节点远程访问的功能。在“ESRS Policy Manager”中,将“Start Remote Terminal”操作设置为“Never Allow”。

l 关闭所有不必要的端口(ftpd、sshd)。l 具有锁定管理员角色的 emcsecurity 用户可以锁定群集中的节点。这意味着禁止

通过 SSH 在网络上进行远程访问。然后,锁定管理员可以解锁节点以允许远程维护活动或其他授权访问。

节点锁定不影响授权的 ECS 门户或 ECS Management API 用户。

法规遵从性和保留策略介绍已启用法规遵从性的 ECS 系统上的记录保留增强规则。ECS 在对象、存储区和命名空间级别将对象保留功能设置为“Enabled”。通过限制对保留期内对象的保留设置进行更改,法规遵从性增强了这些功能。规则包括︰

l 在命名空间级别启用法规遵从性。这意味着,命名空间中所有存储区都必须具有大于零的保留期。对于 CAS,可以创建具有零保留的存储区,前提是启用“EnforceRetention Information in Object”设置。

l 仅可在创建命名空间时在该命名空间上启用法规遵从性。(法规遵从性无法添加到现有命名空间。)

l 一旦启用法规遵从性,就不能将其禁用。l 命名空间中所有存储区都必须具有大于零的保留期。

如果您拥有分配对象级保留期的应用程序,请勿使用 ECS 来分配大于应用程序保留期的保留期。此操作会导致应用程序错误。

l 无论保留值如何,都无法删除包含数据的存储区。l 对存储区应用“Infinite”选项意味着,无法永远删除已启用法规遵从性的命名空

间中的存储区中的对象。l 无法删除或缩短对象的保留期。因此,不能删除或缩短存储区的保留期。l 可以延长对象和存储区保留期。l 没有用户可以删除保留期内的对象。这包括具有 CAS 特权删除权限的用户。

CAS

88 Elastic Cloud Storage (ECS) 3.1 数据访问指南

Page 89: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

图 1 在 ECS 门户中的新命名空间上启用法规遵从性

法规遵从性代理介绍法规遵从性代理的运行情况。

默认情况下,除法规遵从性监视以外,其他法规遵从性功能均已启用。如果启用监视,则代理会定期记录消息。

联系客户支持中心做出相关安排,以启用法规遵从性监视。监视消息通过节点命令提供。这些消息不会显示在 ECS 门户中。

ECS 中的 CAS 保留CAS C-Clip 可以有一个保留期,制约应用程序可将关联对象删除之前,关联对象在ECS 存储中的保留时间。

保留期保留期由 CAS 应用程序在对象的 C-Clip 中分配。

CAS

法规遵从性代理 89

Page 90: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

例如,如果某个财务单据必须自其创建之日起保留三年,则在与该财务单据关联的 C-Clip 中指定一个三年保留期。此外,还可以指定无限期保留该单据。

保留策略(保留类)

“保留类”的 Centera 概念对应于 ECS 中的“保留策略”。本文档使用“保留策略”。

通过保留策略,可以获取保留使用情形并将其应用于 C-Clip。例如,不同类型的文档可能会有不同的保留期。您可能需要以下保留期:

l 财务:3 年l 法律:5 年l 电子邮件:6 个月

如果对一些 C-Clip 应用了保留策略,则通过更改保留策略,可以更改应用了该保留策略的所有对象的保留期。

保留策略与 ECS 中的命名空间关联,并被 CAS 应用程序识别为保留类。

ECS 存储区级别保留和 CAS存储区级别保留不是 Centera 中的默认池保留。在 ECS 中,CAS 默认保留期持续为零。

法规遵从性命名空间中没有对象级别保留的写入对象中默认保留期的行为更改从 ECS 3.0 开始,当应用程序将没有对象保留的 C-Clip 写入到法规遵从性命名空间中的 ECS CAS 存储区,并且存储区具有保留值(例如 6 个月)时,将为 C-Clip 分配默认无限保留期 (-1)。绝不会删除 C-Clip,因为其有效保留期是两者中 长的一个:存储区级别保留期和默认对象级别保留。

这与 ECS 2.2.1 行为有所不同,ECS 2.2.1 行为是使 ECS 符合 Centera 行为,而此行为是,在 CE+ 法规遵从性模式下的默认池保留期总是无限 (-1)。

在 ECS 2.2.1 中,当应用程序将没有对象保留的 C-Clip 写入到法规遵从性命名空间中的 ECS CAS 存储区,并且存储区具有保留值(例如 6 个月)时,分配给 C-Clip 的保留期将为零 (0)。在这里,C-Clip 的有效保留期将是存储区保留值(6 个月)。可以在6 个月内删除 C-Clip。

从 ECS 2.2.1 升级到 ECS 3.0 或任何更高版本后,依赖于 ECS 2.2.1 行为的应用程序将写入永远不能删除的 C-Clip。

在与 ECS 3.0 或更高版本交互之前,应停止并配置您的应用程序以分配适当的对象级别保留。

在上面的示例中,应用程序应该为 C-Clip 分配 6 个月的对象级别保留。

CAS 优先级将多个保留期应用于 ECS 中的某个 CAS 对象进,具有较高值的保留期优先,与保留应用方式无关。

如何应用 CAS 保留您可以在 ECS 门户中或使用 ECS Management API 为命名空间定义保留策略。请参见设置命名空间保留策略(第 96 页)。

您的外部 CAS 应用程序可以在 C-Clip 创建过程中将固定保留期或保留策略分配给 C-Clip。

在通过 API 应用保留期时,请以秒为单位指定期限。

请注意,ECS CAS 在所有保留相关计算中计入 C-Clip 的创建时间,而不计入迁移时间。

CAS

90 Elastic Cloud Storage (ECS) 3.1 数据访问指南

Page 91: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

如何使用 ECS Management API 创建保留策略。您可以使用 ECS 管理 REST API 创建保留期和保留策略,下面提供了相关摘要。

表 18 用于保留的 ECS Management API 资源

方法 描述

PUT /object/bucket/{bucketName}/retention

存储区的保留值定义应用于存储区中每个对象的强制保留期。如果您将保留期设置为 1 年,则在一年里不能将对象从存储区中删除。

GET /object/bucket/{bucketName}/retention

返回当前为指定存储区设置的保留期。

POST /object/namespaces/namespace/{namespace}/retention

对于命名空间,保留设置的作用相当于策略,其中每个策略是一个 <名称>:<保留期> 对。您可以定义为命名空间定义多个保留策略,并且可以按名称将策略分配给命名空间中的对象。这样,您可以通过更改对应的策略,更改分配有相同策略的一组对象的保留期。

PUT /object/namespaces/namespace/{namespace}/retention/{class}

更新与命名空间关联的保留期的期限。

GET /object/namespaces/namespace/{namespace}/retention

返回为命名空间定义的保留策略。

有关 ECS Management API 的更多信息,可参见 ECS Management REST API 简介(第 106 页)。在线参考位于此处:ECS API 参考。

CAS 应用程序的高级保留:基于事件的保留、诉讼封存和最小/最大调控器

描述 CAS API 中提供的 ECS 支持的高级保留功能。

客户应用程序使用 CAS API 启用保留策略。当 CAS 工作负载迁移到 ECS 时,CASAPI 功能的 ECS 感知允许客户应用程序继续使用迁移的数据。在 ECS 中,以下高级保留管理 (ARM) 功能在没有单独许可证的情况下可用:

l 基于事件的保留:能够通过 C-Clip 配置对象,以在 CAS 应用程序收到指定事件时应用(触发)保留期或保留策略。

l 诉讼封存:如果 CAS 应用程序已通过 C-Clip 对对象应用诉讼封存,则能够防止删除对象。CAS 应用程序可以通过创建并应用唯一诉讼封存 ID,向对象应用 多 100个诉讼封存。

l 小/ 大调控器:管理员能够设置固定保留期或可变保留期的存储区级别限制。可变保留期是设置为支持基于事件的保留的保留期。在 ECS 中,系统或命名空间管理员可以使用 ECS 门户设置值。程序员可以使用 ECS Management API 设置值。

对于迁移到 ECS 的使用任何命名方案的旧式 CAS 数据支持 ARM。

用于 CAS 存储区级别保留的最小/最大调控器在 ECS 门户中找到 CAS 存储区,然后选择“Edit”。以下屏幕上显示的所有控件仅适用于 CAS 功能,但“Bucket Retention Period”控件除外。“Bucket RetentionPeriod”是所有 ECS 存储区类型支持的标准 ECS 存储区保留功能。

CAS

CAS 应用程序的高级保留:基于事件的保留、诉讼封存和 小/ 大调控器 91

Page 92: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

图 2 CAS 存储区的保留选项

下表说明了 CAS 存储区保留功能。

功能 描述

EnforceRetentionInformation inObject

如果启用此控件,则不能创建没有保留信息(期间或策略)的 CAS 对象。尝试保存此类对象将返回错误。如果启用,则即使在启用法规遵从性的环境中也不能配置“Bucket Retention Period”。

当 CE+ 模式 Centera 迁移到 ECS 时,存储区上默认情况下启用“Enforce Retention Information in Object”。

Bucket RetentionPeriod

如果指定了存储区保留期,并且存在存储区级别和对象级别保留期,则将强制实施更长的时间段。在已启用法规遵从性的环境中,“Bucket Retention Period”是必需的,除非强制实施对象中的保留信息。但是,配置后,即使是当强制实施对象中的保留信息时,也无法重置“Bucket Retention Period”。

Minimum FixedRetention Period

此功能管理对象中指定的保留期。如果对象的保留期超出此处指定的范围,则尝试写入对象失败。在使用保留策略时,不会强制实施 小/ 大设置。

对“Minimum Fixed Retention Period”选择“Infinite”意味着所有保留值必须为无限。对“Mamimum Fixed Retention Period”选择它意味着没有 大限制。

Maximum FixedRetention Period

CAS

92 Elastic Cloud Storage (ECS) 3.1 数据访问指南

Page 93: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

功能 描述

小/ 大保留限制应用于写入到存储区的任何 C-Clip。如果剪辑由任何基于 SDK 的第三方工具迁移,则保留应该在相应范围之内,否则会引发错误。

Minimum VariableRetention Period

此功能使用基于事件的保留 (EBR) 管理对象中指定的可变保留期。在 EBR中,设置基本保留期,已经过编程的触发器函数能够在触发器触发时增加保留期。如果对象的新保留期超出此处指定的范围,则为响应触发器而尝试写入对象将失败。在使用保留策略时,不会强制实施 小/ 大设置。

对“Minimum Variable Retention Period”选择“Infinite”意味着所有保留值必须为无限。对“Mamimum Variable RetentionPeriod”选择它意味着没有 大限制。

小/ 大保留限制应用于写入到存储区的任何 C-Clip。如果剪辑由任何基于 SDK 的第三方工具迁移,则保留应该在相应范围之内,否则会引发错误。

MaximumVariableRetention Period

如果系统管理员或程序员未设置固定和可变保留期的任何值,ECS Management APIget 函数将不返回 小/ 大设置的值。“Enforce Retention Information in C-Clip”将返回 false 的默认值。

基于事件的保留基于事件的保留 (EBR) 是指定在事件之前和事件之后的指定时间段内无法删除记录的说明。在 CAS 中,EBR 是具有指定的基本保留期或保留策略以及在触发器触发时可设置更长保留期的应用程序定义的触发器的 C-Clip。保留期仅在触发器触发时才开始。当 C-Clip 被标记为 EBR 时,它不能在事件之前被删除,除非使用特权删除。

使用 EBR 时,C-Clip 生命周期如下所示:

l 创建:应用程序创建新的 C-Clip,并将其标记为遵守 EBR。应用程序可以提供固定保留期作为 短保留期,并且它必须提供基于事件的保留期或策略。

l 触发事件:应用程序会触发事件,这是基于事件的保留期或保留策略的起点。此时,应用程序可以分配一个新的基于事件的保留期,前提是长于创建 C-Clip 时分配的保留期。

l 已删除:当应用程序尝试删除 C-Clip 时,必须满足以下条件:

n 策略(命名空间)保留已到期n 存储区保留已到期n 固定保留已到期n 已触发该事件n 创建时设置的 EBR 和事件发生时的任何后续更改(扩展)均已到期

下图显示了 EBR 下的 C-Clip 的三种可能情况:

l C1 具有固定或 小保留,其在事件触发之前已到期。l C2 具有固定或 小保留,其将在 EBR 到期之前到期。l C3 具有固定或 小保留,其将在 EBR 到期之后到期。

CAS

CAS 应用程序的高级保留:基于事件的保留、诉讼封存和 小/ 大调控器 93

Page 94: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

图 3 EBR 方案

对于不符合标准的命名空间,特权删除命令可以覆盖 EBR 的固定和可变保留。

当应用 EBR 保留时,它必须符合可变保留期的 小/ 大调控器设置。

表 19 用于基于事件的保留的 CAS API 函数

功能 描述

FPClip_EnableEBRWithClass 此函数将 C-Clip 设置为有资格接收未来事件,并且允许在创建 C-Clip 期间将基于事件的保留(EBR) 类分配给 C-Clip。

FPClip_EnableEBRWithPeriod 此函数将 C-Clip 设置为有资格接收未来事件,并且允许在创建 C-Clip 期间将基于事件的保留(EBR) 期分配给 C-Clip。

FPClip_IsEBREnabled 此函数返回一个布尔值,以指示是否为基于事件的保留 (EBR) 启用了 C-Clip。

FPClip_GetEBRClassName 此功能可检索分配给 C-clip 的基于事件的保留(EBR) 策略的名称。

FPClip_GetEBREventTime 当触发该 C-Clip 的基于事件的保留 (EBR) 事件时,此函数将返回在 C-Clip 上设置的事件时间。

FPClip_GetEBRPeriod 此函数返回与 C-Clip 关联的基于事件的保留(EBR) 期值(以秒为单位)。

FPClip_TriggerEBREvent 此函数将触发启用了基于事件的保留 (EBR) 的C-Clip 的事件。

FPClip_TriggerEBREventWithClass 此函数将触发启用了基于事件的保留 (EBR) 的C-Clip 的事件,并将新的 EBR 策略分配给 C-Clip。

FPClip_TriggerEBREventWithPeriod 此函数将触发启用了基于事件的保留 (EBR) 的C-Clip 的事件,并将新的 EBR 期分配给 C-Clip。

CAS

94 Elastic Cloud Storage (ECS) 3.1 数据访问指南

Page 95: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

诉讼封存诉讼封存允许 CAS 应用程序暂时阻止删除 C-Clip。诉讼封存对于受到正式调查、传审或询问的数据非常有用,在调查结束之前不得删除。一旦无需封存数据,诉讼封存可以由应用程序释放,并恢复正常的保留行为。CAS 应用程序在 C-Clip 级别设置和删除诉讼封存。

即使是特权删除也不能删除诉讼封存下的 C-Clip。

一个 C-Clip 可以在多个诉讼封存下。应用程序必须生成唯一的诉讼封存 ID,并且能够跟踪与 C-Clip 相关联的特定诉讼封存。应用程序无法查询 C-Clip 了解此信息。仅有一个函数可确定 C-Clip 的诉讼封存状态。如果 C-Clip 上有一个或多个诉讼封存,此函数返回 true,否则为 false。

使用诉讼封存时,C-Clip 生命周期如下所示:

l 创建:应用程序创建新的 C-Clip,并提供固定和/或基于事件的保留期。l 设置诉讼封存:应用程序将 C-Clip 置于封存状态。此应用程序可能不同于写入 C-

Clip 的应用程序。l 释放诉讼封存:应用程序释放 C-clip。此应用程序可能与设置诉讼封存或写入 C-

Clip 的应用程序不同。l 删除:当应用程序尝试删除 C-Clip 时,必须满足以下条件:

n C-Clip 上没有其他未完成的诉讼封存。n 保留策略已过期。n 标准存储区保留已过期。(标准存储区保留可用于所有 ECS 对象类型,但不推

荐用于 CAS。)n 固定保留期已到期(仅限 CAS 功能)。n 基于事件的保留已到期(仅限 CAS 功能)。

下图显示了置于诉讼封存下的 C-Clip 的三种可能情况:

l C1 具有固定保留,其在处于封存状态时已到期。l C2 具有固定保留,其在封存期间已到期。l C3 具有固定保留,其将在释放封存后到期。

CAS

CAS 应用程序的高级保留:基于事件的保留、诉讼封存和 小/ 大调控器 95

Page 96: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

图 4 诉讼封存方案

C-Clip 可以被分配给多个诉讼封存。如果是这样,每个诉讼封存都需要用于诉讼封存的单独 API 调用以及唯一标识符。

诉讼封存 ID 的 大大小为 64 个字符。每个 C-Clip 的 大诉讼封存 ID 为 100。这些限制由 CAS API 强制执行。

表 20 用于诉讼封存的 CAS API 函数

功能 描述

FPClip_GetRetentionHold 此函数确定 C-Clip 的封存状态并返回 true或 false。

FPClip_SetRetentionHold 此函数设置或设置 C-Clip 上的保留封存。对于多个诉讼封存,请为每个封存提供唯一的诉讼封存 ID。对于多个封存,请针对每个 ID进行一次调用。

设置命名空间保留策略为命名空间保留策略提供特定于 CAS 的设置说明。

命名空间的保留策略功能提供了为在命名空间中创建的所有 C-Clip 定义和管理 CAS 保留类的一种方式。

一个命名空间可以有多个保留策略,其中每个策略定义一个保留期。通过将某个保留策略应用于多个 C-Clip(通过 API),更改保留策略就会更改与该策略关联的所有对象的保留期。对于 CAS,应用程序将保留类应用于对象的 C-Clip。如果某个对象在保留期内,则不允许请求修改该对象。

过程

1. 在 ECS 门户,选择“Manage” > “Namespace”。

2. 要编辑现有命名空间的配置,请选择与现有命名空间关联的“Edit”操作。

CAS

96 Elastic Cloud Storage (ECS) 3.1 数据访问指南

Page 97: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

3. 添加和配置保留策略。

a. 在“Retention Policies”区域中,选择“Add”以添加新的策略。

b. 输入策略名称。

c. 指定保留策略的期限。

选中“Infinite”复选框以确保永不删除采用此策略的对象。图 5 新建保留策略

4. 选择“Save”。

图 6 命名空间的保留策略

为 CAS 用户创建和设置存储区配置存储区以支持 CAS 用户。

在 ECS 中,管理用户将创建存储区并成为存储区所有者。对于 CAS,需要将对象用户设置为存储区所有者。请遵循此过程以正确设置 CAS 存储区,并将 CAS 用户设为存储区所有者。在此示例中,newcasadmin1 是管理用户,newcasuser1 是 CAS 对象用户,而 newcasns1 是命名空间。此过程假设已设置两个用户和命名空间。

过程

1. 作为 newcasadmin1 登录到 ECS 门户。

CAS

为 CAS 用户创建和设置存储区 97

Page 98: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

2. 在 ECS 门户 上,选择“Manage” > “Bucket”。

3. 选择“New Bucket”。

4. 按如下方式填写字段:

字段 值

Replication Group 您的复制组

Set current user as Bucket Owner 检查

CAS Enabled

5. 选择“Save”。

6. 选择“Manage” > “User”。

7. 确保“Object User”选项卡处于活动状态,搜索 newcasuser1,然后选择“Edit”。

8. 在“Default Bucket”中,键入 newcasbucket1,然后选择“Set Bucket”。

9. 选择“Close”。

10. 选择“Manage” > “Bucket”。

11. 搜索 newcasbucket1,然后选择“Edit bucket”。

12. 在“Bucket Owner”中,键入 newcasuser1。

13. 选择“Save”。

设置 CAS 对象用户设置对象用户以使用 CAS。

在设置对象用户时,可以将 CAS 功能分配给组成 CAS 概要信息元素的概要信息。您将能查看供在您的 CAS 应用程序中使用的结果 PEA 文件。

过程

1. 在 ECS 门户 上,选择“Manage” > “Users”。

2. 要编辑现有对象用户的配置,请选择与用户关联的“Edit”操作。

CAS

98 Elastic Cloud Storage (ECS) 3.1 数据访问指南

Page 99: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

图 7 对象用户的 CAS 设置

3. 在“CAS”区域中,键入密码(密钥),或者选择“Generate”让门户为您创建一个密码(密钥)。

4. 选择“Set Password”。

5. 选择“Generate PEA File”生成您的应用程序在 ECS 上认证 CAS 存储时需要的 PEA 文件。

6. 通过设置默认存储区,用户执行的不指定存储区的每个操作都将使用指定的默认存储区。键入默认存储区的名称,然后选择“Set Bucket”。

7. 选择“Add Attribute”以向用户添加元数据标记。

8. 添加元数据标记名称和值。

有关元数据标记的更多信息,请参见 CAS SDK 文档。

9. 选择“Save Metadata”。

设置 CAS 的存储区 ACL编辑存储区的访问控制列表以限制用户访问。

有些 ECS 存储区 ACL 对应于 CAS 权限,有些对 CAS 数据无意义。

过程

1. 在 ECS 门户 上,选择“Manage” > “Bucket”。

2. 要编辑现有存储区的 ACL,请选择与现有存储区关联的“Edit ACL”操作。

CAS

设置 CAS 的存储区 ACL 99

Page 100: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

图 8 编辑存储区 ACL

3. 选择与用户关联的“Edit ”操作。

图 9 存储区 ACL 管理

4. 修改权限。

表 21 存储区 ACL

ECS ACL ACL 定义

READ 读取、查询和存在功能

CAS

100 Elastic Cloud Storage (ECS) 3.1 数据访问指南

Page 101: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

表 21 存储区 ACL (续)

ECS ACL ACL 定义

WRITE 写入和诉讼封存功能

FULL_CONTROL 读取、删除、查询、存在、剪辑拷贝、写入、诉讼封存

PRIVILEDGED_WRITE 特权删除

DELETE 删除

其他 ECS ACL 对 CAS 无意义。

5. 选择“Save”。

6. 您也可以在组级别编辑 ACL。组是预定义的,组中的成员资格是根据用户标准自动设置的。选择“Group ACLs”。

7. 选择“Add”。

8. 从“Group Name”列表中选择要编辑的组。

表 22 存储区 ACL 组

存储区 ACL 组 描述

public 所有用户(不管是否认证)。

all users 所有经过认证的用户。

other 经过认证的非存储区所有者用户。

log delivery 不支持。

9. 编辑 ACL,然后选择“Save”。

支持 CAS 用户的 ECS Management API介绍可用于管理 CAS 用户和概要信息设置的 ECS Management API 资源。

ECS Management API 资源描述:

l GET /object/user-cas/secret/{uid} :获取指定用户的 CAS 密钥。

l GET /object/user-cas/secret/{namespace}/{uid}:获取指定命名空间和用户的 CAS 密钥。

l POST /object/user-cas/secret/{uid}:创建或更新指定用户的 CAS 密钥。

l GET /object/user-cas/secret/{namespace}/{uid}/pea:为指定用户生成 PEA 文件。

l POST /object/user-cas/secret/{uid}/deactivate:删除指定用户的CAS 密钥。

l GET /object/user-cas/bucket/{namespace}/{uid}:获取指定命名空间和用户的默认存储区。

CAS

支持 CAS 用户的 ECS Management API 101

Page 102: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

l GET /object/user-cas/bucket/{uid}:获取指定用户的默认存储区。

l POST /object/user-cas/bucket/{namespace}/{uid}:更新指定命名空间和用户的默认存储区。

l GET /object/user-cas/applications/{namespace}:获取指定命名空间的 CAS 注册应用程序。

l POST /object/user-cas/metadata/{namespace}/{uid}:更新指定命名空间和用户的 CAS 注册应用程序。

l GET /object/user-cas/metadata/{namespace}/{uid}:获取指定命名空间和用户的 CAS 用户元数据。

有关详细信息,请参见。

内容寻址存储 (CAS) SDK API 支持支持的版本ECS 支持 CAS 内部版本 3.1.544 或更高版本。此外应验证 ISV 的应用程序是否支持ECS。

在 ECS 中设置 CAS 支持(第 86 页)中提供了有关 ECS CAS 支持的详细信息。

CAS 查询支持从 ECS 2.2 开始便支持 CAS 查询。

在 ECS 中,CAS 查询操作根据现有 C-Clip 的创建时间和已删除 C-Clip 的删除时间返回结果(反映)。在 EMC Centera 中,查询操作根据对象的写入时间返回结果。

在 ECS 3.0 以前的 ECS 版本中不支持 API在 ECS 3.0 以前的 ECS 版本中不支持的 CAS SDK API 调用:

l FPClip_EnableEBRWithClass

l FPClip_EnableEBRWithPeriod

l FPClip_SetRetentionHold

l FPClip_TriggerEBREvent

l FPClip_ TriggerEBREventWithClass

l FPClip_ TriggerEBREventWithPeriod

l FPClip_GetEBRClassName

l FPClip_GetEBREventTime

l FPClip_GetEBRPeriod

l FPClip_GetRetentionHold

l FPClip_IsEBREnabled

CAS

102 Elastic Cloud Storage (ECS) 3.1 数据访问指南

Page 103: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

第 5 部分

ECS 管理 REST API

第 5 章, "ECS 管理 REST API"

ECS 管理 REST API 103

Page 104: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

ECS 管理 REST API

104 Elastic Cloud Storage (ECS) 3.1 数据访问指南

Page 105: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

第 5 章

ECS 管理 REST API

l ECS Management REST API 简介.................................................................... 106l 使用 ECS Management REST API 进行身份验证.............................................. 106

ECS 管理 REST API 105

Page 106: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

ECS Management REST API 简介本部分介绍如何通过 ECS 管理 REST API 进行访问和身份验证,并提供了 API 路径摘要。您可以使用 ECS 管理 REST API 配置和管理对象存储。配置对象存储之后,您可以使用 ECS 支持的对象和文件协议执行对象创建、读取、更新和删除操作。

有关 ECS 管理 REST API 的详细信息,请参见以下主题:

l 使用 ECS Management REST API 进行身份验证(第 106 页)l ECS Management REST API 摘要(第 109 页)

此外,您可以参阅从源代码中自动生成的 ECS API 参考,其中提供了 API 中可用方法的参考。

使用 ECS Management REST API 进行身份验证ECS 将基于标记的身份验证系统用于 REST API 调用。本部分提供了在使用和不使用cookie 的情况下,通过 ECS API 进行身份验证的示例。

当您通过 ECS 进行身份验证时,ECS API 会返回身份验证令牌。对于后续调用中的身份验证,您可以使用该令牌。

l 如果客户端自动执行重定向,ECS API 将返回 HTTP 401 代码。然后,您必须登录并进行身份验证,才能获取新令牌。

l 如果客户端未自动执行重定向,ECS API 将返回 HTTP 302 代码。302 代码会将客户端定向到必须重新进行身份验证的位置。

可通过以下方式检索和使用身份认证标记:

l 保存成功身份验证请求中的 X-SDS-AUTH-TOKEN cookie 并在后续请求中一起发送该 cookie。

l 读取成功身份认证请求中的 X-SDS-AUTH-TOKEN HTTP 标头并将该标头拷贝到任一后续请求中。

可通过端口 4443 使用 ECS API。客户端通过以下形式发出登录请求来访问 ECS:

https://<ECS_IP>:4443/login

不使用 cookie 进行身份验证此示例展示如何通过从成功身份验证请求中读取 X-SDS-AUTH-TOKEN HTTP 标头并将其拷贝到后续请求中来使用身份验证令牌。此示例不使用 cookie。这些示例使用curl 命令行工具进行编写,并且为了方便阅读,进行了格式化处理。

下面的 ECS API 调用对 /login 资源执行 GET 命令。-u 选项可指定基本身份验证标头的用户。您必须在请求中指定用户。在成功完成身份验证时,ECS API 会返回 HTTP200 代码以及包含经过编码的令牌的 X-SDS-AUTH-TOKEN 标头。

默认 ECS API 令牌生存期是 8 小时,这意味着令牌在 8 小时之后不再有效。令牌的默认空闲时间是 2 小时;在 2 小时空闲时间之后,令牌会到期。如果使用过期的令牌,您将被重定向到 /login URL。之后只要使用过期的令牌,您将收到 HTTP 状态错误代码 401。

curl -L --location-trusted -k https://10.247.100.247:4443/login -u "root:ChangeMe" -v

> GET /login HTTP/1.1

ECS 管理 REST API

106 Elastic Cloud Storage (ECS) 3.1 数据访问指南

Page 107: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

> Authorization:Basic cm9vdDpDaGFuZ2VNZQ==> User-Agent:curl/7.24.0 (i386-pc-win32) libcurl/7.24.0 OpenSSL/0.9.8t zlib/1.2.5> Host:10.247.100.247:4443> Accept:*/*>< HTTP/1.1 200 OK< Date:Tue, 26 Nov 2013 22:18:25 GMT< Content-Type:application/xml< Content-Length:93< Connection:keep-alive< X-SDS-AUTH-TOKEN:BAAcQ0xOd3g0MjRCUG4zT3NJdnNuMlAvQTFYblNrPQMAUAQADTEzODU0OTQ4NzYzNTICAAEABQA5dXJu OnN0b3JhZ2VvczpUb2tlbjo2MjIxOTcyZS01NGUyLTRmNWQtYWZjOC1kMGE3ZDJmZDU3MmU6AgAC0A8=<<?xml version="1.0" encoding="UTF-8" standalone="yes"?><loggedIn> <user>root</user></loggedIn>* Connection #0 to host 10.247.100.247 left intact* Closing connection #0* SSLv3, TLS alert, Client hello (1):

您可以拷贝 X-SDS-AUTH-TOKEN 内容并通过 curl 工具 -H 切换将其粘贴到下一个API 调用,如以下示例所示。

curl https://10.247.100.247:4443/object/namespaces -k -H "X-SDS-AUTH-TOKEN:BAAcOHZLaGF4MTl3eFhpY0czZ0tWUGhJV2xreUE4PQMAUAQADTEzODU0OTQ4NzYzNTICAAEABQA5dXJu OnN0b3JhZ2VvczpUb2tlbjpkYzc3ODU3Mi04NWRmLTQ2YjMtYjgwZi05YTdlNDFkY2QwZDg6AgAC0A8="

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <namespaces> <namespace> <id>ns1</id> <link rel="self" href="/object/namespaces/namespace/ns1"/> <names>ns1</name> </namespace></namespaces>

使用 cookie 进行认证此示例展示了如何通过保存成功身份验证请求中的 cookie 然后将其传入后续请求来使用身份验证令牌。

在此示例中,使用 ?using-cookies=true 参数来指示您希望在接收正常的 HTTP标头的同时接收 cookie。这个 Curl 命令将身份验证令牌保存到当前目录下名为cookiefile 的文件。

curl -L --location-trusted -k https://<ECS_IP>:4443/login?using-cookies=true -u "root:Password" -c cookiefile -v

ECS 管理 REST API

不使用 cookie 进行身份验证 107

Page 108: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

下一个命令通过 Curl 命令 -b 开关传递包含身份验证令牌的 cookie,并返回用户的租户信息。

curl -k https://10.247.100.247:4443/object/namespaces -b cookiefile -v

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <namespaces> <namespace> <id>ns1</id> <link rel="self" href="/object/namespaces/namespace/ns1"/> <names>ns1</name> </namespace></namespaces>

注销注销 API 结束会话。

每个用户 多允许有 100 个并发身份验证标记。超过此限制时,系统将拒绝用户的任何新连接,直到标记释放。令牌可以通过自然到期释放,也可以通过发出以下 ECSAPI 调用进行释放:

GET https://<ECS_IP>:4443/logout

如果您有多个同时运行的会话,以下 API 调用将强制终止与当前用户相关的所有标记。

GET https://<ECS_IP>:4443/logout?force=true

以下示例显示了注销请求。传入标头或 cookie 中的身份验证标记以注销。

GET https://<ECS_IP>:4443/logout

X-SDS-AUTH-TOKEN:{Auth_Token}

响应内容应为 HTTP 200。

ECS Management REST API whoami 命令ECS 用户可以使用 whoami API 调用查看自己的用户名、租户关联和角色。

请求

GET https://<ECS_IP>:4443/user/whoami

以下响应展示了 root 用户以及分配有 ns1 命名空间的 NAMESPACE_ADMIN 角色的用户的 whoami 输出。

响应

HTTP 200

GET /user/whoami

ECS 管理 REST API

108 Elastic Cloud Storage (ECS) 3.1 数据访问指南

Page 109: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

<user> <common_name>root</common_name> <distinguished_name/> <namespace/> <roles> <role>SYSTEM_ADMIN</role> </roles></user>

HTTP 200

GET /user/whoami<user> <common_name>[email protected]</common_name> <distinguished_name/> <namespace>ns1</namespace> <roles> <role>NAMESPACE_ADMIN</role> </roles></user>

ECS Management REST API 摘要ECS 管理 REST API 可用于配置和管理 ECS 对象存储区域。

下表汇总了 ECS 管理 REST API。

表 23 ECS 管理 REST API— 方法汇总

API 区域 描述

“配置”

Certificate /object-cert用于管理证书的 API。

/object-cert/keystore用于指定和循环 ECS 所用的证书链的 API。

ConfigurationProperties

/config/object/properties用于将用户范围设置为 GLOBAL 或 NAMESPACE 的 API。必须在创建第一个用户之前进行此设置。默认值为 GLOBAL。

在 GLOBAL 范围中,用户是全局的,可以在命名空间之间共享。在这种情况下,与用户关联的默认命名空间决定对象操作的命名空间,不需要为操作提供命名空间。在 NAMESPACE 范围中,用户与命名空间相关联。在这种情况下,可能有多个具有相同名称的用户,每个用户与不同的命名空间关联并且必须为每个操作提供命名空间。

Licensing /license用于添加许可证以及检索许可证详细信息的 API。

功能 /feature/用于检索功能详细信息的 API。

Syslog /vdc/syslog/config用于管理系统日志配置并将警报发送到系统日志服务器以进行故障排除和调试的 API。

ECS 管理 REST API

ECS Management REST API 摘要 109

Page 110: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

表 23 ECS 管理 REST API— 方法汇总 (续)

API 区域 描述

SNMP /vdc/snmp/config用于管理 SNMP 配置并将警报发送到 SNMP 服务器以进行故障排除和调试的 API。

“CAS”

CAS user profile /object/user-cas用于将密钥分配给 CAS 用户以及生成池条目授权 (PEA) 的 API。

“文件系统访问”

NFS /object/nfs支持基于 ECS 存储区创建 NFS 导出以及支持 UNIX 用户和组访问导出的 API。

“Metering”

记帐 /object/billing用于在租户和存储区级别计量对象存储使用情况的 API。

“迁移”

转换 /object/transformation用于支持数据转换的 API。

“监视”

Capacity /object/capacity用于检索当前托管容量的 API。

“控制面板”

Alerts /vdc/alerts用于检索审核警报的 API。

Events /vdc/events用于返回指定命名空间审核事件的 API。

“多租户”

Namespace /object/namespaces用于创建和管理命名空间的 API。

此 API 还可为命名空间设置保留期。有关保留期的详细信息,请参见ECS 支持站点上提供的《ECS 管理指南》。

“异地复制”

Replication Group /data/data-service/vpools用于创建和管理复制组的 API。

Temporary FailedZone

/tempfailedzone/用于检索所有临时故障分区或指定复制组的临时故障分区的 API。

ECS 管理 REST API

110 Elastic Cloud Storage (ECS) 3.1 数据访问指南

Page 111: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

表 23 ECS 管理 REST API— 方法汇总 (续)

API 区域 描述

“资源调配”

基本 URL /object/baseurl用于创建基本 URL 以使现有应用程序能使用 ECS 对象存储区域的API。有关基本 URL 的详细信息,请参见 ECS 支持站点上提供的《ECS 管理指南》。

Bucket /object/bucket用于调配和管理存储区的 API。

/object/bucket/{bucketName}/lock用于锁定存储区访问的 API。

数据存储区 /vdc/data-stores用于在文件系统 (/vdc/data-stores/filesystems) 或商用节点 (/vdc/data-stores/commodity) 上创建数据存储区的API。

Node /vdc/nodes用于检索当前为群集配置的节点的 API。

Storage pool /vdc/data-services/varrays用于创建并管理存储池的 API。

Virtual data center /object/vdcs用于添加 VDC 以及指定其 VDC 间端点和密钥用于 ECS 站点间的数据复制的 API。

VDC keystore /vdc/keystore用于管理 VDC 的证书的 API。

“支持”

Call Home /vdc/callhome/用于管理 ESRS 配置并向 ConnectEMC 发送警报的 API。

CLI package /cli用于下载 ECS CLI 程序包的 API。

“用户管理”

身份认证提供程序 /vdc/admin/authproviders用于添加和管理身份验证提供程序的 API。

Password Group(Swift)

/object/user-password用于生成与 OpenStack Swift 身份验证一起使用的密码的 API。

Secret Key /object/user-secret-keys用于将密钥分配给对象用户以及管理密钥的 API。

ECS 管理 REST API

ECS Management REST API 摘要 111

Page 112: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

表 23 ECS 管理 REST API— 方法汇总 (续)

API 区域 描述

Secret key self-service

/object/secret-keys支持 S3 用户创建新密钥的 API;使用这些新密钥可以访问用户在对象存储区域中的命名空间中的对象和存储区。

User (Object) /object/users用于创建和管理对象用户的 API。对象用户始终与命名空间关联。该API 返回可用于 S3 访问的密钥。分配有 S3 密钥的对象用户可以使用REST API 更改它。

/object/users/lock.

用于锁定用户的访问权限的 API。

/object/users/{userName}/tags.

用于将标签与用户 ID 关联的 API。标签采用名称-值对形式。

User (management) /vdc/users用于创建和管理用户的 API。可以向管理用户分配系统管理员角色或命名空间管理员角色。您可以使用此 API 更改本地管理用户密码。

ECS 管理 REST API

112 Elastic Cloud Storage (ECS) 3.1 数据访问指南

Page 113: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

第 6 部分

HDFS

第 6 章, "ECS HDFS 简介"

第 7 章, "配置简单的 Hadoop 群集与 ECS HDFS 之间的集成"

第 8 章, "使用 ECS HDFS 配置 Kerberized Hadoop 群集 l"

第 9 章, "故障排除"

第 10 章, "附录:有关 Kerberos 配置的指导"

第 11 章, "附录:ECS HDFS 的 Hadoop core-site.xml 属性"

第 12 章, "附录:安全存储区元数据示例"

HDFS 113

Page 114: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

HDFS

114 Elastic Cloud Storage (ECS) 3.1 数据访问指南

Page 115: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

第 6 章

ECS HDFS 简介

l ECS HDFS 简介.................................................................................................116l 配置 Hadoop 以使用 ECS HDFS ....................................................................... 117l Hadoop 身份验证模式....................................................................................... 117l 从简单群集迁移到 Kerberos Hadoop 群集........................................................ 120l 文件系统交互.................................................................................................... 121l 支持的 Hadoop 应用程序...................................................................................121

ECS HDFS 简介 115

Page 116: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

ECS HDFS 简介ECS HDFS 是 Hadoop 兼容文件系统 (HCFS),支持您基于 ECS 存储基础架构运行Hadoop 2.x 应用程序。

当使用 ECS HDFS 时,Hadoop 分发软件配置为针对 ECS HDFS,而不是内置的Hadoop 文件系统进行运行。下图揭示了 ECS HDFS 如何与现有的 Hadoop 群集相集成。

图 10 在 Hadoop 群集中集成 ECS HDFS

Hadoop Cluster

ResourceManager

Hadoop Client

ECS Client Library

Node Manager

MapReduce Task

Appliance Software

MapReduce Request

Node Manager

MapReduce Task

Node Manager

MapReduce Task

ECS nodes

ECS nodes

ECSnodes

ECS Client Library ECS Client Library

在配置为使用 ECS HDFS 的 Hadoop 环境中,每个 ECS 节点用作传统的 HadoopNameNode 和 DataNode,这意味着所有 ECS 节点均能接收 HDFS 请求并进行响应。

当您设置 Hadoop 客户端以使用 ECS HDFS,而非传统 HDFS 时,配置将指向 ECSHDFS 来执行所有 HDFS 活动。在每个 ECS HDFS 客户端节点上,任何传统 Hadoop组件都将使用 ECS 客户端库(ViPRFS JAR 文件)来执行 HDFS 活动。

要将 ECS HDFS 与现有 Hadoop 环境集成,您必须执行以下操作:

l 已经安装和配置 Hadoop 群集。支持以下分发软件:

ECS HDFS 简介

116 Elastic Cloud Storage (ECS) 3.1 数据访问指南

Page 117: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

n Hortonworks HDP 2.5

l 已安装和配置 Hadoop 群集以支持 ECS HDFS,这需要:

n 启用文件系统的存储区,以用于 HDFS 访问。

每个 Hadoop 群集仅支持一个存储区并且 ECS HDFS 必须是默认文件系统。

n 部署到群集的 ECS 客户端库。l 使用 Kerberos 或将 Kerberos 与 Active Directory 结合使用的 Hadoop 群集。

n 部署到 ECS 群集的 Kerberos 配置文件和服务主体密钥表文件。n 部署到该存储区的安全元数据。

配置 Hadoop 以使用 ECS HDFSHadoop 在多个文件中存储系统配置信息,其中包括 core-site.xml、hdfs-site.xml 和 hive-site.xml。ECS HDFS 配置需要您编辑 core-site.xml。

您必须在 core-site.xml 文件中添加或修改若干种属性,包括:

l ECS HDFS Java 类:这组属性可定义 ECS HDFS 客户端库中包含的 ECS HDFS 实施类。

l 文件系统位置属性:这些属性定义在运行 Hadoop 作业时要使用的文件系统 URI(方案和授权),以及针对特定 ECS 文件系统的 ECS 数据节点的 IP 地址或FQDN。

l Kerberos 域和服务主体属性:仅在存在 Kerberos 的 Hadoop 环境中才需要这些属性。这些属性映射 Hadoop 和 ECS HDFS 用户。

core-site.xml 文件 驻留在 Hadoop 群集的各个节点上。必须为 core-site.xml的每个实例添加相同的属性。

当修改配置文件时,您应使用管理界面 (Ambari),而不是手动编辑文件。使用 Ambari管理界面所做的更改保留在整个群集中。

Hadoop 身份验证模式Hadoop 支持两种用于确定用户身份的不同操作模式,即简单和 Kerberos。

简单在简单模式下,客户端进程的身份由主机操作系统确定。在类似 Unix 的系统中,用户名称相当于 whoami。

Kerberos

在适用 Kerberos 的 Hadoop 环境中,客户端进程的身份由其 Kerberos 凭据确定。例如,您可以使用 kinit 应用工具来获取 Kerberos 票证授予票证 (TGT) 并使用klist 来确定其当前主体。使用 auth_to_local Hadoop 属性将 Kerberos 主体映射到 HDFS 用户名时,除主组件以外的所有组件都会被丢弃。例如,主体todd/[email protected] 将用作 HDFS 上的简单用户名 “todd”。

ECS HDFS 与配置为使用简单或 Kerberos 身份认证模式的 Hadoop 群集相集成。

当 Hadoop 群集使用 Kerberos 时,您可将 ECS 配置为向采用 Kerberos 主体的用户授予访问权限(形式为 [email protected]),或者,如果 ECS 使用 AD 对用户进行身

ECS HDFS 简介

配置 Hadoop 以使用 ECS HDFS 117

Page 118: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

份验证,可以在 Kerberos 环境和 AD 之间配置单向信任,以便用户能够使用其 AD 凭据进行身份验证(形式为 [email protected])。

新创建的文件和目录的权限通过 umask (fs.permissions.umask-mode) 进行限制。建议的 umask 是 022。

作为文件系统访问存储区HDFS 文件系统存储由 ECS 存储区提供。在创建存储区时,您必须在 ECS 中配置存储区,以使其可用作文件系统。

ECS(通过 ECS 客户端库)将使用根据存储区配置的权限以及 Hadoop core-site.xml 文件中的设置来确定对根文件系统(存储区)的访问权限。您必须确保自己配置了足够的权限,以支持 Hadoop 用户和服务在存储区中创建文件和目录。

一般情况下,必须通过存储区 ACL 来允许所有文件和目录操作。此外,存储区中的各个文件和目录对象都有自己的对象 ACL,并且还必须通过对象 ACL 允许所有对象操作。如果对象操作不能满足存储区 ACL,此操作将被拒绝。如果对象操作不能满足对象 ACL,此操作将被拒绝。

例外情况是,始终允许在 hdfs-site.xml 中定义的存储区所有者以及 Hadoop 超级组的 Hadoop 超级用户和成员执行任何文件系统操作,而不考虑存储区和对象 ACL。

您可以通过在存储区上为每个用户明确添加用户 ACL 或指定自定义组 ACL 来设置存储区 ACL。有关详细信息,请参见存储区自定义组 ACL 和默认组(第 118 页)。存储区所有者必须是 ECS 对象用户。其他用户不需要是 ECS 对象用户,并且可以是 Hadoop群集中的 Unix 用户名。

更多的例外情况是,不同于正常的 ECS 存储区,启用文件系统的 ECS 存储区具有一个代表根目录的特殊对象和分别用于每个目录的特殊对象。在启用文件系统的新存储区中不存在的根目录不具有根目录对象,但在存储区上执行第一次文件系统操作时将创建根目录对象。如果存在此类根目录对象,一些 ECS HDFS API 调用将不会执行存储区 ACL 检查。

要确保一致的权限,而不考虑 API 调用,应确保根目录对象 ACL 复制数据存储区ACL。

用户具有文件系统访问权限后,他们创建的文件和目录的权限由 core-site.xml 文件中的 umask 属性确定。

存储区自定义组 ACL 和默认组您可根据用户 ACL 或通过分配自定义组 ACL 来启用对存储区的访问。自定义组是Hadoop 群集上定义的用户组的名称,并支持用户使用 HDFS 访问存储区。

在 Hadoop 群集上定义的典型组包括 hdfs(包含用户 hdfs)、hadoop(通常包括所有服务用户)和 users(包括访问 Hadoop 群集上的应用程序的其他非服务用户)。您可以在 ECS 门户中创建相应的组并向其分配权限。

也可为存储区分配《默认组》。默认组将是分配到根目录 (/) 文件系统的组。例如,如果存储区所有者是 hdfs 且默认组设置为 hadoop,则“/”将设置为 hdfs:hadoop以分别作为用户和组。默认组也是自定义组,并且显示在自定义组 ACL 列表中。

如果未定义默认组,则文件系统的根目录中没有组,如以下示例所示。

drwx---rwx+ - hdfs 0 2015-12-09 12:30 /

ECS HDFS 简介

118 Elastic Cloud Storage (ECS) 3.1 数据访问指南

Page 119: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

如果定义了 hadoop 的默认组,将显示所有权和权限,如以下示例所示。

drwxrwxrwx+ - hdfs hadoop 0 2015-12-09 12:28 /

根目录中创建的目录不会继承这些权限。

如果未分配默认组,则存储区所有者(根文件系统的所有者)在使用 hdfs dfs -chgrp 和 hdfs dfs -chmod 命令从 Hadoop 访问 HDFS 时可分配一个组。

Hadoop 超级用户和超级组

在 Hadoop 环境中的超级用户是启动 namenode 的用户,通常是 hdfs 或[email protected]。在 ECS HDFS 配置中,超级用户是存储区所有者。因此,如果您希望 Hadoop 超级用户拥有对 ECS 存储区的超级用户访问权限,则在使用 ActiveDirectory 对 Hadoop 环境中的用户进行身份验证时,应确保存储区归 hdfs、[email protected][email protected] 所有。

为了确保 Hadoop 客户端具有超级用户访问权限,您还可以使用 core-site.xml 文件中的 dfs.permissions.superusergroup 属性配置超级用户组。在简单模式下,通过选中 Hadoop 属性 dfs.permissions.supergroup 的值在客户端上进行检查,以确定用户是否是超级用户组的成员。在 Kerberos 模式下,可以在 ECS 服务器上执行检查,以确定用户是否为超级组成员。

通常,当存储区配置为由 Hadoop 超级用户或 Hadoop 超级用户组访问时,超级用户将拥有存储区的完整(读取和写入)访问权限。不具备超级用户权限的用户通常具有读取访问权限,但也取决于存储区的创建方式。要获得存储区访问权限,用户不必是ECS 对象用户。名称必须与 Unix 本地、Kerberos 或 AD 用户匹配(具体取决于使用的身份验证模式)。

佳做法是,确保 hdfs 用户或 hdfs 主体是存储区所有者(超级用户)或超级用户组成员。

多协议(跨标头)访问ECS 支持使用 S3 协议将数据写入存储区,并通过 HDFS 将该数据作为文件提供。

多协议访问(也称跨标头访问)意味着使用 S3 协议写入存储区的对象可成为 Hadoop作业的主题,例如 MapReduce。同样,由 HDFS 写入的目录和文件也可使用 S3 客户端进行读取和修改。

为了让使用 S3 写入的数据能够作为文件进行访问,存储区管理员可在存储区上设置默认组,并可为属于该组的文件和目录设置默认权限。通过 S3 创建对象时,将向这些对象分配默认的 Unix 组,因此,这些对象不仅拥有一个所有者,还拥有能够从 Hadoop群集启用 HDFS 访问的组成员身份和组权限。

使用 HDFS 创建并使用 S3 协议访问的文件将不会受默认权限影响,只有当使用 S3 协议创建对象时,这些权限才适用。

代理用户ECS HDFS 支持使用 Hadoop 代理用户。

代理用户允许 Hadoop 用户代表其他用户提交作业或访问 HDFS。代理用户功能可与UNIX/Linux“有效用户”功能媲美,如果以一个用户的身份运行命令,则可采用可执行文件上的权限设置所识别到的另一个用户的身份。

您可按每个命名空间(或每个存储区)为安全模拟配置代理用户。简单模式和Kerberos 模式中支持代理用户。在任一模式下,管理员均可使用hadoop.proxyuser.*.* 属性限制代理模拟。

ECS HDFS 简介

Hadoop 超级用户和超级组 119

Page 120: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

对等用户ECS 将三个部分主体转换为两个部分主体。

Kerberos 主体通常采用 primary/instance@realm 格式,但是实例不是必需的,因此 primary@realm 主体适用于域中所有主机。如果已指定实例,则可将其用于指定特定的主机,例如 joe/[email protected] 或 joe/[email protected]。这两个主体针对相同主用户 (joe),但目标只是为了在主机(host1 或 host2)上获得身份认证。

推荐使用此类型的用户主体,以提供增强的安全级别。从 ECS 角度来看,每个主体都必须添加到 ECS。这会变得非常繁琐,因此 ECS 对等用户功能可以使用包含两个部分的主体 (primary@realm) 来执行 ECS 授权,即使正在使用包含三个部分的主体也是如此。

从简单群集迁移到 Kerberos Hadoop 群集ECS 支持从简单的 Hadoop 环境迁移到受 Kerberos 保护的 Hadoop 环境。

当 ECS HDFS 与使用简单安全性的 Hadoop 环境集成时,由 Hadoop 用户和进程创建的文件和目录将归非安全用户所有。如果您随后迁移 Hadoop 群集以使用 Kerberos 安全性,则那些用户将无法再访问写入 ECS HDFS 中的文件和目录。

ECS 提供了一项内置迁移功能,借助该功能,您可为 ECS 提供短名称与 Kerberos 主体之间的映射,以便非安全短名称所拥有的文件能够作为映射的 Kerberos 主体进行访问。

如果只有少量由短名称用户写入的文件,您可能想要更改这些文件(使用 chown 命令),使这些文件归 Kerberos 主体所有。但是,如果您拥有大量文件,迁移功能则意味着您无需更改文件的所有权。

此功能不会针对存储区实施,因此,如果您依赖于用户访问,则必须更改存储区 ACL以允许 Kerberos 主体进行访问。但是,如果您使用组成员身份作为启用访问的主要方法,则不必更改存储区 ACL。

ECS 允许使用组来简化存储区、文件和目录的访问。组始终使用 UNIX 简单名称,因此从简单或 Kerberized 群集访问存储区、文件或目录时,与其相关联的组名称将会相同。通过一个简单的环境访问时,从 UNIX 计算机中确定组成员身份。从 Kerberized群集访问时,您可以通过分配映射来配置组成员身份。有关映射组名称的信息,请参阅映射组名称(第 140 页)。

在使用 AD 凭据时,通过删除域后缀来实现 AD 主体与 UNIX 主体之间的映射,因此用户 [email protected] 变为 hdfs。这不如使用 Kerberos 主体映射时那样灵活,Kerberos 主体映射允许从 [email protected] 到 hdfs 等映射。

将组用于 AD 时,必须已经在 ECS 中配置身份认证提供程序,以便能够检查组的成员身份。

Hadoop Kerberos 身份认证模式将 Kerberos 与 ECS AD 服务器集成后,Kerberos 域可提供单一用户命名空间,以便使用 kinit 进行身份验证的 Hadoop 用户可以被识别为获得凭据的 ECS 用户。

对于在 Kerberos 模式下运行的 Hadoop 群集,必须存在从 Kerberos 域到 AD 域的单向跨域信任,以用于对 ECS 用户进行身份验证。

core-site.xml 文件中的以下身份转换属性用于确保正确的 Hadoop 到 ECS 用户转换:

l fs.permissions.umask-mode:将该值设置为 022。

ECS HDFS 简介

120 Elastic Cloud Storage (ECS) 3.1 数据访问指南

Page 121: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

l fs.viprfs.auth.anonymous_translation:将值设置为 CURRENT_USER。

l fs.viprfs.auth.identity_translation:将该值设置为CURRENT_USER_REALM,以便自动检测用户域。

此外,还必须在 core-site.xml 文件中设置以下属性以定义服务主体:

l viprfs.security.principal:vipr/[email protected],其中REALM.COM 应替换为您的 Kerberos 域名称。

文件系统交互当您直接与 ECS HDFS 进行交互时,您可能注意到与标准 HDFS 文件系统的交互有以下不同之处:

l 期望文件系统是 DistributedFileSystem 的应用程序无法正常运行。经过硬编码以针对内置 HDFS 实施运行的应用程序需要更改,才能使用 ECS HDFS。

l ECS HDFS 不支持数据的校验和。l 当您使用 listCorruptFileBlocks 函数时,所有数据块都报告为“正常”,因为 ECS

HDFS 没有损坏块这种概念。l 复制因子始终报告为常量 N,其中 N=1。数据由 ECS SLA 而非 Hadoop 复制进行

保护。

支持的 Hadoop 应用程序ECS HDFS 支持 Hadoop 生态系统中大多数应用程序。

支持 Hadoop 生态系统中的以下应用程序:

l YARN

l MapRedeuce

l Pig

l Hive

l Spark

l Zookeeper

l Ambari

l Sqoop

l Flume

ECS HDFS 简介

文件系统交互 121

Page 122: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

ECS HDFS 简介

122 Elastic Cloud Storage (ECS) 3.1 数据访问指南

Page 123: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

第 7 章

配置简单的 Hadoop 群集与 ECS HDFS 之间的集成

l 将简单的 Hadoop 群集与 ECS HDFS 相集成.....................................................124l 使用 Ambari 安装 Hortonworks HDP.................................................................124l 使用 ECS 门户为 HDFS 创建存储区..................................................................126l 计划 HDFS 和 Hadoop 集成.............................................................................. 132l 获取 ECS HDFS 安装和支持包..........................................................................132l 部署 ECS HDFS 客户端库................................................................................. 133l 配置 ECS 客户端属性....................................................................................... 133l 设置 Hive.......................................................................................................... 135l 验证对 ECS 的 Hadoop 访问权限......................................................................136l 保护存储区....................................................................................................... 136l 将默认文件系统从 HDFS 重新定位到 ECS 存储区............................................ 137

配置简单的 Hadoop 群集与 ECS HDFS 之间的集成 123

Page 124: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

将简单的 Hadoop 群集与 ECS HDFS 相集成您可以配置 Hadoop 分发软件,以便结合使用 ECS 存储基础架构和 ECS HDFS。

要执行此集成过程,您必须具有:l 有关 Hadoop 分发软件及其关联工具的应用知识。l 允许您登录 Hadoop 节点、修改 Hadoop 系统文件以及启动和停止 Hadoop 服务的

Hadoop 凭据。

必须执行以下步骤:

1. 使用 Ambari 安装 Hortonworks HDP(第 124 页)2. 使用 ECS 门户为 HDFS 创建存储区(第 126 页)3. 计划 HDFS 和 Hadoop 集成(第 132 页)4. 获取 ECS HDFS 安装和支持包(第 132 页)5. 部署 ECS HDFS 客户端库(第 133 页)(如果您已将 Ambari Hortonworks 用于

ECS,则无需执行)6. 配置 ECS 客户端属性(第 133 页)7. 验证对 ECS 的 Hadoop 访问权限(第 136 页)8. 将默认文件系统从 HDFS 重新定位到 ECS 存储区(第 137 页)

配置完成后,Hadoop 群集的默认文件系统中的文件将映射到 ECS 存储区中的文件。例如,默认文件系统上的 /foo/bar 将映射到 viprfs://<bucket_name>.<namespace>.<federation_name>/foo/bar。

使用 Ambari 安装 Hortonworks HDP安装 Ambari 服务器,并使用它安装 Hortonworks HDP。

本过程提供有关安装和设置 Ambari 服务器的基本命令。有关如何安装 Ambari 服务器的详细信息,请参见 Hortonworks 文档。过程

1. 下载 Ambari 存储库。

wget -nv http://public-repo-1.hortonworks.com/ambari/centos7/2.x/updates/2.4.2.0/ambari.repo -O /etc/yum.repos.d/ambari.repo

2. 安装 Ambari 服务器。

yum install -y ambari-server

3. 设置 Ambari 服务器。

ambari-server setup -s

4. 启动 Ambari 服务器。

ambari-server start

配置简单的 Hadoop 群集与 ECS HDFS 之间的集成

124 Elastic Cloud Storage (ECS) 3.1 数据访问指南

Page 125: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

5. 浏览到 http://ambari.example.com:8080/

6. 在“Select Stack”页面上,选择 Hadoop 版本 HDP 2.5,然后选择操作系统版本。

7. 选择您要启用的 Hadoop 服务,如下面的示例所示:

8. 完成安装向导。

配置简单的 Hadoop 群集与 ECS HDFS 之间的集成

使用 Ambari 安装 Hortonworks HDP 125

Page 126: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

使用 ECS 门户为 HDFS 创建存储区使用 ECS 门户创建为与 HDFS 结合使用而配置的存储区。

准备工作

确保您分配有命名空间管理员或系统管理员角色。如果您是命名空间管理员,可以在您的命名空间中创建存储区。如果您是系统管理员,可以创建属于任何命名空间的存储区。

您必须确保 Hadoop 用户和服务有权访问 HDFS 文件系统(存储区),并且文件和目录可供相应用户和组访问。您可通过以下方法之一来实现:

l 让存储区所有者与 Hadoop 超级用户相同,通常为 hdfs 或 [email protected]

l 通过组成员身份启用对存储区的访问:

n 将默认组分配给存储区。这将自动分配自定义组 ACL。n 创建存储区之后,为需要访问的任何其他组添加自定义组 ACL。

l 通过向存储区添加用户 ACL 启用个人访问权限。l 确保需要拥有对 HDFS 的超级用户访问权限的 Hadoop 用户是 Hadoop 超级组的一

部分。

如果要从 HDFS 访问使用对象协议写入存储区的对象数据,您应确保已向该存储区分配默认组,并为该组设置默认文件和目录权限。

有关用户和权限的更多信息,请参见 作为文件系统访问存储区(第 118 页)和 Hadoop和 ECS 存储区权限示例(第 130 页)。

过程

1. 在 ECS 门户中,选择“Manage” > “Buckets” > “New Bucket”。

2. 在“New Bucket”页面上,在“Name”字段中,输入存储区的名称。

不要在存储区名称中使用下划线,因为 URI Java 类不支持。例如,viprfs://my_bucket.ns.site/ 不会工作,因为这是一个无效的 URL,因而 Hadoop无法理解。

3. 在“Namespace”字段中,选择存储区所属的命名空间。

4. 在“Replication Group”字段中,选择复制组或将此字段留空,以将默认复制组用于命名空间。

5. 在“Bucket Owner”字段中,键入存储区所有者的名称。

对于 HDFS 存储区,存储区所有者通常是 hdfs;对于 Kerberos 存储区,通常是 [email protected]。Hadoop hdfs 用户需要 HDFS 的超级用户权限,可以通过让 hdfs 成为存储区所有者来获得此权限。其他 Hadoop 用户也可能需要超级用户权限,可以通过将用户分配到组并让该组成为超级用户组来授予这些权限。

6. 不要启用 “CAS”。

旨在用作 HDFS 的存储区无法用于 CAS。启用“File System”字段时,“CAS”字段会禁用。

配置简单的 Hadoop 群集与 ECS HDFS 之间的集成

126 Elastic Cloud Storage (ECS) 3.1 数据访问指南

Page 127: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

7. 启用您所需的任何其他存储区功能。

您可在 HDFS 存储区上启用以下功能:

l 配额l Server-side Encryption

l Metadata Search

l Access During Outage

l 法规遵从性(请参见备注)l Bucket Retention

有关这些设置及其配置方法的信息,请参阅 ECS 支持站点上提供的《ECS 管理指南》。

无法使用 HDFS 协议写入到已启用法规遵从性的存储区。但是,可以从 HDFS读取使用对象协议写入的数据。

8. 在“File System”字段中,选择“Enabled”。

启用之后,为文件系统/存储区设置默认组以及为存储区中创建的文件和目录分配组权限的字段将可用。下面的示例中显示了这些字段。

9. 在“Default Bucket Group”字段中,键入默认存储区组的名称。

该组是与 HDFS 根文件系统关联的组,支持作为该组成员的 Hadoop 用户访问HDFS。

该组可以是您访问 HDFS 上的数据需要的服务所属的组(如 hdfs 或hadoop),但组名称可以是对您的 Hadoop 配置有意义的任何名称。例如,管理员可能需要将所有 S3 文件上载到存储区以分配给组 S3DataUsers。然后,所有 S3 文件都将分配有该组。在 Hadoop 节点上,Hadoop 管理员将拥有作为S3DataUsers 组成员的用户。S3DataUsers 可以是 Linux 组或 AD 组。当Hadoop 用户想要访问 S3 数据时,他们能够这样做,因为文件已上载并分配到该组。

您必须在创建存储区时指定默认组。否则,稍后文件系统所有者必须从 Hadoop分配该组。

配置简单的 Hadoop 群集与 ECS HDFS 之间的集成

使用 ECS 门户为 HDFS 创建存储区 127

Page 128: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

10. 在“Group File Permissions”和“Group Directory Permissions”字段中,为在存储区中使用对象协议创建的文件和目录设置默认权限。

您使用这些设置将 UNIX 组权限应用到使用对象协议创建的对象。通过 Hadoop列出对象或目录时,这些权限将应用到 HDFS 组(默认存储区组)。有关为文件系统设置默认组和权限的详细信息,请参见多协议(跨标头)访问(第 119页)。

a. 在“Group File Permissions”字段中,选择相应的权限按钮。您通常将设置“Read”和“Execute”权限。

b. 在“Group Directory Permissions”字段中,选择相应的权限按钮。您通常将设置“Read”和“Execute”权限。

11. 单击“Save”以创建存储区。

设置自定义组存储区 ACL您可以在 ECS 门户中为存储区设置一组 ACL,并且您可以为一组用户(自定义组ACL)、单个用户或两者的组合设置存储区 ACL。例如,您可向一组用户授予完整的存储区访问权限,但也可限制(或甚至拒绝)该组中单个用户对存储区的访问。

准备工作

l 此操作需要 ECS 中的系统管理员或命名空间管理员角色。l 系统管理员可以编辑任何命名空间中的存储区的组 ACL 设置。l 命名空间管理员可以编辑自己是管理员的命名空间中的存储区的组 ACL 设置。

自定义组 ACL 能够定义组并向该组分配权限。向存储区分配组的主要使用情形是支持以文件系统的形式访问存储区,例如,让存储区可供 NFS 或 HDFS 使用。

存储区作为文件系统(使用 NFS 或 HDFS)访问时,UNIX 组的成员可以访问存储区。

过程

1. 在 ECS 门户中,选择“Manage” > “Buckets”。

2. 在“Bucket Management”页面上,在表中找到您想要编辑的存储区并选择“Edit ACL”操作。

3. 单击“Custom Group User ACLs”以设置自定义组的 ACL

4. 单击“Add”。

此时将显示“Edit Custom Group”页面,如下面的屏幕截图所示。

配置简单的 Hadoop 群集与 ECS HDFS 之间的集成

128 Elastic Cloud Storage (ECS) 3.1 数据访问指南

Page 129: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

5. 在“Edit Custom Group”页面的“Custom Group Name”字段中,为组键入名称。

此名称可以是 UNIX/Linux 组,或者 Active Directory 组。

6. 为组设置访问权限。

您至少需要分配“Read”、“Write”、“Execute”和“Read ACL”权限。

7. 单击“Save”。

设置用户存储区 ACL在 ECS 门户中,您可以为存储区设置用户 ACL。ECS 将自动为存储区所有者分配权限。您可以向其他 Hadoop 用户分配用户 ACL,以使这些用户能够访问存储区/文件系统,或者他们也可通过成为已分配自定义组 ACL 的组成员来获得存储区的访问权限。

准备工作

l 您必须是 ECS 命名空间管理员或系统管理员才能编辑存储区的 ACL。l 如果您是命名空间管理员,则可编辑属于您的命名空间的存储区的 ACL 设置。l 如果您是系统管理员,则可编辑属于任何命名空间的存储区的 ACL 设置。

过程

1. 在 ECS 门户中,选择“Manage” > “Buckets”。

2. 在“Bucket Management”页面上,在表中找到您想要编辑的存储区并选择“Edit ACL”操作。

3. 在“Bucket ACLs Management”页面上,确保“User ACLs”选项卡处于选中状态;此为默认设置。

配置简单的 Hadoop 群集与 ECS HDFS 之间的集成

设置用户存储区 ACL 129

Page 130: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

4. 在“User ACLs” 选项卡上,您可以编辑已经分配有权限的用户的权限也可以添加您希望为其分配权限的用户。

l 要设置(或删除)已有权限的用户的 ACL 权限,请从 ACL 表的“Action”列中选择“Edit”(或“Remove”)。

l 要添加您要为其分配权限的用户,请单击“Add”并键入权限将应用到的用户的用户名。指定要应用于用户的权限。

您已设置为存储区所有者的用户已经分配有默认权限。

下面示例中的存储区归 hdfs 用户所有,并且 hdfs(作为所有者)已被授予完全控制权限。在 Hadoop/UNIX 环境中,完全控制将转换为读取、写入和执行权限。用户 sally 已授予读取和执行权限,可访问存储区。

有关 ACL 权限的详细信息,请参见 ECS 支持站点上提供的《ECS 管理指南》。

5. 单击“Save”。

Hadoop 和 ECS 存储区权限示例在本主题中提供了示例,用于展示 Hadoop 用户/组与有权通过 ECS 用户 ACL 和自定义组 ACL 访问存储区的用户/组之间的关系。

创建存储区时,ECS 会自动向存储区所有者和默认组(使用 HDFS 进行访问时的存储区的组分配)分配 ACL。存储区必须始终具有所有者,但是存储区不需要分配的默认组。可以在存储区上为存储区所有者以外的用户和组(即,自定义组)分配 ACL。以这种方式分配的 ACL 将转换为 Hadoop 用户的权限。

表 24 简单 Hadoop 群集中关于文件系统访问的存储区权限示例

Hadoop 用户和组 存储区权限 存储区/文件系统访问权限

使用组 ACL 访问存储区

用户(服务)hdfs、mapred、yarn、hive、pig

用户(应用程序)sally、fred

组hdfs (hdfs)

存储区所有者hdfs

默认组

自定义组 ACL

hadoop、用户、hive、spark (Full Control)

必须在存储区上设置自定义组 ACL;在 ECS门户中,将存储区/根文件系统上的 FullControl 权限分配给 hadoop、users、hive和 spark 组。

此示例假定 hdfs 是超级用户(启动namenode 的用户)。

配置简单的 Hadoop 群集与 ECS HDFS 之间的集成

130 Elastic Cloud Storage (ECS) 3.1 数据访问指南

Page 131: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

表 24 简单 Hadoop 群集中关于文件系统访问的存储区权限示例 (续)

Hadoop 用户和组 存储区权限 存储区/文件系统访问权限

hadoop(hdfs、mapred、yarn、hive、pig)用户(sally、fred)

超级组hdfs

用户 ACL

hdfs(所有者)

由 s3 用户创建的存储区 — 跨标头访问

用户(服务)hdfs、mapred、yarn、hive、pig

用户(应用程序)sally、fred

组hdfs (hdfs)

hadoop(hdfs、mapred、yarn、hive、pig)用户(sally、fred)

超级组hdfs

存储区所有者s3user

默认组hadoop(组文件权限:Read、Write

组目录权限:Read、Write、Execute)

自定义组 ACL

hadoop(默认值)

用户 ACL

s3user(所有者)、sally、fred

如果您希望 s3 用户写入的对象能够与 HDFS中的文件采用相同的访问方式,则应定义默认组 (hadoop) 以便 Hadoop 用户和服务因组成员身份而具有对文件的访问权限。

默认组将在存储区/文件系统上自动具有自定义组 ACL。下面的示例显示了 hadoop 已设置默认组,并且根文件系统权限为 777:

drwxrwxrwx+ - s3user hadoop 0 2015-12-09 12:28 /

通过添加用户 ACL 或为用户所属的组添加自定义组 ACL,可以授予用户访问权限。

表 25 Kerberos Hadoop 群集中关于文件系统访问的存储区权限

Hadoop 用户 存储区权限 存储区/文件系统访问权限

用户(服务)[email protected][email protected][email protected][email protected][email protected]

用户(应用程序)[email protected][email protected][email protected]

组hdfs ([email protected])

hadoop([email protected][email protected][email protected][email protected][email protected]

存储区所有者[email protected]

默认组hadoop

自定义组 ACL

hadoop(默认)、用户

用户 ACL

[email protected](所有者)

在存储区上设置自定义组 ACL;在门户中,使hadoop 和 users 组拥有访问存储区/根文件系统的权限。

必须向 ECS 提供来自 Hadoop 群集的用户信息,以便能够实现对存储区的安全访问。此信息是使用存储区元数据提供的,并且在安全存储区元数据(第 172 页)中提供了元数据文件示例。

配置简单的 Hadoop 群集与 ECS HDFS 之间的集成

Hadoop 和 ECS 存储区权限示例 131

Page 132: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

表 25 Kerberos Hadoop 群集中关于文件系统访问的存储区权限

Hadoop 用户 存储区权限 存储区/文件系统访问权限

用户([email protected][email protected]

超级组hdfs

计划 HDFS 和 Hadoop 集成使用下表确认您具有所需信息,以确保成功集成。

表 26 ECS HDFS 配置前提条件

元素 执行的操作

Hadoop 群集 确认群集已安装并且可运行。

记录管理员凭据,以便之后在该过程中使用。

ECS 群集:ECS 节点 记录 ECS 节点 IP 地址,以便之后在该过程中使用。

ECS 群集:存储区 HDFS 要求在 ECS 复制组中创建为 HDFS 启用的存储区。通过使用命名空间和存储区名称,将存储区作为文件系统进行访问。

记录存储区的名称。

ECS 群集:租户命名空间

确认已经配置租户命名空间。记录名称。

获取 ECS HDFS 安装和支持包ECS HDFS 客户端库 和 HDFS 支持工具以 HDFS 客户端 ZIP 文件形式 (hdfsclient-<ECS version>-<version>.zip) 提供,您可从 support.emc.com 上的 ECS 支持页面进行下载。

该 ZIP 文件包含 /playbooks 和 /client 目录。在您解压缩该文件之前,请创建一个保留压缩内容的目录(解压缩工具可能会执行该操作),然后将内容解压缩到该目录。在解压缩文件之后,目录将包含以下内容:

l /playbooks:包含 Ansible 行动手册,用于配置与 ECS HDFS 通信所需的安全Hadoop 环境。

l /client:包含以下文件:

n ECS 客户端库 (ViPPRFS) JAR 文件 (viprfs-client-<ECS version>-hadoop-<Hadoop version>.jar):用于配置不同的 Hadoop 分发软件。

配置简单的 Hadoop 群集与 ECS HDFS 之间的集成

132 Elastic Cloud Storage (ECS) 3.1 数据访问指南

Page 133: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

部署 ECS HDFS 客户端库使用该过程将 ECS HDFS 客户端库 JAR 放置到 Hadoop 群集中每个客户端节点的类路径上。

准备工作从 ECS 支持页面获取适用于您的 Hadoop 分发软件的 ECS HDFS 客户端库,如获取ECS HDFS 安装和支持包(第 132 页)中所述。

HDFS 客户端库使用以下命名约定 viprfs-client-<ECS version>-hadoop-<Hadoop version>.jar,下表中列出了用于此版本的 JAR 文件。

表 27 ECS HDFS 客户端库

Hadoop 分发软件

版本 ECS HDFS JAR

Hortonworks HDP 2.5 viprfs-client-<ECS version>-hadoop-2.7.jar

l 在升级到更高版本的 ECS 时,您必须为已升级的版本部署 ECS HDFS 客户端库。

过程

1. 登录到具有对所有 Hadoop 节点的无密码 SSH 访问权限的节点。2. 运行类路径命令,以获取类路径中的目录列表:

# hadoop classpath3. 通过执行以下步骤向所有 Hadoop 节点部署客户端 JAR 文件:

a. 创建名为 masters 的文本文件,其中包含所有 Hadoop 主节点的 IP 地址或FQDN 的列表(每行一个)。

b. 创建名为 workers 的文本文件,其中包含所有 Hadoop 工作节点的 IP 地址或 FQDN 的列表(每行一个)。

c. 在所有节点上创建目录 /usr/lib/hadoop/lib。使用以下命令:

# cat masters workers | xargs -i -n 1 ssh root@{} mkdir -p /usr/lib/hadoop/lib

d. 使用以下命令将 ECS 客户端 jar 拷贝到所有节点:

cat masters workers | xargs -i -n 1 scp viprfs-client-3.1.0.0-hadoop-2.7.jar root@{}:/usr/lib/hadoop/lib/

配置 ECS 客户端属性您可以使用 Ambari 来设置 ECS 客户端所需的以下配置属性。

有关 core-site.xml 参数的详细信息,请参见 ECS HDFS 的 Hadoop core-site.xml属性(第 166 页)。

配置简单的 Hadoop 群集与 ECS HDFS 之间的集成

部署 ECS HDFS 客户端库 133

Page 134: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

表 28 用于启用 ECS 访问的 Hadoop 配置

Hadoop 位置 属性 值

core-site fs.viprfs.impl com.emc.hadoop.fs.vipr.ViPRFileSystem

fs.AbstractFileSystem.viprfs.impl com.emc.hadoop.fs.vipr.ViPRAbstractFileSystem

fs.viprfs.auth.identity_translation NONE

fs.viprfs.auth.anonymous_translation LOCAL_USER

fs.vipr.installations 可以是任意名称,如 federation1 并且将被称为$FEDERATION。如果您有多个独立的 ECS 联合,请输入以逗号分隔的多个值。

fs.vipr.installation.$FEDERATION.hosts 在本地站点中每台 ECS 主机的 FQDN 或 IP 地址的逗号分隔的列表

fs.vipr.installation.$FEDERATION.hosts.resolution dynamic

fs.vipr.installation.$FEDERATION.resolution.dynamic.time_to_live_ms

900000

hdfs-site fs.permissions.umask-mode 022

yarn-site yarn.application.classpath 附加以下命令:

/usr/lib/hadoop/lib/*

mapred-site mapreduce.application.classpath 附加以下命令:

/usr/lib/hadoop/lib/*

tez-site tez.cluster.additional.classpath.prefix 附加以下命令:

/usr/lib/hadoop/lib/*

HDFS hadoop-env template 附加以下命令:

export HADOOP_CLASSPATH=${HADOOP_CLASSPATH}:/usr/lib/hadoop/lib/*

Spark spark-env template 附加以下命令:

export SPARK_DIST_CLASSPATH="${SPARK_DIST_CLASSPATH}:/usr/lib/

配置简单的 Hadoop 群集与 ECS HDFS 之间的集成

134 Elastic Cloud Storage (ECS) 3.1 数据访问指南

Page 135: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

表 28 用于启用 ECS 访问的 Hadoop 配置 (续)

Hadoop 位置 属性 值

hadoop/lib/*:/usr/hdp/current/hadoop-client/client/guava.jar"

设置 Hive此过程中提供了配置 Hive 所需的其他步骤。

准备工作

当使用 Hive 时,您还应当确保的 Hive Metastore 仓库定向到的 ViPRFS 位置。假设mysql 用于标识 Hive Metastore 位置,请启动 mysql,转到 Hive 数据库,然后显示DBS 表的内容和并按如下所示设置。

过程

1. 如果 Hive 使用 templeton,应修改以下属性并且已定义这些属性。

表 29 Hive templeton 配置

Hadoop 位置 属性 值(示例)

高级 WebHCat 站点 templeton.hive.archive viprfs://hdfsBucket2.s3.site1/hdp/apps/${hdp.version}/hive/hive.tar.gz

templeton.pig.archive viprfs://hdfsBucket2.s3.site1/hdp/apps/${hdp.version}/pig/pig.tar.gz

templeton.sqoop.archive viprfs://hdfsBucket2.s3.site1/hdp/apps/${hdp.version}/sqoop/sqoop.tar.gz

templeton.streaming.jar viprfs://hdfsBucket2.s3.site1/hdp/apps/${hdp.version}/mapreduce/hadoop-streaming.jar

2. 启动 mysql。

[root@hdfs-pansy2 lib]# mysql -u hive -pEnter password:Welcome to the MySQL monitor. Commands end with ; or \g.

3. 转至 Hive 数据库。

mysql> use hive;Reading table information for completion of table and column namesYou can turn off this feature to get a quicker startup with -A

4. 显示数据库的内容。

select * from DBS;+------+-------------+-----------------------------------+--------+-------+------+

配置简单的 Hadoop 群集与 ECS HDFS 之间的集成

设置 Hive 135

Page 136: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

|DB_ID | DESC | DB_LOCATION_URI | NAME | OWNER | OWNER|| | | | | _NAME | _TYPE|+------+-------------+-----------------------------------+--------+-------+------+| 1 | Default Hive| hdfs://hdfs-pansy1.ecs.lab.emc. |default |public |ROLE || | database | com:8020/apps/hive/warehouse | | | || | | | | | || 6 | NULL | viprfs://hdfsbucket.ns.Site1/ |retail |hdfs |USER || | | apps/hive/warehouse/retail_demo.db| _demo | | |+------+-------------+-----------------------------------+--------+-------+------+2 rows in set (0.00 sec)

5. 更改数据库。

mysql> update DBS set DB_LOCATION_URI='viprfs://hdfsbucket3.ns.Site1/apps/hive/warehouse' where DB_ID=1;Query OK, 1 row affected (0.00 sec)Rows matched:1 Changed:1 Warnings:0

验证对 ECS 的 Hadoop 访问权限您必须验证对 ECS 存储区的访问权限。

所有 Hadoop 客户端服务都启动后,确保您可以使用 Hadoop CLI 访问 ECS 存储区。URI 采用形式 viprfs://bucket.namespace.federation/。

对于具有 URI viprfs://hive-warehouse-1.ns1.federation1/ 的存储区,您可以尝试使用以下命令列出目录:

[root@mycluster1-master-0 ~]# hdfs dfs -ls viprfs://hive-warehouse-1.ns1.federation1/

新存储区将为空,并且不会返回任何内容。

对于同一个存储区,以下命令可创建一个空文件,然后执行显示文件的目录列出。

[root@mycluster1-master-0 ~]# hdfs dfs -touchz viprfs://hive-warehouse-1.ns1.federation1/hive-warehouse-1[root@mycluster1-master-0 ~]# hdfs dfs -ls viprfs://hive-warehouse-1.ns1.federation1/

保护存储区在创建存储区之后,除了配置存储区 ACL,还应立即创建和保护根目录条目。

准备工作

此过程应以存储区所有者身份执行,在此示例中为 hdfs。

过程

1. 在根目录对象 ACL 中设置模式位,以便仅存储区所有者和默认组可以访问存储区。不允许 other 组(其中包括所有 ECS HDFS 客户端用户)访问根目录,因此不允许该组访问存储区中的任何文件。

[hdfs@hadoop-0 ~]$fs=viprfs://bucket.ns.fed

配置简单的 Hadoop 群集与 ECS HDFS 之间的集成

136 Elastic Cloud Storage (ECS) 3.1 数据访问指南

Page 137: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

hadoop fs -chmod 750 $fs/hadoop fs -chown hdfs:hdfs $fs/

2. 应使用 setfacl 命令将特定组和用户添加到根目录对象 ACL。

请注意,这些权限会复制存储区的自定义组 ACL,以确保所有 HDFS API 都具有相同的有效权限。

hadoop fs -setfacl -m group:hadoop:r-x $fs/hadoop fs -setfacl -m group:users:r-x $fs/hadoop fs -setfacl -m group:hive:r-x $fs/hadoop fs -setfacl -m group:spark:r-x $fs/

3. 确认权限。

hadoop fs -ls -d $fs/drwxr-x---+ - hdfs hdfs 0 2017-08-22 20:44 viprfs://bucket.ns.fed/

hadoop fs -getfacl $fs/# file:viprfs://bucket.ns.fed/# owner:hdfs# group:hdfsuser::rwxgroup::r-xgroup:hadoop:r-xgroup:hive:r-xgroup:spark:r-xgroup:users:r-xmask::r-xother::---

将默认文件系统从 HDFS 重新定位到 ECS 存储区尽管系统现已可用并且看起来运行良好,但不支持使用 HDFS 作为默认文件系统的配置。因此,必须将默认文件系统从 HDFS 重新定位到根 ECS 存储区 此过程会将所有文件从 HDFS 文件系统拷贝到 ECS 存储区,然后将该 ECS 存储区设置为默认文件系统。

过程

1. 使用 Ambari 来停止除 HDFS、YARN 和 Zookeeper 之外的所有服务。

2. 将 DAS HDFS 文件系统上的所有现有文件拷贝到 ECS 存储区。即使对于新安装的 Hadoop,在默认 Hadoop 文件系统中也必须存在关键目录。使用 DistCp 执行文件拷贝。

[hdfs@mycluster1-master-0~]$ hadoop distcp -skipcrccheck -update -pugp -i / viprfs://mycluster1-root.ns1.federation/

3. 使用 Ambari 配置下列设置。

配置简单的 Hadoop 群集与 ECS HDFS 之间的集成

将默认文件系统从 HDFS 重新定位到 ECS 存储区 137

Page 138: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

表 30 支持 Hive 并发和 ACID 事务的 Hadoop 配置

Hadoop 位置 属性 值(示例)

HDFS Advanced core-site fs.defaultFS viprfs://<bucket_name>.<namespace>.<federation_name>例如:

viprfs://mycluster1-root.ns1.federation1

Spark Advanced spark-defaults spark.eventLog.dir viprfs://<bucket_name>.<namespace>.<federation>/<spark-history>例如:

viprfs://mycluster1-root.ns1.federation1/spark-history

Spark Advanced spark-defaults spark.history.fs.logDirectory viprfs://<bucket_name>.<namespace>.<federation>/<spark-history>例如:

viprfs://mycluster1-root.ns1.federation1/spark-history

4. 使用 Ambari 来停止和启动所有服务。

5. 确保适当的目录权限。如果 DistCp 遇到任何错误,所需的权限可能尚未应用于关键目录。以下命令可设置正确的权限。

[hdfs@mycluster1-master-0~]$hadoop fs -chmod 777 /apps/hive/warehousehadoop fs -chown hive:hdfs /apps/hive/warehousehadoop fs -chmod -R 770 /user/ambari-qahadoop fs -chown -R ambari-qa:hdfs /user/ambari-qa

配置简单的 Hadoop 群集与 ECS HDFS 之间的集成

138 Elastic Cloud Storage (ECS) 3.1 数据访问指南

Page 139: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

第 8 章

使用 ECS HDFS 配置 Kerberized Hadoop 群集 l

l 与 ECS HDFS 集成安全的 Hadoop 群集 ...........................................................140l 规划从简单群集到 Kerberos 群集的迁移...........................................................140l 映射组名称....................................................................................................... 140l 使用 ECS 服务主体配置 ECS 节点.....................................................................141l 使用 Ambari 启用 Kerberos............................................................................... 144l 使用元数据保证 ECS 存储区的安全.................................................................. 145l 重新配置 ECS 客户端属性................................................................................ 149l 启动 Hadoop 服务,并验证对 ECS 的 Hadoop 访问权限.................................. 149

使用 ECS HDFS 配置 Kerberized Hadoop 群集 l 139

Page 140: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

与 ECS HDFS 集成安全的 Hadoop 群集您可以将使用 Kerberos 进行保护的现有 Hadoop 分发软件与 ECS HDFS 集成。

在选择启用 Kerberos 之前,必须完全执行 Hadoop 和 ECS 的非安全安装。

在执行集成步骤之前,必须执行以下操作:

l 验证是否已安装并配置 Kerberos 密钥分发中心 (KDC) 以处理 Hadoop 服务主体的身份验证。如果要使用 Active Directory 来认证 ECS 用户,则必须设置 Kerberos域与 ECS 用户域之间的跨域信任。有关设置 Kerberos KDC 和配置信任的信息,请参见有关 Kerberos 配置的指导(第 162 页)。

l 确保您已为 HDFS 文件系统创建存储区(请参见使用 ECS 门户为 HDFS 创建存储区(第 126 页))。

l 确保您已阅读集成的规划指南(请参见计划 HDFS 和 Hadoop 集成(第 132页))。

l 确保您已下载安装和支持程序包(请参见获取 ECS HDFS 安装和支持包(第 132页))。

要将 ECS HDFS 与您的安全 Hadoop 群集集成,请完成以下任务:

1. 规划从简单群集到 Kerberos 群集的迁移(第 140 页)

2. 映射组名称(第 140 页)

3. 使用 ECS 服务主体配置 ECS 节点(第 141 页)

4. 使用元数据保证 ECS 存储区的安全(第 145 页)

5. 重新配置 ECS 客户端属性(第 149 页)

6. 启动 Hadoop 服务,并验证对 ECS 的 Hadoop 访问权限(第 149 页)

规划从简单群集到 Kerberos 群集的迁移ECS 支持从使用简单安全性的 Hadoop 群集迁移到受 Kerberos 保护的 Hadoop 群集。

如果要从简单的环境迁移到安全的环境,请参阅从简单群集迁移到 Kerberos Hadoop群集(第 120 页)。

通常,ECS 迁移功能支持 Kerberos 用户无缝地访问文件和目录。但是,以下注意事项适用:

l 在启动 Hadoop 服务时,Ambari 向导会在 后一步捕获 Hadoop 群集报告错误。这是预期行为。将 ECS 存储区重新配置为安全之后,您可以启动 Hadoop 服务。

l 为了让用户和进程能够访问存储区,他们必须是有权访问存储区的组的成员。否则,您必须更改存储区 ACL,以便 Kerberos 用户具有访问权限。

映射组名称ECS 必须能够为 Hadoop 服务主体(如 hdfs、hive 等)映射组详细信息。如果使用Active Directory (AD),则可以从两个不同源找到组信息:存储区元数据或 AD。ECS根据 /opt/storageos/conf/hdfssvc.conf 配置文件的 [hdfs.fs.request]部分中的配置参数设置确定要使用的源。

使用 ECS HDFS 配置 Kerberized Hadoop 群集 l

140 Elastic Cloud Storage (ECS) 3.1 数据访问指南

Page 141: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

如果希望 ECS 将存储区元数据(而非 AD)用于组信息(如果可用),请按如下所示定义参数:

[hdfs.fs.request]prefer_secure_metadata_bucket_for_groups = true

如果希望 ECS 从 AD(而非存储区元数据)中确定组信息,请按如下所示定义参数:

[hdfs.fs.request]prefer_secure_metadata_bucket_for_groups = false

默认值为 true。因此,如果未定义此值,ECS 将根据存储区元数据确定 Kerberos 主体的组详细信息。您必须将任何更改应用到所有 ECS 节点,并且必须重新启动所有节点上的 dataheadsvc。

使用 ECS 服务主体配置 ECS 节点ECS 服务主体及其对应的密钥表文件必须位于每个 ECS 数据节点上。您必须使用提供的 Ansible 行动手册自动完成这些步骤。

准备工作

您必须具有以下项,然后才能完成该过程:

l 访问 Ansible 行动手册。从 ECS HDFS 软件包获取 Ansible 行动手册,如 获取 ECSHDFS 安装和支持包(第 132 页)中所述。

l ECS 节点 IP 地址列表。l KDC 的 IP 地址。l 运行此脚本的 DNS 解析应与 Hadoop 主机的 DNS 解析相同,否则 vipr/

_HOST@REALM 将不工作。

ECS 提供可重复使用名为“角色”的 Ansible 内容,其中包含 python 脚本、基于YAML 的任务列表以及模板文件。

l vipr_kerberos_config:为 Kerberos 配置 ECS 节点。l vipr_jce_config:通过安装 JCE 策略文件为无限强度加密配置 ECS 数据节

点。l vipr_kerberos_principal:为 ECS 节点获取服务主体。

在此过程中,Ansible 使用与 ECS 一起安装的应用工具 Docker 容器运行。

过程

1. 登录到 ECS 节点 1 并将 hdfsclient-<ECS version>-<version>.zip 文件拷贝到该节点。

例如:/home/admin/ansible 。您可以使用 wget 直接从 support.emc.com获取软件包,或者,如果已将其下载到另一台计算机,则可以使用 scp。

2. 解压缩 hdfsclient-<ECS version>-<version>.zip 文件。

此过程中的步骤使用 viprfs-client-<ECS version>-<version>/playbooks/samples 目录中包含的行动手册;这些步骤也包含在 viprfs-client-<ECS version>-<version>/playbooks/samples/README.md中。

3. 编辑 playbooks/samples 目录中的 inventory.txt 文件以引用 ECS 数据节点和 KDC 服务器。

使用 ECS HDFS 配置 Kerberized Hadoop 群集 l

使用 ECS 服务主体配置 ECS 节点 141

Page 142: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

默认条目如下所示。

[data_nodes]192.168.2.[100:200]

[kdc]192.168.2.10

4. 从 oracle.com 下载 “unlimited” JCE 策略归档,并将其提取到UnlimitedJCEPolicy 目录中的 viprfs-client-<ECS version>-<version>/playbooks/samples。

此步骤仅应在您要使用强加密类型时执行。

您可以将 Kerberos 配置为使用强加密类型,如 AES-256。在这种情况下,您必须在 ECS 节点中重新配置 JRE 以使用策略 。

5. 在 ECS 节点 1 上启动应用工具容器,并向容器提供 Ansible 行动手册。

a. 加载应用工具容器映像。

例如:

sudo docker load -i /opt/emc/caspian/checker/docker/images/utilities.txz

b. 获取 docker 映像的标识。

例如:

admin@provo-lilac:~> sudo docker images

输出将为您提供映像标识:

REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZEutilities 1.5.0.0-403.cb6738e 186bd8577a7a 2 weeks ago 738.5 MB

c. 启动并进入应用工具映像。

例如:

sudo docker run -v /opt/emc/caspian/fabric/agent/services/object/main/log:/opt/storageos/logs -v /home/admin/ansible/viprfs-client-3.0.0.0.85325.a05145b/playbooks:/ansible --name=ecs-tools -i -t --privileged --net=host 186bd8577a7a /bin/bash

在示例中,解压缩 Ansible 行动手册的位置 /home/admin/ansible/viprfs-client-3.0.0.0.85325.a05145b/playbooks 映射到应用工具容器中的 /ansible 目录。

6. 切换到容器中的工作目录。

使用 ECS HDFS 配置 Kerberized Hadoop 群集 l

142 Elastic Cloud Storage (ECS) 3.1 数据访问指南

Page 143: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

例如:

cd /ansible

7. 将 krb5.conf 文件从 KDC 拷贝到工作目录。

8. 安装提供的 Ansible 角色。

ansible-galaxy install -r requirements.txt -f

9. 如有必要,编辑 generate-vipr-keytabs.yml 并设置域名称。

例如:

[root@nile3-vm22 samples]# cat generate-vipr-keytabs.yml---#### Generates keytabs for ViPR/ECS data nodes.### - hosts:data_nodes serial:1 roles: - role:vipr_kerberos_principal kdc:"{{ groups.kdc | first }}" principals: - name:vipr/[email protected] keytab:keytabs/[email protected]

在此示例中,默认值 (vipr/[email protected]) 已替换为 (vipr/[email protected]),域为 MA.EMC.COM。

10. 运行下列命令。

export ANSIBLE_HOST_KEY_CHECKING=False

11. 运行 Ansible 行动手册以生成密钥表。

ansible-playbook -v -k -i inventory.txt --user admin –b --become-user=root generate-vipr-keytabs.yml

12. 如有必要,编辑 setup-vipr-kerberos.yml 文件。

默认文件内容如下所示。

# cat setup-vipr-kerberos.yml

---### # Configures ViPR/ECS for Kerberos authentication.# - Configures krb5 client # - Installs keytabs# - Installs JCE policy

使用 ECS HDFS 配置 Kerberized Hadoop 群集 l

使用 ECS 服务主体配置 ECS 节点 143

Page 144: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

### - hosts:data_nodes roles: - role:vipr_kerberos_config krb5: config_file:krb5.conf service_principal: name:vipr/[email protected] keytab:keytabs/[email protected]

- role:vipr_jce_config jce_policy: name:unlimited src:UnlimitedJCEPolicy/

在此示例中,默认值 (vipr/[email protected]) 已替换为 (vipr/[email protected]),域为 MA.EMC.COM。

如果您不使用强加密类型,则必须删除 vipr_jce_config 角色。

13. 运行 Ansible 行动手册以配置具有 ECS 服务主体的数据节点。

请确保 /ansible/samples/keytab 目录存在,并且 krb5.conf 文件在工作目录 /ansible/samples 中。

ansible-playbook -v -k -i inventory.txt --user admin –b --become-user=root setup-vipr-kerberos.yml

验证是否已(从 KDC)创建了正确的 ECS 服务主体(每个数据节点一个):

# kadmin.local -q "list_principals" | grep viprvipr/[email protected]/[email protected]

验证是否生成了正确的密钥表并将其存储在以下位置:/data/hdfs/krb5.keytab(在所有 ECS 数据节点上)。您可以对密钥表使用 strings 命令来提取用户可读的文本,并验证其中是否包含正确的主体。例如:

dataservice-10-247-199-69:~ # strings /data/hdfs/krb5.keytabMA.EMC.COMviprnile3-vm42.centera.lab.emc.com

在本例中,主体为 vipr/nile3-vm42.centera.lab.emc.com。

使用 Ambari 启用 Kerberos您必须使用 Ambari 启用 Kerberos。

此过程提供了启用 Kerberos 必须执行的基本步骤。有关 Ambari Kerberos 向导的详细信息,请参见此处。

使用 ECS HDFS 配置 Kerberized Hadoop 群集 l

144 Elastic Cloud Storage (ECS) 3.1 数据访问指南

Page 145: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

过程

1. 在 Ambari 界面中,选择“Ambari” > “Admin” > “Kerberos ” > “EnableKerberos”以进入“Enable Kerberos Wizard”。

2. 按照向导“Kerberize Cluster”面板中的步骤进行操作。单击 X 以中止 Kerberos向导。

可以将跳过此 Kerberize 群集步骤,因为现在不能启动 Hadoop 服务。

3. 通过单击“Confirmation”对话框中的“Exit Anyway”,确认您想要退出向导。

使用元数据保证 ECS 存储区的安全为了确保 ECS 存储区可以使用安全的 Hadoop 群集,存储区必须有权访问关于群集的信息。

在安全的 Hadoop 群集中,Kerberos 主体必须映射到 HDFS 用户名。此外,用户必须映射到 UNIX 组。在 Hadoop 群集内,NameNode 从 Hadoop 节点自身以及配置文件(core-site.xml 和 hdfs.xml)收集此信息。

要启用 ECS 节点以确定此信息并验证客户端请求,则必须向 ECS 节点提供以下数据:

l Kerberos 用户到 UNIX 用户和组映射l 超级用户组l 代理用户设置

数据以保留为元数据的一组名称-值对提供给 ECS 节点。

使用 ECS HDFS 配置 Kerberized Hadoop 群集 l

使用元数据保证 ECS 存储区的安全 145

Page 146: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

Kerberos 用户必须将与每个 Kerberos 用户(而非 AD 用户)相关的信息上载到 ECS,这些用户需要拥有对存储区的 Hadoop 访问权限。需要以下数据:

l 主体名称l 主体短名称(映射名称)l 主体组

如果 Hadoop 节点上有 10 个 Kerberos 主体,则必须在 JSON 输入文件中创建 30 个名称值对。每个名称必须是唯一的,因此您必须为每个主体名称、主体短名称和主体组分配唯一的名称。ECS 需要 JSON 条目名称的常量前缀和后缀。

每个 Kerberos 用户条目必备的前缀为 internal.kerberos.user,三种可能的后缀为 name、shortname 和 groups,如以下示例中所示。

{ "name":"internal.kerberos.user.hdfs.name", "value":"hdfs-cluster999@EXAMPLE_HDFS.EMC.COM"},{ "name":"internal.kerberos.user.hdfs.shortname", "value":"hdfs"},{ "name":"internal.kerberos.user.hdfs.groups", "value":"hadoop,hdfs"},

前缀和后缀之间的值可以是任何内容,只要它能唯一识别该条目。例如,您可使用:

"name":"internal.kerberos.user.1.name","name":"internal.kerberos.user.1.shortname","name":"internal.kerberos.user.1.groups",

主体可映射到不同用户。例如,通常可以使用 Hadoop 群集的 auth_to_local 设置将 rm 主体用户映射到 yarn 用户,诸如此类。

RULE:[2:$1@$0](rm@EXAMPLE_HDFS.EMC.COM)s/.*/yarn/

因此,对于映射到不同主体的任何主体(例如,rm 主体映射到 yarn 主体),您可在短名称值中使用“mapped”主体,以使 rm 主体的条目为:

{"name":"internal.kerberos.user.rm.name","value":"rm@EXAMPLE_HDFS.EMC.COM"},{"name":"internal.kerberos.user.yarn.shortname","value":"yarn@EXAMPLE_HDFS.EMC.COM"},{"name":"internal.kerberos.user.yarn.groups","value":"hadoop"},

使用 ECS HDFS 配置 Kerberized Hadoop 群集 l

146 Elastic Cloud Storage (ECS) 3.1 数据访问指南

Page 147: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

超级组您必须告知 ECS,Hadoop 节点上哪些 Linux 用户组将获得其所在组的超级用户权限。JSON 输入文件中只有一个条目需要超级组指定。必须类似于下面的示例:

{ "name":"dfs.permissions.supergroup", "value":"hdfs"}

代理设置对于代理支持,您必须识别每个 Hadoop 应用程序允许的所有代理设置,而此处的应用程序是 Hadoop 支持的应用程序之一(如 hive 等)。

在下面的示例中,hive 应用程序的代理支持将授予作为 s3users 组(AD 或 Linux组)成员并且可以在 Hadoop 群集中的任何主机上运行 hive 的用户。因此,其 JSON条目是两个名称/值对,一个用于主机设置,另一个用于组设置。

{ "name":"hadoop.proxyuser.hive.hosts", "value":"*"},{ "name":"hadoop.proxyuser.hive.groups", "value":"s3users"}

完整的文件三种类型的元数据必须合并到单个 JSON 文件。JSON 文件格式如以下示例所示。

{ "head_type":"hdfs", "metadata":[ { "name":"METADATANAME_1", "value":"METADATAVALUE_1" }, { "name":"METADATANAME_2", "value":"METADATAVALUE_2" },

:

{ "name":"METADATANAME_N", "value":"METADATAVALUE_N" } ]}

后一个名称/值对没有尾随“,”字符。

JSON 文件的示例显示在以下位置:安全存储区元数据(第 172 页)。

使用 ECS HDFS 配置 Kerberized Hadoop 群集 l

使用元数据保证 ECS 存储区的安全 147

Page 148: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

安全和非安全存储区一旦将元数据加载到存储区,该存储区便被称为“安全存储区”,您必须拥有Kerberos 主体才能对其进行访问。来自非安全 Hadoop 节点的请求将被拒绝。如果尚未加载元数据,则存储区不是安全的,并且将拒绝来自安全 Hadoop 节点的请求。

如果您尝试从非安全群集访问安全存储区,将会看到以下错误消息。如果您尝试从安全群集访问非安全存储区,将看到类似消息。

[hdfs@sandbox ~]$ hadoop fs -ls -R viprfs://hdfsBucket3.s3.site1/ls:ViPRFS internal error (ERROR_FAILED_TO_PROCESS_REQUEST).

使用 Management REST API 将元数据值加载到 ECS通过运行 ECS Management REST API 命令,您可以提供保证 ECS 存储区安全所需的元数据值,从而与安全 Hadoop 群集结合使用。

准备工作

您必须具有 ECS 系统管理员凭据。

如果 Hadoop 管理员不是 ECS 系统管理员,则 Hadoop 管理员必须与 ECS 系统管理员一起合作才能将安全元数据加载到存储区。

Hadoop 管理员可向 ECS 系统管理员提供 JSON 元数据文件,ECS 系统管理员随后可使用此过程来加载元数据。如果这两个角色由相同用户担任,那么该用户将负责创建JSON 元数据文件并将其上载到 ECS 存储区。

过程

1. 创建包含元数据的 JSON 文件,如以下主题所述:使用元数据保证 ECS 存储区的安全(第 145 页)。

2. 使用您的系统管理员凭据登录到 ECS,以获取可在运行 ECS 管理命令时使用的身份验证令牌。

您可使用 curl 运行登录命令。在下面的示例中,您必须使用 ECS 系统管理员凭据替换 <username>:<password>,并提供 ECS 节点的 IP 地址或主机名。

TOKEN=$(curl -s -k -u <username>:<password> -D - -o /dev/null https://<ECS node IP or hostname>:4443/login | grep X-SDS-AUTH-TOKEN | tr -cd '\40-\176')

3. 运行 PUT object/bucket/<bucketname>/metadata ECS ManagementREST API 命令,以部署元数据,如下面的示例所示

curl -s -k -X PUT -H "$TOKEN" -H "Accept:application/json" -H "Content-Type:application/json" -T <bucketDetails>.json https:/<hostname>:4443/object/bucket/<bucketname>/metadata?namespace=<namespace>

您必须进行以下替换:

l 将 <username> 替换为 ECS 系统管理员用户名。

l 将 <password> 替换为指定 ECS 系统管理员用户名的密码。

l 将 <bucketname> 替换为用于 HDFS 数据的存储区的名称。

l 将 <hostname> 替换为 ECS 节点的 IP 地址或主机名。

l 将 <bucketdetails> 替换为包含名称-值对的 JSON 文件的文件名。

使用 ECS HDFS 配置 Kerberized Hadoop 群集 l

148 Elastic Cloud Storage (ECS) 3.1 数据访问指南

Page 149: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

l 将 <namespace> 替换为存储区驻留的命名空间的名称。

部署之后,元数据将可用于所有 ECS 节点。

重新配置 ECS 客户端属性您可以使用 Ambari 来设置 ECS 客户端所需的配置属性。

下表列出了所需的属性:

表 31 用于启用 ECS 访问的 Hadoop 配置

Hadoop 位置 属性 值

core-site fs.viprfs.auth.identity_translation CURRENT_USER_REALM

fs.viprfs.auth.anonymous_translation CURRENT_USER

viprfs.security.principal vipr/[email protected],其中 REALM.COM 替换为您的 Kerberos 域名。

有关每个 core_site.xml 参数的详细信息,请参见 ECS HDFS 的 Hadoop core-site.xml 属性(第 166 页)。

启动 Hadoop 服务,并验证对 ECS 的 Hadoop 访问权限启动 Hadoop 服务。

过程

1. 使用 Ambari 启动 Hadoop 服务。

2. 所有 Hadoop 客户端服务都启动后,确保您可以使用 Hadoop CLI 通过以下命令访问 ECS 存储区。

hdfs dfs -ls /

使用 ECS HDFS 配置 Kerberized Hadoop 群集 l

重新配置 ECS 客户端属性 149

Page 150: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

使用 ECS HDFS 配置 Kerberized Hadoop 群集 l

150 Elastic Cloud Storage (ECS) 3.1 数据访问指南

Page 151: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

第 9 章

故障排除

l 简介.................................................................................................................. 152l 验证是否使用安全 Hadoop 群集正确配置了 AD/LDAP..................................... 152l Pig 测试失败:无法获取 Kerberos 主体............................................................152l AD 用户拒绝的权限...........................................................................................153l 权限错误...........................................................................................................153l 无法处理请求....................................................................................................156l 启用 Kerberos 客户端日志记录和调试.............................................................. 156l 在 KDC 上调试 Kerberos................................................................................... 157l 消除时钟偏差....................................................................................................157l 使用 ECS 服务主体配置一个或多个新 ECS 节点...............................................157l “Yarn 目录不存在”错误消息的解决方法........................................................159

故障排除 151

Page 152: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

简介此部分提供配置 ECS HDFS 时可能遇到的问题的解决方法。

验证是否使用安全 Hadoop 群集正确配置了 AD/LDAP

您应验证是否使用 Kerberos (KDC) 或 Hadoop 群集正确地设置了 AD 或 LDAP。

如果您的配置是正确的,则应能对 AD/LDAP 用户执行 kinit 操作。此外,如果为本地 HDFS 配置了 Hadoop 群集,则您应检查您可以列出本地 HDFS 目录,然后再将ECS 添加到群集。

解决方法如果您无法通过 Hadoop 群集上的 KDC 成功认证为 AD/LDAP 用户,则应先解决此问题,然后再继续 ECS Hadoop 配置。

下面显示了一个成功登录的示例:

[kcluser@lvipri054 root]$ kinit [email protected] for [email protected]:

[kcluser@lvipri054 root]$ klistTicket cache:FILE:/tmp/krb5cc_1025Default principal:[email protected]

Valid starting Expires Service principal04/28/15 06:20:57 04/28/15 16:21:08 krbtgt/[email protected] renew until 05/05/15 06:20:57

如果以上操作未成功,则可使用以下任务清单进行调查:

l 在 KDC 服务器上检查 /etc/krb5.conf 文件的正确性和语法。在配置文件中以及在与 kinit 命令一起使用时,域可能区分大小写。

l 检查已将 /etc/krb5.conf 文件从 KDC 服务器拷贝到所有 Hadoop 节点。l 检查在 AD/LDAP 和 KDC 服务器之间已成功建立单向信任。l 确保 AD/LDAP 服务器上的加密类型与 KDC 服务器上的加密类型匹配。l 检查 /var/kerberos/krb5kdc/kadm5.acl 和 /var/kerberos/krb5kdc/

kdc.conf 文件是否正确。l 在 KDC 服务器上尝试以服务主体身份登录,以指示 KDC 服务器本身正常运行。l 尝试在 KDC 服务器上以相同的 AD/LDAP 用户身份直接登录。如果不能登录,则

问题可能就在 KDC 服务器上。

Pig 测试失败:无法获取 Kerberos 主体Pig 测试失败,显示以下错误:Info:Error:java.io.IOException:Unable toobtain the Kerberos principal(信息:错误:java.io.IOException:无法获取Kerberos 主体),即使以 AD 用户身份 kinit 之后也是如此,或者显示 Unable toopen iterator for alias firstten(无法为别名 firstten 打开迭代器)。

出现此问题的原因是 Pig(版本 0.13 及更低版本)不为作为辅助存储的 ViPRFS 生成委派标记。

故障排除

152 Elastic Cloud Storage (ECS) 3.1 数据访问指南

Page 153: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

解决方法将 viprfs://bucket.ns.installation/ 附加到 mapreduce.job.hdfs-servers 配置设置中。例如:

set mapreduce.job.hdfs-servers viprfs://KcdhbuckTM2.s3.site1

AD 用户拒绝的权限在以 AD 用户身份运行应用程序时,出现 Permission denied(拒绝权限)错误消息。

解决方法将 /user 目录的权限设置为:

hdfs dfs -chmod 1777 /user

权限错误出于多种原因,可能发生权限不足错误。运行 hadoop fs 命令时,您可能会收到此类错误,或者您可能会在应用程序日志(如 mapreduce 或 hive 的日志)中看见该错误。

INSUFFICIENT_PERMISSIONS 错误

在下面的示例中,jhs 主体尝试创建一个目录 (/tmp) 并收到了INSUFFICIENT_PERMISSIONS 错误。在此情况下,根目录的权限不允许此用户创建目录。

root@lrmk042:/etc/security/keytabs# hadoop fs -mkdir /tmp15/11/08 21:03:09 ERROR vipr.ViPRFileSystemClientBase:Permissions failure for request:User:jhs/lrmk042.lss.emc.com@HOP171_HDFS.EMC.COM (auth:KERBEROS), host:hdfsBucket3.s3.site1, namespace:s3, bucket:hdfsBucket315/11/08 21:03:09 ERROR vipr.ViPRFileSystemClientBase:Request message sent:MkDirRequestMessage[kind=MKDIR_REQUEST,namespace=s3,bucket=hdfsBucket3,path=/tmp,hdfsTrustedStatus=HDFS_USER_NOT_TRUSTED,permissions=rwxr-xr-x,createParent=true]mkdir:java.security.AccessControlException:ERROR_INSUFFICIENT_PERMISSIONS

root@lrmk042:/etc/security/keytabs# hadoop fs -ls -d /drwxr-xr-x - hdfs hdfs 0 2015-11-08 16:58 /root@lrmk042:/etc/security/keytabs#

如果权限不足错误的原因在客户端上不明显,您可能需要查看服务器日志。以dataheadsvc-error.log 开头查找错误。打开每个 ECS 节点的终端窗口,然后编辑 dataheadsvc-error.log 文件。找到与您在客户端上看见错误的时间相对应的错误。

无法获取凭据

在 dataheadsvc-error.log 中您会看到如下所示的错误消息:

2015-11-08 22:36:21,985 [pool-68-thread-6] ERROR RequestProcessor.java (line 1482) Unable to get group credentials for principal 'jhs@HOP171_HDFS.EMC.COM'.This principal will

故障排除

AD 用户拒绝的权限 153

Page 154: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

default to use local user groups.Error message:java.io.IOException:Failed to get group credentials for 'jhs@HOP171_HDFS.EMC.COM', status=ERROR

这不是错误。此消息意味着服务器已尝试查找主体的名称,以查找提出请求的主体用户是否存在任何缓存的 Active Directory(AD) 组。对于 Kerberos 用户,将返回此错误。

该错误将指出提出请求的用户名称。记录该名称。

存储区访问错误

如果请求访问存储区的用户没有 ACL 权限,则您可能会在 dataheadsvc-error.log 中看到此错误消息。

2015-11-08 21:35:26,652 [pool-68-thread-1] ERROR BucketAPIImpl.java (line 220) Getting bucket failed withcom.emc.storageos.objcontrol.object.exception.ObjectAccessException:you don't have GET_KEYPOOL_ACL permission to this keypoolat com.emc.storageos.objcontrol.object.exception.ObjectAccessException.createExceptionForAPI(ObjectAccessException.java:286)at com.emc.storageos.data.object.ipc.protocol.impl.ObjectAccessExceptionParser.parseFrom(ObjectAccessExceptionParser.java:61)

在此情况下,您应为存储区添加显式用户 ACL,或为用户所属的其中一个组添加自定义组 ACL。

对象访问错误

权限错误的另一种类型是对象访问错误。对象(文件和目录)访问权限不应与存储区访问权限相混淆。用户可能对存储区拥有完整控制权限(读取/写入/删除),但由于他们对尝试访问的路径中的一个或多个对象不具备访问权限,因此可能会收到INSUFFICIENT_PERMISSIONS 错误。下面提供了对象访问错误的示例。

2015-11-08 22:36:21,995 [pool-68-thread-6] ERROR FileSystemAccessHelper.java (line 1364) nfsProcessOperation failed to process path:mr-history/done2015-11-08 22:36:21,995 [pool-68-thread-6] ERROR ObjectControllerExceptionHelper.java (line 186) Method nfsGetSMD failed due to exceptioncom.emc.storageos.data.object.exception.ObjectControllerException:directory server returns error ERROR_ACCESS_DENIEDat com.emc.storageos.data.object.FileSystemAccessLayer.FileSystemAccessHelper.nfsProcessOperation(FileSystemAccessHelper.java:1368)at com.emc.storageos.data.object.FileSystemAccessLayer.FileSystemAccessHelper.getSystemMetadata(FileSystemAccessHelper.java:466)at com.emc.storageos.data.object.FileSystemAccessLayer.FileSystemAccessLayer.getSystemMetadata(FileSystemAccessLayer.java:532)at com.emc.storageos.data.object.blob.client.BlobAPI.getStat(BlobAPI.java:1294)at com.emc.vipr.engine.real.RealBlobEngine.stat(RealBlobEngine.java:1976)at com.emc.vipr.engine.real.RealBlobEngine.stat(RealBlobEngine.java:802)at com.emc.vipr.hdfs.fs.RequestProcessor.accept(RequestProcessor.java:499)at com.emc.vipr.hdfs.net.ConnectionManager$RequestThread.run(ConnectionManager.java:136)at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)at java.lang.Thread.run(Thread.java:745)

故障排除

154 Elastic Cloud Storage (ECS) 3.1 数据访问指南

Page 155: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

这里需要注意的两个重要项目是请求的操作 (stat) 和对象的路径 (mr-history/done)。请注意,前导斜杠字符不会显示,因此真正的路径是 /mr-history/done。现在您拥有三条对于调试非常重要的信息:

l 用户主体 (jhs@HOP171_HDFS.EMC.COM)

l 操作(stat 为 hadoop fs -ls)

l 路径 (/mr-history/done)

其他调试方法有两种:

l Blobsvc 日志调试(第 155 页)l Hadoop 客户端调试(第 155 页)

Blobsvc 日志调试失败的权限请求将在 blobsvc 中显示与此类似的错误:

2015-11-08 22:36:21,994[TaskScheduler-BlobService-COMMUNICATOR-ParallelExecutor-5892]ERROR ObjectAclChecker.java (line 101) not permit, cred jhs@HOP171_HDFS.EMC.COM[hadoop]false1 withaction GET_OBJECT_ACL on object with acl/owner/group user={hdfs@hop171_hdfs.emc.com=[FULL_CONTROL]},groups={hdfs=[READ_ACL, EXECUTE, READ]}, other=[], owner=hdfs@hop171_hdfs.emc.com, group=hdfs

查找 not permit。我们可在其中找到提出请求的用户 (jhs)、对象的所有者(hdfs)、对象组 (hdfs) 以及关于所有者、组和其他方面的权限。我们不能在其中找到权限检查中失败的实际对象。在 Hadoop 节点上,成为 hdfs 主体、以路径开头并建立树,从而找到着眼于客户端上 Hadoop 文件系统的其他调试方法。

Hadoop 客户端调试收到权限错误时,您应知道提出请求的用户主体、请求采取的操作以及请求的项目。在该示例中,jhs 用户收到了列出 /mr-history/done 目录的错误。您可进行一些分析,以确定根本原因。如果您有权访问超级用户帐户,请使用该帐户执行这些步骤。

root@lrmk042:/var/log/hadoop-mapreduce/mapred# hadoop fs -ls -d /mr-history/donedrwxrwxrwt - mapred hadoop 0 2015-11-08 16:58 /mr-history/done

下面的示例显示了 jhs 主体应有权列出此目录。

root@lrmk042:/var/log/hadoop-mapreduce/mapred# hadoop fs -ls -d /mr-historydrwxr-xr-x - hdfs hdfs 0 2015-11-08 16:58 /mr-history

同样,以下输出显示了目录没有任何访问问题。

root@lrmk042:/var/log/hadoop-mapreduce/mapred# hadoop fs -ls -d /drwxr-x--- - hdfs hdfs 0 2015-11-08 16:58 /

这里的问题是,根目录归 hdfs 所有,组名称是 hdfs,但 others 其他设置为 -(0)。提出请求的用户是 jhs@REALM 并且该用户是 hadoop 的成员而非 hdfs,因此

故障排除

权限错误 155

Page 156: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

该用户没有用于列出 /mr-history/done 目录的对象 ACL。在根目录上执行 chmod命令可让此用户执行其任务。

root@lrmk042:/var/log/hadoop-mapreduce/mapred# hadoop fs -chmod 755 /

root@lrmk042:/var/log/hadoop-mapreduce/mapred# hadoop fs -ls -d /drwxr-xr-x - hdfs hdfs 0 2015-11-08 16:58 /

无法处理请求列出存储区时,显示 Failed to Process Request(无法处理请求)。

执行 list bucket 命令时,例如:

# hadoop fs -ls viprfs://hdfsBucket2.s3.site1/

将发生以下 ViPRFS 内部错误:

ERROR_FAILED_TO_PROCESS_REQUEST

解决方法此错误的可能原因:

1. Hadoop 节点上的 viprfs-client JAR 文件与 ECS 软件不同步。

2. 您正试图从非安全(非 Kerberos)Hadoop 节点访问安全 (Kerberos) 存储区。

3. 您正试图从安全 (Kerberos) Hadoop 节点访问非安全(非 Kerberos)存储区。

启用 Kerberos 客户端日志记录和调试要排除身份验证问题,可以在您使用的 Hadoop 群集节点上启用详细日志记录和调试。

启用客户端详细日志记录您可以使用仅适用于当前 SSH 会话的环境变量来启用详细日志记录,如下面的示例所示。

export HADOOP_OPTS="-Dsun.security.krb5.debug=true"

启用 Hadoop 客户端调试要对 Hadoop 节点与 ECS 之间的 Hadoop 活动进行故障排除,可以按如下所示启用Hadoop 详细日志记录:

export HADOOP_ROOT_LOGGER="Debug,console"

故障排除

156 Elastic Cloud Storage (ECS) 3.1 数据访问指南

Page 157: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

在 KDC 上调试 Kerberos您可以通过在 KDC /var/log/krb5kdc.log 文件上使用 tail 命令来在 KDC 上调试 Kerberos,以便在执行 HDFS 操作时更加轻松地进行调试。

tail -f /var/log/krb5kdc.log

消除时钟偏差确保客户端与服务器之间的时间同步很重要,因为 Kerberos 依赖于准确的时间。

如果您的 Active Directory (AD) 与您的数据节点/KDC 有时钟偏差,则必须配置其NTP 服务器。您可以按下述方式执行此操作:

1. 使用 Remote Desktop 连接到您的 AD 服务器。

2. 运行以下命令:

a. w32tm /config /syncfromflags:manual /manualpeerlist:<ntp-server1>,<ntp-server2>

b. net stop w32timec. net start w32time

使用 ECS 服务主体配置一个或多个新 ECS 节点如果要将一个或多个新节点添加到 ECS 配置,则必须将 ECS 服务主体和相应密钥表部署到新节点。

准备工作l 此过程假定您先前已执行此处的步骤,并已安装 Ansible 行动手册且可访问该手

册。

您必须具有以下项,然后才能完成该过程:

l ECS 节点 IP 地址列表。l KDC 的 IP 地址。l 运行此脚本的 DNS 解析应与 Hadoop 主机的 DNS 解析相同,否则 vipr/

_HOST@REALM 将不工作。

过程

1. 登录到节点 1,检查以前是否已安装工具以及行动手册是否可用。

以前使用的示例是:

/home/admin/ansible/viprfs-client-<ECS version>-<version>/playbooks

2. 编辑 playbooks/samples 目录中的 inventory.txt 文件以添加 ECS 节点。

下面的摘要显示了默认条目。

[data_nodes]192.168.2.[100:200]

故障排除

在 KDC 上调试 Kerberos 157

Page 158: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

[kdc]192.168.2.10

3. 在 ECS 节点 1 上启动应用工具容器,并向容器提供 Ansible 行动手册。

a. 加载应用工具容器映像。

示例:

sudo docker load -i /opt/emc/caspian/checker/docker/images/utilities.txz

b. 获取 docker 映像的标识。

示例:

admin@provo-lilac:~> sudo docker images

输出将为您提供映像标识:

REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZEutilities 1.5.0.0-403.cb6738e 186bd8577a7a 2 weeks ago 738.5 MB

c. 启动并进入应用工具映像。

示例:

sudo docker run -v /opt/emc/caspian/fabric/agent/services/object/main/log:/opt/storageos/logs -v /home/admin/ansible/viprfs-client-3.0.0.0.85325.a05145b/playbooks:/ansible --name=ecs-tools -i -t --privileged --net=host 186bd8577a7a /bin/bash

在示例中,解压缩 Ansible 行动手册的位置 /home/admin/ansible/viprfs-client-3.0.0.0.85325.a05145b/playbooks 映射到应用工具容器中的 /ansible 目录。

4. 切换到容器中的工作目录。

示例:

cd /ansible

5. 运行 Ansible 行动手册以生成密钥表。

ansible-playbook -v -k -i inventory.txt generate-vipr-keytabs.yml

6. 运行 Ansible 行动手册以配置具有 ECS 服务主体的数据节点。

请确保 /ansible/samples/keytab 目录存在,并且 krb5.conf 文件在工作目录 /ansible/samples 中。

ansible-playbook -v -k -i inventory.txt setup-vipr-kerberos.yml

故障排除

158 Elastic Cloud Storage (ECS) 3.1 数据访问指南

Page 159: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

验证是否已(从 KDC)创建了正确的 ECS 服务主体(每个数据节点一个):

# kadmin.local -q "list_principals" | grep viprvipr/[email protected]/[email protected]

验证是否生成了正确的密钥表并将其存储在以下位置:/data/hdfs/krb5.keytab(在所有 ECS 数据节点上)。您可以对密钥表使用 strings 命令来提取用户可读的文本,并验证其中是否包含正确的主体。例如:

dataservice-10-247-199-69:~ # strings /data/hdfs/krb5.keytabMA.EMC.COMviprnile3-vm42.centera.lab.emc.com

在本例中,主体为 vipr/nile3-vm42.centera.lab.emc.com。

“Yarn 目录不存在”错误消息的解决方法在使用 Kerberized HDP 群集将 ECS 配置为默认文件系统时,您可能会看到以下错误:/ats/done does not exist。此外,资源管理器也不会启动。

以下过程提供了这些问题的解决方法。

过程

1. 检查 Hadoop 节点是否可以解析 ECS 节点。

a. 在 Hadoop 节点中安装 nslookup 工具。

yum install -y bind-utils

b. 检查是否可以解析 ECS 节点。

nslookup <address of ECS node>

c. 如果它未解析为正确的主机名,请将 ECS DNS 添加到 Hadoop 节点上的 /etc/resolv.conf。

您可以通过运行以下命令来检查 DNS 条目是否存在:

cat /etc/resolv.conf

d. 现在,Hadoop 节点将解析 ECS 节点。

再次运行 nslookup 以检查它是否解析。

nslookup <address of ECS node>

2. 检查 Hadoop 节点、ECS 节点和 KDC 中的系统时间。

故障排除

“Yarn 目录不存在”错误消息的解决方法 159

Page 160: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

使用:

# date

如果没有合并系统时间,则它们应同步到相同的 ntp 服务器。

在启用 NTP 中介绍了此情况。

3. 如果前面的步骤执行不起作用,您可以尝试在 /ats 下手动创建文件夹 done 或active。

# sudo -u hdfs hdfs dfs -mkdir /ats/done

# sudo -u hdfs hdfs dfs -mkdir /ats/active

然后,检查目录是否存在。

$ hdfs dfs -ls /ats

Found 2 items drwxrwxrwt - yarn hadoop 0 2016-07-12 09:00 /ats/active drwx------ - yarn hadoop 0 2016-07-12 09:00 /ats/done

故障排除

160 Elastic Cloud Storage (ECS) 3.1 数据访问指南

Page 161: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

第 10 章

附录:有关 Kerberos 配置的指导

l 有关 Kerberos 配置的指导................................................................................ 162

附录:有关 Kerberos 配置的指导 161

Page 162: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

有关 Kerberos 配置的指导提供有关在 Hadoop 群集中配置 Kerberos 的指导。

设置 Kerberos KDC按以下步骤设置 Kerberos KDC。

过程

1. 安装 krb5-workstation。

使用命令:

yum install -y krb5-libs krb5-server krb5-workstation

2. 修改 /etc/krb5.conf 并更改域名称和扩展名。

3. 修改 /var/kerberos/krb5kdc/kdc.conf 并更改域名称以与您自己的名称匹配。

4. 如果您的 KDC 是 VM,请重新创建 /dev/random(否则,您的下一个 KDC 数据库创建步骤将需要很长时间)。

a. 删除,使用:

# rm -rf /dev/random

b. 重新创建,使用:

# mknod /dev/random c 1 9

5. 创建 KDC 数据库。

# kdb5_util create -s

如果您犯了初始主体方面的错误。例如,您不正确地运行了 kdb5_util create -s,可能需要在 /var/kerberos/krb5kdc/ 目录中明确删除这些主体。

6. 修改 kadm5.acl 以指定拥有管理权限的用户。

*/[email protected] *

7. 修改 /var/kerberos/krb5kdc/kdc.conf 并采用除 des-cbc-crc:normal 以外的任何加密类型。同时,修改域名称。

附录:有关 Kerberos 配置的指导

162 Elastic Cloud Storage (ECS) 3.1 数据访问指南

Page 163: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

8. 确保 iptables 和 selinux 在所有节点(KDC 服务器和 Hadoop 节点)上被关闭。

9. 启动 KDC 服务并创建一个本地管理主体。

kadmin.local

# service krb5kdc start

# service kadmin start

# /usr/kerberos/sbin/kadmin.local-q "addprinc root/admin"

# kinit root/admin

10. 将 krb5.conf 文件拷贝到所有 Hadoop 节点。

只要您修改任何配置文件,都会重新启动下面的服务,并将 krb5.conf 文件拷贝到相关的 Hadoop 主机和 ECS 节点。

11. 重新启动服务。

service krb5kdc restart

service kadmin restart

12. 您可以访问以下链接,根据 http://www.centos.org/docs/4/html/rhel-rg-en-4/s1-kerberos-server.html 上的步骤设置 Kerberos KDC。

为 Kerberos 配置 AD 用户身份认证在配置了 Kerberos 安全的 Hadoop 环境中,可将其配置为根据 ECS AD 域进行身份认证。

确保您的 ADREALM 有 AD 用户。以下示例使用了 ADREALMCAMBRIDGE.ACME.COM 的用户“detscr”。如该示例中所示,创建 KDCREALM 与ADREALM 之间的单向信任。不要尝试使用“netdom trust”来验证此域。

在 Active Directory 上必须设置从 KDC 域到 AD 域的单向跨域信任。为此,请在命令提示符处运行以下命令。

ksetup /addkdc KDC-REALM <KDC hostname>netdom trust KDC-REALM /Domain:AD-REALM /add /realm /passwordt:<TrustPassword>ksetup /SetEncTypeAttr KDC-REALM <enc_type>

例如:

ksetup /addkdc LSS.EMC.COM lcigb101.lss.emc.comnetdom trust LSS.ACME.COM /Domain:CAMBRIDGE.ACME.COM /add /realm /passwordt:ChangeMeksetup /SetEncTypeAttr LSS.ACME.COM DES-CBC-CRC

在此示例中,使用了 des-cbc-crc 加密。但是,这是一种弱加密,选择它只是为了演示目的。不管您选择什么加密,都必须得到 AD、KDC 和客户端的支持。

附录:有关 Kerberos 配置的指导

为 Kerberos 配置 AD 用户身份认证 163

Page 164: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

在您的 KDC 上(以 root 用户身份)要设置单向信任,您将需要创建“krbtgt”服务主体。为此,名称为 krbtgt/KDC-REALM@AD-REALM。为此信任指定密码 ChangeMe 或者您在上面的 /passwordt 参数中指定的任何密码。

1. 在 KDC 上(以 root 用户身份)

# kadminkadmin:addprinc -e "des-cbc-crc:normal" krbtgt/[email protected]

在部署时, 好将加密类型限制为您选择的类型。此类型生效后,可以添加其他加密类型。

2. 将以下规则添加到您的 core-site.xml hadoop.security.auth_to_local 属性:

RULE:[1:$1@$0](^.*@CAMBRIDGE\.ACME\.COM$)s/^(.*)@CAMBRIDGE\.ACME\.COM$/$1/gRULE:[2:$1@$0](^.*@CAMBRIDGE\.ACME\.COM$)s/^(.*)@CAMBRIDGE\.ACME\.COM$/$1/g

3. 验证是否使用 Kerberos (KDC) 服务器正确地设置了 AD 或 LDAP。客户应能针对AD 用户执行“kinit”,并列出本地 HDFS 目录。

如果您要配置 Hadoop 群集和 ECS 以便通过 AD 进行认证,在所有 Hadoop 节点上为您将被 kinit 为的 AD 用户创建本地 Linux 用户帐户,同时确保对所有 Hadoop 主机都使用该 AD 用户进行 kinit 操作。例如,如果您被 kinit 为 userX@ADREALM,则在所有 Hadoop 主机上创建 userX 作为本地用户,并在执行 kinit 时使用:“kinituserX@ADREALM”(在该用户的所有主机上)。

在下面的示例中,我们将以“kinit [email protected]”的形式进行认证,从而创建名为 detscr 的用户,并在 Hadoop 主机上 kinit 为该用户。如下所示:

[root@lviprb159 ~]# su detscr [detscr@lviprb159 root]$ whoami detscr [detscr@lviprb159 root]$ kinit [email protected] Password for [email protected]: [detscr@lviprb159 root]$ klist Ticket cache:FILE:/tmp/krb5cc_1010 Default principal:[email protected] Valid starting Expires Service principal 12/22/14 14:28:27 03/02/15 01:28:30 krbtgt/[email protected] renew until 09/17/17 15:28:27 [detscr@lviprb159 root]$ hdfs dfs -ls /Found 4 itemsdrwx---rwx - yarn hadoop 0 2014-12-23 14:11 /app-logsdrwx---rwt - hdfs 0 2014-12-23 13:48 /appsdrwx---r-x - mapred 0 2014-12-23 14:11 /mapreddrwx---r-x - hdfs 0 2014-12-23 14:11 /mr-history

附录:有关 Kerberos 配置的指导

164 Elastic Cloud Storage (ECS) 3.1 数据访问指南

Page 165: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

第 11 章

附录:ECS HDFS 的 Hadoop core-site.xml 属性

l ECS HDFS 的 Hadoop core-site.xml 属性......................................................... 166

附录:ECS HDFS 的 Hadoop core-site.xml 属性 165

Page 166: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

ECS HDFS 的 Hadoop core-site.xml 属性在配置 Hadoopcore-site.xml 文件时,使用该表作为属性及其相关值的参考。

表 32 Hadoop core-site.xml 属性

属性 描述

文件系统实施属性

fs.viprfs.impl<property><name>fs.viprfs.impl</name><value>com.emc.hadoop.fs.vipr.ViPRFileSystem</value></property>

fs.AbstractFileSystem.viprfs.impl <property>

<name>fs.AbstractFileSystem.viprfs.impl</name> <value>com.emc.hadoop.fs.vipr.ViPRAbstractFileSystem</value> </property>

用于定义 ECS HDFS 文件系统 URI 的授权部分的属性

fs.vipr.installations 用逗号分隔的名称列表。通过 fs.vipr.installation.[federation].hosts 属性进一步定义名称,以唯一标识 ECS 数据节点集。名称用作 ECS HDFS 文件系统 URI 的授权部分的组成部分。例如:

<property> <name>fs.vipr.installations</name> <value><federation>,<site1>,<testsite></value> </property>

fs.vipr.installation.[federation].hosts

在 fs.vipr.installations 属性中列出了 ECS 群集的数据节点或负载平衡器的 IP 地址。采用以逗号分隔的 IP 地址或 FQDN 列表形式指定该值。例如:

<property> <name>fs.vipr.installation.<federation>.hosts</name> <value>203.0.113.10,203.0.113.11,203.0.113.12</value> </property>

fs.vipr.installation.[installation_name].resolution

指定 ECS HDFS 软件如何了解如何访问 ECS 数据节点。值为:

l dynamic:在不使用负载平衡器而直接访问 ECS 数据节点时使用该值。

l fixed:通过负载平衡器访问 ECS 数据节点时使用该值。

<property> <name>fs.vipr.installation.<federation>.resolution</name> <value>dynamic</value> </property>

附录:ECS HDFS 的 Hadoop core-site.xml 属性

166 Elastic Cloud Storage (ECS) 3.1 数据访问指南

Page 167: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

表 32 Hadoop core-site.xml 属性 (续)

属性 描述

fs.vipr.installation.[installation_name].resolution.dynamic.time_to_live_ms

当 fs.vipr.installation.[installation_name].resolution 属性设置为 dynamic 时,此属性可指定查询 ECS 以获取活动节点列表的频率。以毫秒为单位指定值。默认值为 10 分钟。

<property> <name>fs.vipr.installation.<federation>.resolution.dynamic.time_to_live_ms</name> <value>600000</value> </property>

ECS 文件系统 URI

fs.defaultFS 一个标准 Hadoop 属性,将 URI 指定到默认文件系统。将该属性设置为 ECS HDFS 文件系统为可选项。如果您未将其设置为 ECS HDFS 文件系统,您必须在每次文件系统操作中指定完整的 URI。ECSHDFS 文件系统 URI 具有以下格式:

viprfs://[bucket_name].[namespace].[federation]

l bucket_name:启用 HDFS 的存储区的名称,其中包含在您运行 Hadoop 作业时需要使用的数据。

l namespace:与启用 HDFS 的存储区关联的租户命名空间。

l federation:与 Hadoop 可用于访问 ECS 数据的一组 ECS 数据节点关联的名称。该属性的值必须与在 fs.vipr.installations 属性中指定的值之一相匹配。

例如:

<property> <name>fs.defaultFS</name> <value>viprfs://testbucket.s3.federation1</value> </property>

umask property

fs.permissions.umask-mode

该标准 Hadoop 属性指定 ECS HDFS 应该如何计算对象权限。通过在输入权限上应用掩码来计算权限。简单配置和 Kerberos 配置的建议值均为:022。例如:

<property><name>fs.permissions.umask-mode</name><value>022</value></property>

身份转换属性

fs.viprfs.auth.identity_translation

此属性指定 ECS HDFS 客户端如何确定特定用户所属的 Kerberos 域(如果未指定)。ECS 数据节点将文件所有者存储为 username@REALM,而 Hadoop 只会将文件所有者存储为用户名。可能的值包括:

l NONE:默认值。用户不映射到域。将此设置用于使用简单安全性的 Hadoop 群集。使用此设置时,ECS HDFS 不会执行域转换。

附录:ECS HDFS 的 Hadoop core-site.xml 属性

ECS HDFS 的 Hadoop core-site.xml 属性 167

Page 168: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

表 32 Hadoop core-site.xml 属性 (续)

属性 描述

l CURRENT_USER_REALM:当存在 Kerberos 时有效。自动检测用户的域,并且它是当前已登录用户所在的域。在下面的示例中,域为 EMC.COM,因为 sally 位于 EMC.COM 域中。文件所有权更改为 [email protected]

# kinit [email protected]# hdfs dfs -chown john /path/to/file

在命令行中提供的域优先于属性设置。

<property> <name>fs.viprfs.auth.identity_translation </name> <value>CURRENT_USER_REALM</value> </property>

FIXED_REALM 现在已过时。

fs.viprfs.auth.realm 当 fs.viprfs.auth.identity_translation 属性设置为 FIXED_REALM 时,分配给用户的域。这现在已过时。

fs.viprfs.auth.anonymous_translation

此属性用于确定如何将用户和组分配到新创建的文件。

此属性已用于确定没有所有者的文件发生了什么情况。这些文件被认为归 anonymous 所有。不再匿名拥有文件和目录。

可用值包括:

l LOCAL_USER:将此设置用于使用简单安全性的 Hadoop 群集。将 Hadoop 群集的 Unix 用户和组分配到新创建的文件和目录。

l CURRENT_USER:将此设置用于使用 Kerberos 的 Hadoop 群集。将 Kerberos 主体([email protected]) 分配为文件或目录所有者,并使用已分配为存储区默认值的组。

l NONE:(已不推荐使用)先前已指出,不应执行从匿名拥有对象到当前用户的映射。

<property> <name>fs.viprfs.auth.anonymous_translation</name> <value>CURRENT_USER</value> </property>

Kerberos 域和服务主体属性

viprfs.security.principal 该属性可指定 ECS 服务主体。该属性会将 ECS 服务通知 KDC。该值特定于您的配置。主体名称中可以包含 _HOST;在运行时会自动将其替换为实际的数据节点 FQDN。

附录:ECS HDFS 的 Hadoop core-site.xml 属性

168 Elastic Cloud Storage (ECS) 3.1 数据访问指南

Page 169: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

表 32 Hadoop core-site.xml 属性 (续)

属性 描述

例如:

<property> <name>viprfs.security.principal</name> <value>vipr/[email protected]</value></property>

简单身份认证模式的 core-site.xml 示例以下 core-site.xml 文件是简单身份认证模式的 ECS HDFS 属性示例。

示例 1 core-site.xml

<property> <name>fs.viprfs.impl</name> <value>com.emc.hadoop.fs.vipr.ViPRFileSystem</value></property>

<property> <name>fs.AbstractFileSystem.viprfs.impl</name> <value>com.emc.hadoop.fs.vipr.ViPRAbstractFileSystem</value></property>

<property> <name>fs.vipr.installations</name> <value>federation1</value></property>

<property> <name>fs.vipr.installation.federation1.hosts</name> <value>203.0.113.10,203.0.113.11,203.0.113.12</value></property>

<property> <name>fs.vipr.installation.federation1.resolution</name> <value>dynamic</value></property>

<property> <name>fs.vipr.installation.federation1.resolution.dynamic.time_to_live_ms</name> <value>900000</value></property>

<property> <name>fs.defaultFS</name> <value>viprfs://mybucket.mynamespace.federation1/</value></property>

<property> <name>fs.viprfs.auth.anonymous_translation</name> <value>LOCAL_USER</value></property>

<property> <name>fs.viprfs.auth.identity_translation</name>

附录:ECS HDFS 的 Hadoop core-site.xml 属性

简单身份认证模式的 core-site.xml 示例 169

Page 170: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

示例 1 core-site.xml (续)

<value>NONE</value></property>

附录:ECS HDFS 的 Hadoop core-site.xml 属性

170 Elastic Cloud Storage (ECS) 3.1 数据访问指南

Page 171: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

第 12 章

附录:安全存储区元数据示例

l 安全存储区元数据.............................................................................................172

附录:安全存储区元数据示例 171

Page 172: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

安全存储区元数据以下示例显示了安全存储区元数据名称值对的列表。

{ "head_type": "hdfs", "metadata": [ { "name": "internal.kerberos.user.ambari-qa.name", "value": "ambari-qa@EXAMPLE_HDFS.EMC.COM" }, { "name": "internal.kerberos.user.ambari-qa.shortname", "value": "ambari-qa" }, { "name": "internal.kerberos.user.ambari-qa.groups", "value": "hadoop,users" }, { "name": "internal.kerberos.user.cmaurer.name", "value": "cmaurer@EXAMPLE_HDFS.EMC.COM" }, { "name": "internal.kerberos.user.cmaurer.shortname", "value": "cmaurer" }, { "name": "internal.kerberos.user.cmaurer.groups", "value": "cmaurer,adm,cdrom,sudo,dip,plugdev,users,lpadmin,sambashare" }, { "name": "internal.kerberos.user.dn.name", "value": "dn@EXAMPLE_HDFS.EMC.COM" }, { "name": "internal.kerberos.user.dn.shortname", "value": "hdfs@EXAMPLE_HDFS.EMC.COM" }, { "name": "internal.kerberos.user.dn.groups", "value": "hadoop,hdfs" }, { "name": "internal.kerberos.user.hdfs.name", "value": "hdfs@EXAMPLE_HDFS.EMC.COM" }, { "name": "internal.kerberos.user.hdfs.shortname", "value": "hdfs" }, { "name": "internal.kerberos.user.hdfs.groups", "value": "hadoop,hdfs" }, { "name": "internal.kerberos.user.hive.name", "value": "hive@EXAMPLE_HDFS.EMC.COM" }, { "name": "internal.kerberos.user.hive.shortname", "value": "hive" },

附录:安全存储区元数据示例

172 Elastic Cloud Storage (ECS) 3.1 数据访问指南

Page 173: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

{ "name": "internal.kerberos.user.hive.groups", "value": "hadoop" }, { "name": "internal.kerberos.user.jhs.name", "value": "jhs@EXAMPLE_HDFS.EMC.COM" }, { "name": "internal.kerberos.user.jhs.shortname", "value": "mapred" }, { "name": "internal.kerberos.user.jhs.groups", "value": "hadoop" }, { "name": "internal.kerberos.user.nm.name", "value": "nm@EXAMPLE_HDFS.EMC.COM" }, { "name": "internal.kerberos.user.nm.shortname", "value": "yarn@EXAMPLE_HDFS.EMC.COM" }, { "name": "internal.kerberos.user.nm.groups", "value": "hadoop" }, { "name": "internal.kerberos.user.nn.name", "value": "nn@EXAMPLE_HDFS.EMC.COM" }, { "name": "internal.kerberos.user.nn.shortname", "value": "hdfs@EXAMPLE_HDFS.EMC.COM" }, { "name": "internal.kerberos.user.nn.groups", "value": "hadoop,hdfs" }, { "name": "internal.kerberos.user.rm.name", "value": "rm@EXAMPLE_HDFS.EMC.COM" }, { "name": "internal.kerberos.user.rm.shortname", "value": "yarn@EXAMPLE_HDFS.EMC.COM" }, { "name": "internal.kerberos.user.rm.groups", "value": "hadoop" }, { "name": "internal.kerberos.user.spark.name", "value": "spark@EXAMPLE_HDFS.EMC.COM" }, { "name": "internal.kerberos.user.spark.shortname", "value": "spark" }, { "name": "internal.kerberos.user.spark.groups", "value": "hadoop" }, { "name": "internal.kerberos.user.yarn.name", "value": "yarn@EXAMPLE_HDFS.EMC.COM" },

附录:安全存储区元数据示例

安全存储区元数据 173

Page 174: Elastic Cloud Storage (ECS)...7 9 S3 11 S3 13 ECS 中的 Amazon S3 API 支持 14 S3 API 支持和不支持的功能 14 存储区已存在情况下的行为 17

{ "name": "internal.kerberos.user.yarn.shortname", "value": "yarn" }, { "name": "internal.kerberos.user.yarn.groups", "value": "hadoop" }, { "name": "internal.kerberos.user.zookeeper.name", "value": "zookeeper@EXAMPLE_HDFS.EMC.COM" }, { "name": "internal.kerberos.user.zookeeper.shortname", "value": "ams" }, { "name": "internal.kerberos.user.zookeeper.groups", "value": "hadoop" }, { "name": "hadoop.proxyuser.hcat.groups", "value": "*" }, { "name": "hadoop.proxyuser.hcat.hosts", "value": "*" }, { "name": "hadoop.proxyuser.yarn.users", "value": "*" }, { "name": "hadoop.proxyuser.yarn.hosts", "value": "*" }, { "name": "hadoop.proxyuser.hive.hosts", "value": "10.247.179.42" }, { "name": "hadoop.proxyuser.hive.users", "value": "*" }, { "name": "hadoop.proxyuser.hcat.groups", "value": "*" }, { "name": "hadoop.proxyuser.hcat.hosts", "value": "*" }, { "name": "dfs.permissions.supergroup", "value": "hdfs" } ]}

附录:安全存储区元数据示例

174 Elastic Cloud Storage (ECS) 3.1 数据访问指南