Radosgw object url

介绍

ceph 对象存储中的对象的 url 是通过本地计算得来的,无论是权限为所有人可读还是私有的。

公有

如对象存储 url 为 obs.eayun.com
对象 bucket/object 的 url 就为 http://bucket.obs.eayun.com/object

私有

计算似有对象的 url 需要一些变量:

  • access_key:用户的 access_key
  • secret_key:用户的 secret_key
  • timeStamp:该对象过期时间点的unix时间戳
  • signature:radosgw 中的认证 signature

如对象存储 url 为 obs.eayun.com
以 shell 脚本为例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#!/usr/bin/env bash
KEY_ACCESS=“xxx”
KEY_SECRET=“xxx”

FILE=“object”
BUCKET=“bucket”
relativePath=“/${BUCKET}/${FILE}
contentType=“”
ContentMD5=“”

current=date <span class="string">"+%Y-%m-%d %H:%M:%S"</span>
timeStamp=date <span class="operator">-d</span> <span class="string">"<span class="variable">$current</span>"</span> +%s #将current转换为时间戳,精确到秒

stringToSign=“GET\n${ContentMD5}\n${contentType}\n${timeStamp}\n${relativePath}

signature=<span class="built_in">echo</span> -en <span class="variable">$&#123;stringToSign&#125;</span> | openssl sha1 -hmac <span class="variable">$&#123;KEY_SECRET&#125;</span> -binary | base64

HOST=${BUCKET}.obs.eayun.com/${FILE}
echo “http://${HOST}?AWSAccessKeyId=${KEY_ACCESS}&Expires=${timeStamp}&Signature=${signature}

对象 bucket/object 的 url 就为
http://${HOST}?AWSAccessKeyId=${KEY_ID}&amp;Expires=${timeStamp}&amp;Signature=${signature}