2015年7月7日火曜日

新ConoHaのオブジェクトストレージ、ダウンロード用一時URL(Temp URL)を試す。

ブラウザからオブジェクトストレージへ直接ファイルアップロードをしたいんだけどブラウザにアクセストークンを渡したくない。
どうにか方法ないかなって調べてたら下記記事を見つけた。

Qiitaの画像アップロード機能も簡単に実装できる。そう、S3ならね。
まさにやりたいことはこれ。でもS3じゃなくてConoHaオブジェクトストレージでやりたい。

調べた。

ConoHaのドキュメントにはForm POSTに関する記述がなかったけど使えないのかな・・・
とりあえず簡単そうな"Temporary URL"を試してみる。

コンテナを作成しファイルをアップロード


"container"ってコンテナを作り、"hello.txt"をアップロードした。
コンテナには何もメタデータを設定していないので、今のところhello.txtは直接GETできない。

トークンの発行

前回の記事と同様にトークンを発行する。
curl -i -X POST \
-H "Accept: application/json" \
-d '{"auth":{"passwordCredentials":{"username":"APIユーザー名","password":"APIユーザーパスワード"},"tenantId":"テナントID"}}' \
https://identity.tyo1.conoha.io/v2.0/tokens

TempURL用のKeyを登録

curl -i -X POST \
-H "Accept: application/json" \
-H "X-Auth-Token: [取得したトークン]" \
-H 'X-Account-Meta-Temp-URL-Key: [セットしたいキー]' \
https://object-storage.tyo1.conoha.io/v1/nc_df3bdbc45bc04950b558834f5728517a
Temporary URL middlewareに4つのキーが必要、みたいに書いてあるけどここでセットしてるのアカウントに対する鍵の1つ目(X-Account-Meta-Temp-URL-Key)っぽいなぁ。1つでいいのかな。残り3つはなんなんやろ。

TempURLを生成するスクリプトを用意

create-tempurl.py
import hmac
from hashlib import sha1
from time import time
method = 'GET'
duration_in_seconds = 60*60*24
expires = int(time() + duration_in_seconds)
path = '/v1/nc_df3bdbc45bc04950b558834f5728517a/container/hello.txt'
key = '[セットしたキー]'
hmac_body = '%s\n%s\n%s' % (method, expires, path)
sig = hmac.new(key, hmac_body, sha1).hexdigest()
s = 'https://{host}{path}?temp_url_sig={sig}&temp_url_expires={expires}'
url = s.format(host='object-storage.tyo1.conoha.io', path=path, sig=sig, expires=expires)
print '%s' % url
pythonにはhmacってライブラリがあるんですなぁ。rubyにもあるのかな。

スクリプト実行

$ python create-tempurl.py 
https://object-storage.tyo1.conoha.io/v1/nc_df3bdbc45bc04950b558834f5728517a/container/hello.txt?temp_url_sig=9775eacc57b95fe57435c8f5d8b6e404a0957930&temp_url_expires=1436284812
こんな感じでURLが返ってくる。
このURLをブラウザで開くとダウンロードされるので一時URLが有効になってるのが確認できた。めでたしめでたし。

とりあえずhmacによる認証ハッシュを生成する方法はわかったので次はFormPOSTを試してみたい。
ConoHaのAPIドキュメントに"Form POST"っぽいものがないけど使えるんだろうか・・・

今日はここまで。

関連記事

ConoHa関連の記事をまとめました。
ConoHa関連まとめ

スポンサーリンク

Related Posts Plugin for WordPress, Blogger...