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

COLUMN コラム

S3のデフォルトでは、すべてのオブジェクトおよびバケットはプライベートであるが、署名付き URL を使用して、オプションでオブジェクトを共有したり、顧客/ユーザーが AWS セキュリティ認証情報またはアクセス許可なしでオブジェクトをバケットにアップロードしたりすることができる。

S3のpresigned URLの生成コード例は以下になる。なおURLに含まれるRegionはaws cliのConfigから見られるため、必要に応じて、コード内のClientに明示的に指定する。

import boto3
from botocore.client import Config

# Lambda handler method
def handler(event, context):
  s3_client = boto3.client('s3', config=Config(signature_version='s3v4'))
  # s3_client = boto3.client('s3', config=Config(region_name = 'us-east-2'))
  # AWS Bucket
  s3_bucket = 'my-bucket' 
  # Generate presigned product image urls:
  s3_image_path = 'test.txt' # S3 Object key
  presigned_image_url = s3_client.generate_presigned_url('put_object',
                      Params={'Bucket': s3_bucket,
                          'Key': s3_image_path},
                      ExpiresIn=600)
  return presigned_image_url

Postmanに生成したURLを入力すれば、Curlコマンドを生成してくれる。

VPC EndpointはGatewayとInterface、どちらのものでも使用できる。
なお、Interface型の場合、Route 53などにpresigned URLのドメインでPrivate Hosted Zoneを作成し、EndpointのIPかAliasを記載する必要がある。

Curlコマンドで実行する場合、URLのhttpsをhttpに変えるか、--insecureで行う必要がある。

なお、S3のバケットをKMSのCMKで暗号化しても、presigned URLを利用する際は特に気にする必要はない。

The following two tabs change content below.

新海 道遠

最新記事 by 新海 道遠 (全て見る)

この記事をシェアする

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