注意

本文档适用于 Ceph 的开发版本。

临时URL操作

为了允许临时访问对象(例如用于 GET 请求)而无需共享凭证,radosgw 的 swift 端点支持临时 URL 功能。要使用此功能,首先需要设置 X-Account-Meta-Temp-URL-Key 的值以及可选的 X-Account-Meta-Temp-URL-Key-2。临时 URL 功能依赖于针对这些密钥的 HMAC-SHA1 签名。

注意

如果您计划为 Swift API 启用临时 URL 功能,强烈建议在端点定义中包含 Swift 账户名称,以最接近地模仿原生 OpenStack Swift 的行为。为此,请在 ceph.conf 中设置配置选项 rgw swift account in url = true,并将 Keystone 端点更新为 URL 后缀 /v1/AUTH_%(tenant_id)s(而不是仅仅 /v1)。

POST 临时URL密钥

对 Swift 账户执行包含所需密钥的 POST 请求将为该账户设置秘密临时 URL 密钥,从而可以为该账户提供临时 URL 访问。最多支持两个密钥,如果存在,签名将针对这两个密钥进行检查,以便在不使临时 URL 失效的情况下轮换密钥。

注意

原生 OpenStack Swift 也支持在容器级别设置临时 URL 密钥的选项,方法是对容器发出 POSTPUT 请求并设置 X-Container-Meta-Temp-URL-KeyX-Container-Meta-Temp-URL-Key-2。radosgw 不支持此功能;临时 URL 密钥只能在账户级别设置和使用。

语法

POST /{api version}/{account} HTTP/1.1
Host: {fqdn}
X-Auth-Token: {auth-token}

请求头

X-Account-Meta-Temp-URL-Key

描述:

用户定义的密钥,取任意字符串值。

类型:

String

必需:

X-Account-Meta-Temp-URL-Key-2

描述:

用户定义的密钥,取任意字符串值。

类型:

String

必需:

GET 临时URL对象

临时 URL 使用加密 HMAC-SHA1 签名,其中包含以下元素:

  1. 请求方法的值,例如“GET”

  2. 过期时间,格式为自纪元以来的秒数,即 Unix 时间

  3. 从“v1”开始的请求路径

上述各项之间用换行符分隔并进行规范化,然后使用 SHA-1 哈希算法针对先前发布的临时 URL 密钥之一生成 HMAC。

下面是一个演示上述过程的 Python 脚本示例:

import hmac
from hashlib import sha1
from time import time

method = 'GET'
host = 'https://objectstore.example.com/swift'
duration_in_seconds = 300  # Duration for which the url is valid
expires = int(time() + duration_in_seconds)
path = '/v1/your-bucket/your-object'
key = 'secret'
hmac_body = '%s\n%s\n%s' % (method, expires, path)
sig = hmac.new(key, hmac_body, sha1).hexdigest()
rest_uri = "{host}{path}?temp_url_sig={sig}&temp_url_expires={expires}".format(
             host=host, path=path, sig=sig, expires=expires)
print(rest_uri)

# Example Output
# https://objectstore.example.com/swift/v1/your-bucket/your-object?temp_url_sig=ff4657876227fc6025f04fcf1e82818266d022c6&temp_url_expires=1423200992

由 Ceph 基金会为您呈现

Ceph 文档是由非营利性 Ceph 基金会 资助和托管的社区资源。如果您希望支持这项工作和我们的其他努力,请考虑 立即加入