9
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2018-12-13

TL;DR(要は)

  • ある事情があり、ネット上にファイルを1つだけ公開して誰でも参照できるようにしたかった
  • ICOSに目をつけ、あれこれ調べて/やったら、できた!:grin:
  • けどよく考えると、そんなん、Githubでやれば超簡単だった..:weary:

という、無駄な努力の記録です(ハアー。。:broken_heart:
(でも、せっかく調べたのと、先々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を生成

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

9
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?