【发布时间】:2021-02-03 08:42:01
【问题描述】:
我正在使用 CloudFront 提供一些私有 HLS 内容,这些内容存储在 S3 存储桶中。所有 HLS 内容都存储在我存储桶根目录的 /hls/ 目录中。
我正在使用此代码生成 /hls/*(注意 * 通配符)预签名 URL 以访问(否则无法访问)内容:
import datetime
from botocore.signers import CloudFrontSigner
from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives import hashes, serialization
from cryptography.hazmat.primitives.asymmetric import padding
from my_django_project.settings import (
AWS_CLOUDFRONT_DOMAIN_NAME,
AWS_CLOUDFRONT_KEY_ID,
AWS_CLOUDFRONT_KEY_PATH,
)
def rsa_signer(message):
with open(AWS_CLOUDFRONT_KEY_PATH, "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 get_signed_url():
key_id = AWS_CLOUDFRONT_KEY_ID
url = f"https://{AWS_CLOUDFRONT_DOMAIN_NAME}/hls/*"
expire_datetime = datetime.datetime.now() + datetime.timedelta(minutes=5)
cloudfront_signer = CloudFrontSigner(key_id, rsa_signer)
signed_url = cloudfront_signer.generate_presigned_url(
url,
date_less_than=expire_datetime,
)
return signed_url
此代码有效地生成了一个 URL,但当我尝试访问 https://{AWS_CLOUDFRONT_DOMAIN_NAME}/hls/index.m3u8 URL(这是存储在 /hls/ 目录中的文件之一)时,CloudFront 响应 403 Access Denied 错误。
我已检查我是否遵循配置 CloudFront 和 S3 以使用预签名 URL 提供私有内容的所有指南。我开始怀疑这个通配符是问题所在。
我不确定我能做些什么来解决这个问题。有什么想法吗?
【问题讨论】:
标签: amazon-web-services amazon-cloudfront http-live-streaming pre-signed-url