2
3

More than 1 year has passed since last update.

[AWS] LambdaでS3の署名付きURLを発行する時に読む記事

Last updated at Posted at 2022-12-11

これは何?

LamdbdaでS3の署名付きURLを発行する時に、個人的につまづいたポイントを書いた記事です。

具体的なつまづいた現象としては、「Lamda上の処理で指定した有効期限に関わらず、有効期限が12時間程度になってしまう」というものでした。

「LambdaでS3の署名付きURL発行したけれど、長めに有効期限に指定したのに有効期限が切れてる~~~」でお困りの方、参考になると幸いです。

大まかな原因と解決方法

※ 私の解釈によるものが多いので、間違えていたら教えてください

原因

LambdaのIAMロールによって発行されたAWS Credentialを使用する場合、IAMロールによる一時的な認証が適用される。
※ 該当IAMロールの設定にもよるが、セッション期間は1時間~12時間で設定可能

その際に、IAMロールのセッション有効期限 < S3 署名付きURLの有効期限とした場合、IAMロール側の有効期限が優先され、結果としてS3署名付きURLの期限がうまく機能しない状態となる。

解決策

「S3署名付きURL用のIAMユーザを発行し、署名付きURLを発行する場合にのみ、そのcredentialを用いる」という解決方法をとった。

補足

  • Lambdaの環境変数と、S3用のcredentialを分けて定義する

Lambdaの環境変数では、IAMロールに応じて一時的な有効期限を持ったAWS_ACCESS_KEYなどが発行される。

AWS_ACCESS_KEYAWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEYAWS_SESSION_TOKEN – 関数の実行ロールから取得したアクセスキー。

そのため、S3用のcredentialを分けて定義したい場合は、これらと重複しないようにすべきですね。

  • やってみたけれど、解決されないんだが??

別の原因があるかもです。

あとがき

S3の署名付きURLの有効期限は、リアルタイムでデバッグしていくしかないので、結構気付きにくいポイントでした。

LambdaなどでURLを発行して、「次の日にURLでダウンロードできないんだが~~~」となったら、IAMロールのcredentialを使用していることを疑うといいかもしれません。

そして、これから同様のことをしようとしている方、参考になればと思います!

ありがとうございました。

2
3
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
2
3