LoginSignup
1
1

CloudFront+S3・Lambdaで署名付きURLを発行する

Last updated at Posted at 2023-05-12

はじめに

CloudFront用の署名付きURLを発行して共有する必要があったので、そのやり方を記録しています。

CloudFrontディストリビューションの作成が必要ですが、
多くの記事が存在しているようなので、今回はその手順は省略させてもらいます。

実践

Lambdaソース

lambda_function.py
from datetime import datetime, timedelta
from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.primitives import serialization
from cryptography.hazmat.primitives.asymmetric import padding
from botocore.signers import CloudFrontSigner

def rsa_signer(message):
    with open('../private_key.pem', 'rb') as key_file: 
        private_key = serialization.load_pem_private_key(
            key_file.read(),
            password=None,
            backend=default_backend()
        )
    return private_key.sign(message, padding.PKCS1v15(), hashes.SHA1())

def lambda_handler(event, context):
    key_id = 'xxxxx'                                                               # ディストリビューション ID
    url = 'https://xxxxx.cloudfront.net/'                    # ドメイン名
    file = 'xxxxx.mp4'                                                            # 任意のファイル
    expire_date = datetime.utcnow() + timedelta(minutes=30)  # 有効期間

    cloudfront_signer = CloudFrontSigner(key_id, rsa_signer)

    signed_url = cloudfront_signer.generate_presigned_url(
        url + file,
        date_less_than=expire_date)

    return signed_url

1
1
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
1
1