boto3でS3の署名付きURLを発行する方法!

2023/02/08に公開

概要

Lambdaからboto3を使ってS3にあるファイルをダウンロードするためのコードが必要になったので備忘録として書いておきます。
LambdaのIAMポリシーなどの設定も必要なのでそれらに関連した内容も記載します。

ポリシーの作成

Lambdaリソースの作成方法については省略します。
IAMロールは作成済みとして、そのIAMロールにポリシーをアタッチします。
必要なポリシーはAmazonS3ReadOnlyAccessです。
もう少し厳密に設定する場合はs3:GetObjectの権限があるとOKです。

ソースコード

サンプルのコードです。
例外などは適宜実装してください。

def generate_s3_presigned_url(object_key, bucket_name, expiration):
    presigned_url = ''
    try:
        presigned_url = s3_client.generate_presigned_url('get_object',
                                                        Params={'Bucket': bucket_name, 'Key': object_key},
                                                        ExpiresIn=expiration)
    except Exception as e:
        raise e
    
    return presigned_url

まとめ

S3のオブジェクトをWebアプリケーションで配信する場合によく使うのでまとめました。
誰かのお役に立てたら幸いです。

Discussion