はじめに
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