2015-06-03

期限付きURLを発行してセキュアなS3のオブジェクトにアクセスしてみる

小ネタです。
最近、真面目にawsを触っていて、今更ながらAmazon Web Services クラウドデザインパターン 設計ガイド 改訂版を読み始めました。

本書を読んでみると、AWSについて初めて知る機能も多く、本当にAWSを利用してシステム構築するためのバイブルのような本だなと感じました。
(もっと早く読んでいれば・・・)

今回は、その中でS3上のセキュアな環境下にある任意のオブジェクトに対して、「期限付きURL(pre-signed URL)」を発行してアクセスさせる方法を試してみました。

やってみる

では、早速やってみます。
私はnoderなので、node.js版のaws sdkを利用して行います。

まず、S3上に「Bucket」を作成して、任意のファイルをアップロードしておきます。

S3上にアップロードしたファイル(オブジェクト)には、
アクセスするための一意なURLが付与されていますが、今の状態では外部からアクセスできません。

確認してみます。

では、aws sdkを利用して「期限付きURL」を発行してみます。

var AWS = require('aws-sdk');
var s3 = new AWS.S3();

var params = {
  Bucket: '<Bucket名>',
  Key: '<アクセスするオブジェクト>',
  Expires: 60 //sec
};

s3.getSignedUrl('getObject', params, function(err, url) {
  console.log('The URL is', url);
});

これをコンソール上で実行すると期限付きURLが発行されます。
デフォルトではURLの有効期間が15分なので、Expiresに有効期限(sec)を指定することもできます。

では、生成された期限付きURLでアクセスしてみます。

ファイルの中身についてアクセスできました。

さいごに

S3上に静的コンテンツを配置して、任意のユーザーに限定公開できるので、
ユーザーへ期限付きURLを配布してパスワードの再入力など、特定の業務フローに組み込むことで効果を発揮しそうだと思いました。

AWSについて、もっと学習しないとなーと思います。

参考