一般社団法人 全国個人事業主支援協会

COLUMN コラム

  • Lambdaで生成した署名付きURLって数時間しか有効期限が保持できないの?という事案に遭遇

現在着手中のプロジェクトに、新規にCSV出力機能を追加することになった。

システムの流れ、構成は以下のイメージ

〜〜〜〜〜〜〜〜〜〜

・Web画面からCSV出力依頼APIをリクエスト

・APIはSQSにキューメッセージを登録

・SQSのキューをトリガーにLambdaが起動。LambdaでCSVファイルをS3に配置し、署名付きURLを生成してDBにほぞん

・Web画面で署名付きURLを表示し、ユーザーにダウンロードさせる

〜〜〜〜〜〜〜〜〜〜〜

 

この時、署名付きURLの有効期限は、S3にファイル配置してから「3日間」の想定でいた。

実装が完了し、動作確認していたところ

午前中に発行したCSVと署名付きURLが、午後になって参照してもエラーになっていることがわかった。

“`

<Error> <Code>ExpiredToken</Code> <Message>The provided token has expired.</Message>

“`

 

◾️なぜ有効期限3日の署名付きURLが半日程度で使えなくなってしまうのか。

原因は「Lambdaで生成した」ことにある。

Lambdaは署名付きURLを生成するとき、

AWS Security Token Service (STS:一時的なセキュリティ認証情報) を使用している。

そしてこのSTSの有効期限が署名付きURLに設定した有効期限より早く切れた場合、生成した署名付きURLも同時に期限切れとなる仕組みらしい。

完全に盲点。。

既存の機能で、ボタン押下で一時的な署名付きURLを都度発行して参照させるものがあったが、あちらが正解だったようだ。。

 

そもそも署名付きURLなどは長期にDBに保存するようなものではないのだと知った。

そして今回の機能を突貫で既存同じく、都度発行形式に切り替えたのだ。

いやぁ、、メンバーの方々には大変申し訳ないことだった。設計者は私です。。本当にすみませんでしたー。

この記事をシェアする

  • Twitterでシェア
  • Facebookでシェア
  • LINEでシェア