概要
ConoHaオブジェクトストレージのデフォルトは、オブジェクトを参照するだけでも必ず認証が必要になっています。
オブジェクトストレージに格納したオブジェクトをWEBに公開する場合は、コンテナの設定を行う必要があり、現時点ではコントロールパネルからは設定できないようです。
今回はswiftコマンドで設定してみました。
swiftと依存するプログラムをインストール
$ sudo yum install gcc
$ sudo yum install python-setuptools
$ sudo yum install python-pip
$ sudo yum install python-devel
$ sudo pip install python-swiftclient
$ sudo pip install pbr
$ sudo pip install --upgrade setuptools
$ sudo pip install python-keystoneclient
$ swift --version
python-swiftclient 2.6.0
ConoHaオブジェクトストレージにアクセスするための認証情報を環境変数に設定します。
$ export OS_AUTH_URL='https://identity.tyo1.conoha.io/v2.0'
$ export OS_TENANT_NAME='[テナント名]'
$ export OS_USERNAME='[APIユーザー名]'
$ export OS_PASSWORD='[APIユーザーのパスワード]'
認証なしでアクセスできるコンテナを作成
swift コマンドで認証なしで参照可能なコンテナを作成します。
bash
$ swift post -r '.r:*' public
Cyberduck などでファイルをアップロードすると、ブラウザから認証なしでアクセスできるようになります。
参照URL
URLは「[Object Storage Serviceのエンドポイント]/[コンテナ名]/[ファイル名]」になります。
もう少し具体的に書くと「 https://object-storage.tyo1.conoha.io/v1/nc_000000000000000000000000/public/hoge.jpg 」のような感じ。
URLが長くテナントIDが含まれているため、リバースプロキシを用いてURLを短くする方法がありますが、リバースプロキシを導入するとオブジェクトストレージへ逃がしたファイルへのリクエストが必ずリバースプロキシを経由してしまうため、負荷対策という面からこのような形にしています。
HTMLには下記のように記述することで、静的リソースはオブジェクトストレージに直接処理を任せて、WEBサーバは動的コンテンツのみを配信すればいいことになります。
<img src="https://object-storage.tyo1.conoha.io/v1/nc_000000000000000000000000/public/hoge.jpg" />