Bluemix
SoftLayer
ibmcloud
ICOS

小ネタ: ファイルを1つだけパブリックに公開したかったので、勢いでIBM Cloud Object Storageを使ってみた話


TL;DR(要は)


  • ある事情があり、ネット上にファイルを1つだけ公開して誰でも参照できるようにしたかった

  • ICOSに目をつけ、あれこれ調べて/やったら、できた!:grin:

  • けどよく考えると、そんなん、Githubでやれば超簡単だった..:weary:

という、無駄な努力の記録です(ハアー。。:broken_heart:

(でも、せっかく調べたのと、先々ICOS上で必要になるかもしれないので、忘れないように記事にしました)


きっかけ

ある特定のファイルを1つだけネット上に公開して、HTTPで参照可能にしたかったんですが、1ファイルのために自分でWebサーバー立てるのもアホらしい。で何か無いかなーと思って、「おー!ICOSがあるじゃないか!」と思いつきました。


ICOSでのパブリックなファイル共用の方法

早速ドキュメントをググる。ICOSのドキュメント「Allowing public access」によると以下の2つの方法がある模様.

#
Credential
公開期間
方法

1
IAM
ずっと1

ACLにx-amz-acl: public-readを設定する

2
HMAC
一定期間2

awscliでpresigned URLを生成

できそうなので、前もって公開したいファイルをバケットにアップロードしました。

image

image

項目
指定値

回復性とロケーション
Regional / jp-tok

エンドポイント(public)
s3.jp-tok.objectstorage.softlayer.net

バケット名
cognos

ファイル名
CSV_jp.csv

http://{エンドポイント(public)}/{バケット名}/{ファイル名}の形式で誰でもアクセスできるようにしたいのでURLは以下になります。

http://s3.jp-tok.objectstorage.softlayer.net/cognos/CSV_jp.csv

当然ですがこのままアクセスしてもAccessDenied(403)になります。

その前提で以下、両方の手順をご紹介します


まずはIAMでやってみた


Bearer {Token}って何?

Allowing public access」によればcurlで下記コマンド一発でオーケー、とのこと。URLもあるし簡単じゃん、と思ってふと疑問が。「このBearer {Token}」って何? ICOSをCurlで操作する例のすべてでBearer {Token}が出てくるけど、IAMだからAPIKEYとかじゃないの?と:question::question::question::question:状態に。

image


Bearer {Token}はPlatform API Keyから生成するものだった

ドキュメントBucket operationsからIAMのリンクをだどってGetting Startedに生成の方法が書いてありました。

:warning: : サービス資格情報のほうのapikeyではなくて、プラットフォームAPIキーを使う必要がある点にご注意ください

【1】まずは(なければ) 以下の要領でプラットフォームAPIキーを作成します。後から参照できないのでかならずメモか、ファイルでダウンロードしておきましょう。

ICOS_Platform_APIKey.gif

【2】コマンドからCLIでログイン

bx login --apikey <上記APIキー>

C:\Users\IBM_ADMIN>bx login --apikey 1Olv6ni3yxxxxxxxxU7dyraMK1gByNMBTe2GwhTV8VYba

API エンドポイント: https://api.eu-gb.bluemix.net
認証中です...
OK

<途中省略>

【3】Bearerトークンを入手

bx iam oauth-tokens

入手したBearerトークンは、かなり長いです。

C:\Users\IBM_ADMIN>bx iam oauth-tokens

IAM トークン: Bearer eyJraWQiOiIy(長いので省略)mwxfkHXO26Gb67XKjcgf1vAmWTGri2VdfFVFDJjY63FQmg

【4】Bearerトークンを指定してcurl実行

Curlで指定する場合はAuthorization:Bearerで始まる後ろ全部を指定します。

エラーが返らなければ成功です

C:\Users\IBM_ADMIN>curl -X "PUT" "https://s3.jp-tok.objectstorage.softlayer.net/cognos/CSV_jp.csv?acl"  \

-H "x-amz-acl: public-read" \
-H "Authorization: Bearer eyJraWQiOiIy(長いので省略)mwxfkHXO26Gb67XKjcgf1vAmWTGri2VdfFVFDJjY63FQmg" \
-H "Content-Type: text/plain; charset=utf-8"

【5】アクセスしてみる

上記設定が終わってブラウザーでアクセスすると確かに認証なしでダウンロードできるようになりましたのでGETでアクセスできています。

image


次はHMACでやってみた

HMACは要はAWSのS3互換の形式です。HMACでは時間限定つきでファイルを公開することができます。

【1】{HMAC:true}でHMAC用のサービス資格情報を生成する

:warning: 2018/12/13現在、ブラウザーの言語が日本語設定だと生成が失敗するようです。言語設定を英語にしてから操作してください。

image

Service Credentialsで「New Credential」

image

パネルの「Name」にお好みの名前、「Add Inline Configulation」に{"HMAC":true}を記入して「Add」ボタン→HMACのエントリができます

image

【2】 (未導入なら) awscliをインストール

(必要ならPython導入後) pip install awscliでawscliをインストールし、aws --versionで確認

C:\Users\IBM_ADMIN>aws --version

aws-cli/1.16.73 Python/3.6.4 Windows/7 botocore/1.12.63

aws configureで構成を作成(.aws/configと.aws/credentialsができる)

- AWS Access Key ID はサービス資格情報のaccess_key_idを指定

- AWS Secret Access Keyはサービス資格情報のsecret_access_keyを指定

C:\Users\IBM_ADMIN>aws configure

AWS Access Key ID [None]: 9127295711xxxxxxxx86f2ede7e41ce0
AWS Secret Access Key [None]: 50e5dc8a998721xxxxxxxx718bd2cf559ab93e78fe8fdcea
Default region name [None]: jp-tok
Default output format [None]: json

【3】awsコマンドでpresigned URLを生成

ドキュメント「Create a presigned URL

image

同じバケットのCSV_en.csvは現在アクセスできません。

image

presigned URLを生成します

aws --endpoint-url=https://s3.jp-tok.objectstorage.softlayer.net s3 presign s3://cognos/CSV_en.csv

C:\Users\IBM_ADMIN>aws --endpoint-url=https://s3.jp-tok.objectstorage.softlayer.net s3 presign s3://cognos/CSV_en.csv

https://s3.jp-tok.objectstorage.softlayer.net/cognos/CSV_en.csv?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=91272957110b41a98f86f2ede7e41ce0%2F20181213%2Fjp-tok%2Fs3%2Faws4_request&X-Amz-Date=20181213T060302Z&X-Amz-Expires=3600&X-Amz-SignedHeaders=host&X-Amz-Signature=0762491c6c9c30b862eb99f5a1e4ade1ef8ddcafa5c994ab8a2b73acf3c23e89

https://s3.jp-tok.objectstorage.softlayer.net/cognos/CSV_en.csv?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=91272957110b41a98f86f2ede7e41ce0%2F20181213%2Fjp-tok%2Fs3%2Faws4_request&X-Amz-Date=20181213T060302Z&X-Amz-Expires=3600&X-Amz-SignedHeaders=host&X-Amz-Signature=0762491c6c9c30b862eb99f5a1e4ade1ef8ddcafa5c994ab8a2b73acf3c23e89が3600秒有効なPresigned URLです

【4】このURLで、ブラウザーからファイルにアクセスできました!

image

:triangular_flag_on_post: 長いので短縮URLとかを使ったほうがいいのかも。


さらに

参考ですがNGINXをフロントに立ててICOSを静的なWebサーバー的に使う方法の記事もありました。

image


フー!両方できた!

ということで満足してたんですが、、、


もしかして:octocat: Githubでいいんじゃね?と

思いやってみたら、簡単にできました。単にファイルアップしてView Rawで表示されるURLを使えばよかったのでした。。

https://raw.githubusercontent.com/{ユーザー}/{リポジトリ名}/master/{ファイル名}

https://raw.githubusercontent.com/ishida330/repo1/master/CSV_jp.csv

github_002.gif

ですよね。。:octocat: 偉大だなあ。。あまりに無駄な知識をつけてしまったので、さらに無駄を強化すべく、記事にしました。ここまでお付き合いいただき、ありがとうございました。:end:





  1. 属性を改めて非公開に再設定するまで 



  2. デフォでは3600s