S3 ファイル書き込み用署名付きURLを発行する

個人開発したアプリの宣伝
目的地が設定できる手帳のような使い心地のTODOアプリを公開しています。
Todo with Location

Todo with Location

  • Yoshiko Ichikawa
  • Productivity
  • Free

スポンサードリンク

非公開のACL S3bucketに対して、オブジェクトをアップロード可能とする署名付き一時URLを発行します。

以前のGETの署名付きURLの書き込みバージョン。

AWS S3 パブリックアクセス禁止のオブジェクトに署名して一時的にアクセス可能なURLを生成する - 追憶行


PUT用署名付URLの発行

import boto3

s3 = boto3.client('s3', region_name='ap-northeast-1')
url = s3.generate_presigned_url(
  ClientMethod = 'put_object',
  Params = {
    'Bucket': bucket_name, 'Key': key, 'ContentType': type
  },
  ExpiresIn = 3600,
  HttpMethod = 'PUT'
)

generate_presigned_urlで生成したURLをAPIのレスポンスなんかでクライアントに送信し、クライアントはこの一時URLを使用することでバケットにオブジェクトを書き込むことが可能です。書き込まれるオブジェクト名、S3バケットを指すKey名はこの時、指定する。つまり、クライアントは署名付URLとは違ったKey名を指定してオブジェクトをアップロードすることは出来ない。ファイル名を指定する場合は署名生成時にオブジェクト名を受け取ることになる。


署名付きURLを使用したオブジェクトの送信

署名付きURLを使用したオブジェクトの書き込みは以下のようにして使用します。

json = JSON.parse(JSON.stringify(res.data))
axios.put( "署名付URL", "オブジェクトのデータ", {
  headers: { 'Content-Type': "オブジェクトのmimeType" }
})