2.3.2. S3 身份验证


对 Ceph 对象网关的请求可以是经过身份验证的用户或未经身份验证的请求。Ceph 对象网关假定匿名用户发送了未经身份验证的请求。Ceph 对象网关支持 ACL。

对于大多数用例,客户端使用现有开源库,如 Amazon SDK 的 AmazonS3Client 用于 Java 和 Python Boto。使用开源库,只需传递访问密钥和密钥,库会为您构建请求标头和身份验证签名。但是,您可以创建请求并签署它们。

在向 Ceph 对象网关服务器发送前,在请求中包括访问密钥和基于 64 编码的消息身份验证代码(HMAC)的要求。Ceph 对象网关使用兼容 S3 的身份验证方法。

示例

HTTP/1.1
PUT /buckets/bucket/object.mpeg
Host: cname.domain.com
Date: Mon, 2 Jan 2012 00:01:01 +0000
Content-Encoding: mpeg
Content-Length: 9999999

Authorization: AWS ACCESS_KEY:HASH_OF_HEADER_AND_SECRET

在上例中,将 ACCESS_KEY 替换为 access key ID 的值,后跟一个冒号(:)。将 HASH_OF_HEADER_AND_SECRET 替换为一个规范标头字符串的哈希值,以及与访问密钥 ID 对应的 secret。

生成标头字符串和 secret 的哈希值

生成标头字符串和 secret 的哈希值:

  1. 获取标头字符串的值。
  2. 将请求标头字符串规范化为规范形式。
  3. 使用 SHA-1 哈希算法生成 HMAC。
  4. hmac 结果编码为 base-64。

规范化标头

将标头规范化为规范形式:

  1. 获取 所有内容 标头。
  2. 删除除 content-typecontent-md5 外的所有 content- 标头。
  3. 确保 content- 标头名称是小写。
  4. 以字典顺序对 content- 标题排序。
  5. 确保带有 Date 标头,并确保指定的日期使用 GMT 而不是偏移量。
  6. 获取以 x-amz- 开头的所有标题。
  7. 确保 x-amz- 标头都是小写。
  8. 适当地对 x-amz- headers 进行排序。
  9. 将同一字段名称的多个实例合并到一个字段中,并使用逗号分隔字段值。
  10. 使用单个空格替换标题值中的空格和换行符。
  11. 在冒号前后删除空格。
  12. 在每个标头后面添加一个新行。
  13. 将标头合并回请求标头。

HASH_OF_HEADER_AND_SECRET 替换为 base-64 编码的 HMAC 字符串。

其它资源

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.