Я связал пользовательский домен с моим дистрибутивом CloudFront и ограничил доступ к корзине, чтобы разрешить только доступ к объектам из корзины только через CloudFront. Я установил пользовательский домен в django -хранилищах, но сгенерированный URL-адрес не подписан, и каждый раз, когда я пытаюсь получить доступ к загруженным объектам, доступ к нему запрещается.
Как создать подписанный URL-адрес для моего Распространение CloudFront с учетом того, что я сопоставил его с пользовательским доменом?
Я добавил фрагменты соответствующего кода для контекста.
settings.py
if 'AWS_ACCESS_KEY_ID' in os.environ:
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'property233/static'),
]
AWS_ACCESS_KEY_ID = os.environ['AWS_ACCESS_KEY_ID']
AWS_SECRET_ACCESS_KEY = os.environ['AWS_SECRET_ACCESS_KEY']
AWS_STORAGE_BUCKET_NAME = os.environ['AWS_STORAGE_BUCKET_NAME']
AWS_S3_CUSTOM_DOMAIN = os.environ['AWS_S3_CUSTOM_DOMAIN']
# AWS_S3_CUSTOM_DOMAIN = '%s.s3.amazonaws.com' % AWS_STORAGE_BUCKET_NAME
AWS_S3_OBJECT_PARAMETERS = {
'CacheControl': 'max-age=86400',
}
AWS_STATIC_LOCATION = 'static'
STATICFILES_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'
STATIC_URL = "https://%s/%s/" % (AWS_S3_CUSTOM_DOMAIN, AWS_STATIC_LOCATION)
DEFAULT_FILE_STORAGE = 'property.storage_backends.MediaStorage'
PRIVATE_FILE_STORAGE = 'property.storage_backends.PrivateDocumentStorage'
storage.py
from storages.backends.s3boto3 import S3Boto3Storage
class MediaStorage(S3Boto3Storage):
location = 'media'
file_overwrite = False
class PrivateDocumentStorage(S3Boto3Storage):
location = 'documents'
default_acl = 'private'
file_overwrite = False
models.py
class Landlord(models.Model):
active = models.BooleanField(default=True)
property_management_proposal = models.FileField(storage=PrivateDocumentStorage())
signed_agreement = models.FileField(storage=PrivateDocumentStorage(), )
owner_id = models.FileField(storage=PrivateDocumentStorage(), verbose_name='ID Card of property owner')
property_deed = models.FileField(storage=PrivateDocumentStorage(), default='document.pdf')
land_title_verification = models.FileField(storage=PrivateDocumentStorage())
facilities_checklist = models.FileField(storage=PrivateDocumentStorage())
video = models.URLField(default='https://youtube.com')
class Meta:
app_label = 'property'
def __str__(self):
return self.property_owner_name