ConoHa のオブジェクトストレージの一時的なオブジェクト公開 URL (Temporary URL)を PHP を使って生成する


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 でのサンプルを作成しました。

何かの役に立てば嬉しいです。


Comments

comments

コメントを残す

メールアドレスが公開されることはありません。

*

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)