AWSPython

PythonのBoto3を使ってS3の署名付き(期限付き)URLを発行する

AWS

PythonのS3へローカルのファイルをアップロードする方法についてのメモとなります。 boto3は便利ですね。

1. 署名付きURLとは

署名付きURLとは、S3バケットへのアクセス権限を持たないユーザーに対して一時的なアクセスを許可するために発行する一時的なURLです。

プライベートなS3バケットにプライベートなファイルを格納している場合でも、署名付きURLを発行することでURL経由でファイルを一時的に共有することができます。

有効期間を設定することで例えば5分間だけアクセス可能とする、などの制御ができます。

2. 前提条件

  • Pythonがインストールされている
  • AWS CLIの設定が完了している

3. S3へファイルをアップする

以下のスクリプトで「sample-s3-bucket」バケットにローカルファイル(./image/sample_file.txt)をアップロードできます。簡単ですね。

import boto3

bucket_name = "sample-s3-bucket"
local_file = "./image/sample_file.txt"
bucket_file = "file/sample_file.txt"

s3 = boto3.resource('s3')
bucket = s3.Bucket(bucket_name)
print(local_file --> bucket_file)
bucket.upload_file(local_file, bucket_file)

4. S3の署名付きURLを作成する

さらに先ほどアップしたファイルの署名付きURLを作成します。

今回は有効期限を120秒としています。

presigned_url = s3.generate_presigned_url(
    ClientMethod='get_object',
    Params={'Bucket': bucket_name, 'Key': bucket_file},
    ExpiresIn=120,
    HttpMethod='GET')

print(presigned_url)

うまくいくと以下のような感じのURLが表示されます。 https://sample-s3-bucket.s3.amazonaws.com/file/sample_file.txt?AWSAccessKeyId=XXXXXXX&Signature=XXXXX&Expires=1633481626

5. まとめ

boto3を使うことで非常に簡単にファイルのアップや署名付きURLを作成することができました。 一時的にアクセスさせたいファイルについての制御が非常に簡単になりますね。

Pythonのオススメ勉強方法

私がオススメするPython初心者向けの最初に購入すべき書籍は「シリコンバレー一流プログラマーが教える Pythonプロフェッショナル大全です。

シリコンバレー一流プログラマーが教える Pythonプロフェッショナル大全

この書籍は実際にシリコンバレーの一流エンジニアとして活躍している酒井潤さんが書いた本です。

内容も初心者から上級者までまとめられており、各Lessonも長すぎずに分かりやすくまとめられているので、初心者の方にもおすすめです。

シリコンバレー一流プログラマーが教える Pythonプロフェッショナル大全

今回は以上となります。

コメント