Cloudfront URL 永不过期
Cloudfront URL never expires
场景:
我正在尝试为 s3 中的对象生成云端签名 urls。
步骤:
1. 在 s3 存储桶中创建一个对象并使其成为 public.
2. 创建了一个指向那个 s3 存储桶的云端分布。
3. 使用下面的代码生成签名 url
以下是从 docs.
生成云端签名 url 的代码
import datetime
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('path/to/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())
key_id = 'AKIAIOSFODNN7EXAMPLE'
url = 'https://d2949o5mkkp72v.cloudfront.net/hello.txt'
expire_date = datetime.datetime(2017, 1, 1)
cloudfront_signer = CloudFrontSigner(key_id, rsa_signer)
# Create a signed url that will be valid until the specfic expiry date
# provided using a canned policy.
signed_url = cloudfront_signer.generate_presigned_url(url, date_less_than=expire_date)
print(signed_url)
输出:
https://d2949o5mkkp72v.cloudfront.net/hello.txt?Expires=1483228800&Signature=some_signature&Key-Pair-Id=AKIAIOSFODNN7EXAMPLE
上面的 url 指向一个过去的日期,但我仍然可以通过这个 URL 访问该对象。我还可以通过截断 Signature 和 Key-Pair-Id 查询参数来访问该对象。
这里可能出了什么问题?
我找到了问题的解决方案。实际上错误不在代码中,而是在云端分发的配置中。
缺少以下配置:
希望对您有所帮助:)
如果编辑现有分发的配置,您会在“行为”选项卡中行为记录的编辑设置中找到此“限制查看者访问”设置。
场景: 我正在尝试为 s3 中的对象生成云端签名 urls。
步骤:
1. 在 s3 存储桶中创建一个对象并使其成为 public.
2. 创建了一个指向那个 s3 存储桶的云端分布。
3. 使用下面的代码生成签名 url
以下是从 docs.
生成云端签名 url 的代码import datetime
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('path/to/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())
key_id = 'AKIAIOSFODNN7EXAMPLE'
url = 'https://d2949o5mkkp72v.cloudfront.net/hello.txt'
expire_date = datetime.datetime(2017, 1, 1)
cloudfront_signer = CloudFrontSigner(key_id, rsa_signer)
# Create a signed url that will be valid until the specfic expiry date
# provided using a canned policy.
signed_url = cloudfront_signer.generate_presigned_url(url, date_less_than=expire_date)
print(signed_url)
输出:
https://d2949o5mkkp72v.cloudfront.net/hello.txt?Expires=1483228800&Signature=some_signature&Key-Pair-Id=AKIAIOSFODNN7EXAMPLE
上面的 url 指向一个过去的日期,但我仍然可以通过这个 URL 访问该对象。我还可以通过截断 Signature 和 Key-Pair-Id 查询参数来访问该对象。
这里可能出了什么问题?
我找到了问题的解决方案。实际上错误不在代码中,而是在云端分发的配置中。
缺少以下配置:
希望对您有所帮助:)
如果编辑现有分发的配置,您会在“行为”选项卡中行为记录的编辑设置中找到此“限制查看者访问”设置。