S3の署名付きURLを発行するプライベートノードを作成しました

はじめに

Amazon S3は、クラウド上でファイルを安全に保存・共有できるとても強力なストレージサービスです。しかし、クライアントからS3にファイルをアップロードしたい場合、クライアントに対して直接S3へのアクセス権を与えるのはセキュリティリスクとなります。
そこで、S3の署名付きURLが役立ちます。署名付きURLを利用すれば、一定時間だけ有効なURLをクライアントに提供し、安全にファイルをアップロード・ダウンロードすることができます。

今回、S3の署名付きURLを簡単に発行できるプライベートノード(署名付きURL発行ノード)を作成しました。このノードは、AWS SDK for JavaScript V3を使用しており、AWS STS(セキュリティトークンサービス)にも対応しています。

S3の署名付きURLとは?

Amazon S3の署名付きURLは、特定のファイルに一時的にアクセスできる特別なURLです。このURLを使うと、指定された時間内にファイルをダウンロードしたりアップロードしたりできます。
通常、S3にアクセスするにはAWSの認証情報が必要ですが、署名付きURLを使えば、認証情報を知らなくてもクライアントからS3に安全にアクセスできます。

プライベートノード解説

今回作成したプライベートノードは、enebularのクラウド実行環境を使ったアプリケーションでの利用を想定しています。
enebularのクラウド実行環境は、AWS Lambdaの仕組みを使っているため6MBのペイロードサイズ制限があります。署名付きURL発行ノードを使うとこの制限を回避してS3にアクセスできます。

概要

  • 名前:create-s3-presigned-url(パッケージ名:enebular-privatenode-contrib-s3-presigned-url)
  • 機能:
    • S3のPutObject(ファイルアップロード)とGetObject(ファイルダウンロード)の署名付きURLを発行する
    • AWS STS対応(署名付きURL生成時に一時的セキュリティ認証情報を使用)
  • その他:
    • ライブラリはAWS SDK for JavaScript V3を利用

AWS STS対応について

署名付きURLにはAWSのアクセスキーIDが含まれます。これをクライアント側に開示することは直接的なセキュリティリスクにはならないものの、安易に開示することは避けたいと考える方もいるかもしれません。そこで、AWS STSを利用することで一時的なセキュリティ認証情報を取得して、その情報を使用して署名付きURLを発行できます。

プロパティ

入力

  • プロパティ
    • アクセスキーID:IAMユーザーのアクセスキーID。環境変数で設定します。
    • シークレットアクセスキー:IAMユーザーのシークレットアクセスキー。環境変数で設定します。
    • Use STSフラグ:チェックを入れるとAWS STSを利用する設定になります。
    • ロールARN:S3アクセス許可を設定したロールARN。AWS STS利用の場合必要です。環境変数で設定します。
    • リージョン:S3バケットのリージョンコード。環境変数で設定します。
    • バケット名:S3バケット名。環境変数で設定します。
    • アクション:GetObjectかPutObjectをリストから選択します。
  • msgオブジェクト
    • key:アクセス先のオブジェクトのキー名(ファイル名)。
    • region:アクセス先のS3のリージョンコード。環境変数で設定済みの場合は不要です。
    • bucket:アクセス先のS3バケット名。環境変数で設定済みの場合は不要です。

出力

  • msgオブジェクト
    • payload:S3の署名付きURL

使い方

  1. S3バケットの作成:
    • 最初にS3バケットを作成し、そのバケット名とリージョンコードをメモします。
  2. IAMユーザー、IAMロールの作成:
    • 適切な権限をもつIAMユーザーを作成し、アクセスキーID、シークレットアクセスキーを取得します。STSを利用する場合は、IAMロールも作成してARNを取得します。
  3. プライベートノードのインポート:
    • enebularのDiscover Assetsからプライベートノード「create-s3-presigned-url」を
      プロジェクトにインポートします。
  4. フロー、クラウド実行環境の作成:
    • enebularのアセットでフローを追加します。
    • クラウド実行環境で使う場合は、クラウド実行環境を作成します。
  5. 環境変数の設定:
  6. フローの構築:
    • enebularのWebフローエディターでフローを編集します。
      フロー例(クラウド実行環境でHTTPトリガーを有効化して使うフローの例)

    • 「create s3 url」ノードを配置し、プロパティ(環境変数とアクション)を設定します。
    • フローを保存します。
  7. フローのデプロイ:

まとめ

今回作成した署名付きURL発行ノードにより、S3へのファイルのアップロード・ダウンロードが簡単かつ安全に行えるようになりました。また、AWS STSを利用することでセキュリティリスクを軽減しつつ、クラウド実行環境を利用したS3ファイル操作が可能です。
興味がある方は、ぜひ試してみてください!