ConoHa のオブジェクトストレージには、一時的にオブジェクトを公開する場合に便利な Temporary URL 機能があります。
この機能を使うメリットは、下記が挙げられます。
- web publishing と違って全体に公開する必要が無い
- 指定した期間が過ぎると無効化される
- キー、時間、オブジェクト名から URL を生成するので、URL を改ざんされてもアクセスできない
オブジェクトストレージ自体は、接続元 IP 制限などはありませんが、一段挟むことでそのようなことも実現可能です。
URL を生成する処理について、API リファレンスには、Python のサンプルしか載っていませんでしたが、ウェブサイト内で呼び出す場合、PHP の方が使い勝手が良いので、作成してみました。
Tempolary URL 用の Key を登録
Key は初回のみ設定します。
API リファレンスのそって curl で登録してもよいですが、このブログでは、PowerShell を主に用いていますので、その方法を紹介します。
OpenStack 認証
# アカウント情報より確認すること
$apiUser = "gncu00000000"
$apiPassword = ""
$tenantId = "00000000000000000000000000000000"
$identityServiceUrl = "https://identity.tyo[12].conoha.io/v2.0"
$objectstorageService = "https://object-storage.tyo[12].conoha.io/v1/nc_$tenantId"
# トークンの取得
$body = '{"auth":{"passwordCredentials":
{"username":"' + $apiUser + '","password":"'+$apiPassword+'"}
,"tenantId":"'+$tenantId+'"}}'
$url = $identityServiceUrl+"/tokens"
$mytokens = Invoke-RestMethod $url -Method POST -Body $body
$token = $mytokens.access.token.id
$tokenHeader = @{"X-Auth-Token" = $token}
キーの設定
$tempkeyHeader = @{
"X-Account-Meta-Temp-URL-Key" = "test-key"
"X-Auth-Token" = $token
}
$result = Invoke-RestMethod -Method POST -Headers $tempkeyHeader -Uri "$objectstorageService"
登録されたキーの確認
$result = Invoke-WebRequest -Method GET -Headers $tokenHeader -Uri "$objectstorageService"
$result.Headers.'X-Account-Meta-Temp-Url-Key'
Tempolary URL 生成用 PHP
24時間有効な URL を生成する場合、下記となります。
PHP 7.4.2 にて動作確認を行いました。
<?php
$method = 'GET';
$duration_in_seconds = 60*60*24; // ←[時間]
$expires = time() + $duration_in_seconds;
$path = '/v1/nc_00000000000000000000000000000000/test/tempurl.txt'; // ←[対象オブジェクト]
$key = 'test-key'; // ←[設定した鍵]
$hmac_body = "$method\n$expires\n$path";
$sig = hash_hmac('sha1', $hmac_body, $key);
$s = "https://object-storage.tyo[12].conoha.io$path?temp_url_sig=$sig&temp_url_expires=$expires"; // ←[tyo1,2 の部分は環境により異なる]
echo "$s";
?>
このサンプルの場合、CLI で実行することになりますが、PHP のウェブサイトであれば簡単に取り込めるかと思います。
まとめ
ConoHa のオブジェクトストレージの Tempolary URL を作成するサンプルが、Python しか紹介されていなかったため、PHP でのサンプルを作成しました。
何かの役に立てば嬉しいです。