URL-адрес Cloudfront никогда не истекает - PullRequest
2 голосов
/ 18 марта 2019

Scenerio: я пытаюсь создать подписанные URL-адреса облачного фронта для объектов в s3.

ШАГИ:
1. создал объект в корзине s3 и сделал его общедоступным.
2. создал облачный фронтдистрибутив, указывающий на эту корзину s3.
3. сгенерировал подписанный URL-адрес, используя код ниже

Ниже приведен код для генерации подписанных 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)

output:

https://d2949o5mkkp72v.cloudfront.net/hello.txt?Expires=1483228800&Signature=some_signature&Key-Pair-Id=AKIAIOSFODNN7EXAMPLE

Приведенный выше URL-адрес указывает на дату назад во времени, но я все еще могу получить доступ к объекту через этот URL-адрес.Также я могу получить доступ к объекту путем усечения параметров запроса Signature и Key-Pair-Id.

Что здесь может пойти не так?

1 Ответ

2 голосов
/ 18 марта 2019

Я нашел решение проблемы.На самом деле ошибка была не в коде, а в конфигурации дистрибутива Cloudfront.

Отсутствует следующая конфигурация: cloudfront signed url config option

Надеюсь, это поможет:)

...