TL;DR(要は)
- ある事情があり、ネット上にファイルを1つだけ公開して誰でも参照できるようにしたかった
- ICOSに目をつけ、あれこれ調べて/やったら、できた!
- けどよく考えると、そんなん、Githubでやれば超簡単だった..
という、無駄な努力の記録です(ハアー。。)
(でも、せっかく調べたのと、先々ICOS上で必要になるかもしれないので、忘れないように記事にしました)
(2019/8) ICOSでもバケット単位で簡単に公開設定できるようになりました
当記事執筆時点(2018/12)ではできなかったのですが、その後、ICOSをバケット単位で簡単にPublic公開できるようになりました。方法はは@testnin2さんの下記の記事をご参照ください。
ICOSのデータを認証なしに外部公開する方法(IAM利用)
以下は2018/12月時点でそのまま残します。
きっかけ
ある特定のファイルを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を生成 |
できそうなので、前もって公開したいファイルをバケットにアップロードしました。
項目 | 指定値 |
---|---|
回復性とロケーション | 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とかじゃないの?と状態に。
Bearer {Token}はPlatform API Keyから生成するものだった
ドキュメントBucket operationsからIAMのリンクをだどってGetting Startedに生成の方法が書いてありました。
: サービス資格情報のほうのapikeyではなくて、プラットフォームAPIキーを使う必要がある点にご注意ください
【1】まずは(なければ) 以下の要領でプラットフォームAPIキーを作成します。後から参照できないのでかならずメモか、ファイルでダウンロードしておきましょう。
【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でアクセスできています。
次はHMACでやってみた
HMACは要はAWSのS3互換の形式です。HMACでは時間限定つきでファイルを公開することができます。
【1】{HMAC:true}でHMAC用のサービス資格情報を生成する
2018/12/13現在、ブラウザーの言語が日本語設定だと生成が失敗するようです。言語設定を英語にしてから操作してください。
Service Credentialsで「New Credential」
パネルの「Name」にお好みの名前、「Add Inline Configulation」に**{"HMAC":true}**を記入して「Add」ボタン→HMACのエントリができます
【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」
同じバケットのCSV_en.csvは現在アクセスできません。
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で、ブラウザーからファイルにアクセスできました!
長いので短縮URLとかを使ったほうがいいのかも。
さらに
参考ですがNGINXをフロントに立ててICOSを静的なWebサーバー的に使う方法の記事もありました。
フー!両方できた!
ということで満足してたんですが、、、
もしかして Githubでいいんじゃね?と
思いやってみたら、簡単にできました。単にファイルアップしてView Rawで表示されるURLを使えばよかったのでした。。
https://raw.githubusercontent.com/{ユーザー}/{リポジトリ名}/master/{ファイル名}
https://raw.githubusercontent.com/ishida330/repo1/master/CSV_jp.csv
ですよね。。 偉大だなあ。。あまりに無駄な知識をつけてしまったので、さらに無駄を強化すべく、記事にしました。ここまでお付き合いいただき、ありがとうございました。