S3 Pre-Signed URLを生成するだけのGemを書きました

2015.02.24

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

S3にはPre-Signed URLという機能があり、S3に置いたバケットに対して事前にシグネチャを発行することでプライベートなコンテンツを共有するためのURLを生成することができます。

大変便利な機能ですが、作成するためにはプログラムを都度作る必要があるのは少し面倒です。なのでコマンドラインから生成できるようにしたいと思いPresignerというGemを書き、リリースしました。

使い方

Gemをインストールするだけで動きます。

$ gem install presigner

使い方は以下のとおりです。

$ presigner generate --bucket bucketname --key tmptxt --duration 3600

--bucket--keyオプションでバケット名とバケット内のオブジェクトパスを記載します。--durationでURLの有効期限を指定します。単位は秒です。
上記コマンドを実行すると以下のようになります。

$ presigner generate --bucket mochizuki-testbucket --key tmp.txt --duration 60
https://mochizuki-testbucket.s3-ap-northeast-1.amazonaws.com/tmp.txt

生成されたURLにブラウザからアクセスすると、内容が確認できます。上記例では60秒間(=1分)だけ有効なURLが発行されます。

有効期限が切れたURLにアクセスすると、下のようなエラー画面が表示されます。

https___mochizuki-files_s3-ap-northeast-1_amazonaws_com_tmp_txt_X-Amz-Algorithm_AWS4-HMAC-SHA256_X-Amz-Credential_AKIAIO3UOEN5JFO4HVKA_2F20150224_2Fap-northeast-1_2Fs3_2Faws4_request_X-Amz-Date_20150224T094431Z_X-Amz-Expires_0_X-Amz-Signatu

まとめ

Pre-Signed URLは様々な用途がありますが、プライベートなコンテンツの共有などに使うこともできます。例えばメールに添付できないような大容量のファイルをアップロードしてPre-Signed URLを発行することでファイル便のように使うこともできます。
Presigner自体の機能はまだまだ全然足りないので、今後アップデートしていきます。