La documentation boto3 a une section montrant Generate a signed URL for Amazon CloudFront:
L'exemple suivant montre comment générer une URL signé pour Amazon CloudFront. Notez que vous aurez besoin de la bibliothèque de cryptographie à suivre cet exemple:
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()
)
signer = private_key.signer(padding.PKCS1v15(), hashes.SHA1())
signer.update(message)
return signer.finalize()
key_id = 'AKIAIOSFODNN7EXAMPLE'
url = 'http://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)
CloudFront vs S3
Vous remarquerez que le code ci-dessus utilise une paire de clés publique/privée pour créer le CloudFront signé URL Cela signifie que n'importe quelle application peut générer une URL signée tant qu'elle connaît la paire de clés.
Ceci est différent de la création d'URL signées dans Amazon S3, qui utilise la clé secrète appartenant à l'utilisateur qui a généré la demande d'authentification de la demande.
Pourquoi sont-ils différents? Je ne sais pas, mais l'option keypair permet l'utilisation de CloudFront sans avoir besoin d'utilisateurs IAM, ce qui peut être utile pour les clients qui n'utilisent que CloudFront. Mais c'est juste une supposition.
Merci, j'ai vu ça bien sûr. Mais ceci, contrairement à une URL S3 directe, nécessite la signature d'une clé, avec mon RSA privé. Est-ce le seul moyen? Pourquoi y a-t-il une différence entre S3 et Cloudfront? cela n'a aucun sens pour moi, peut-être que vous pouvez expliquer le diff. –
Je ne sais pas pourquoi, mais j'ai ajouté du texte sur la différence. –
Mais le boto3 a '403' lorsqu'il accède au téléchargement du fichier par l'URL signée. – jiamo