SignatureDoesNotMatch при вызове PutObject с Django, Django-Storage, AWS S3, boto3
Я создал Django App и разместил его на Heroku, где я указал все параметры настройки, такие как ID ключа доступа (см. файл Settings).
AWS_ACCESS_KEY_ID= config("AWS_ACCESS_KEY_ID")
AWS_SECRET_ACCESS_KEY_ID= config("AWS_SECRET_ACCESS_KEY_ID")
AWS_STORAGE_BUCKET_NAME= config("AWS_STORAGE_BUCKET_NAME")
AWS_S3_CUSTOM_DOMAIN=f"{AWS_STORAGE_BUCKET_NAME}.s3.us-west-1.amazonaws.com"
AWS_DEFAULT_ACL="public-read"
AWS_S3_OBJECT_PARAMETERS = {"CacheControl": "max-age=86400" }
AWS_LOCATION= "static"
AWS_S3_REGION_NAME = "EU-west-1" AWS_QUERYSTRING_AUTH=False
AWS_HEADERS={"Access-Control-Allow-Origin":"*", }
DEFAULT_FILE_STORAGE= "storages.backends.s3boto3.S3Boto3Storage"
STATICFILES_STORAGE= "storages.backends.s3boto3.S3StaticStorage"
STATIC_URL= f"HTTPS://{AWS_S3_CUSTOM_DOMAIN}/static/"
MEDIA_URL=f"HTTPS://{AWS_S3_CUSTOM_DOMAIN}/media/"
DEBUG_PROPAGATE_EXCEPTIONS = True
ASSETS_ROOT = os.getenv('ASSETS_ROOT',"https://{AWS_S3_CUSTOM_DOMAIN}/static/assets")
LOGGING={
"version":1,
"disable_existing_loggers": False,
"formatters":{
"verbose":{
"format":"[%(asctime)s] %(levelname)s [%(name)s:%(lineno)s] %(message)s",
"datefmt":"%d/%b/%Y %H:%M:%S"
},
"simple":{
"format": " %(levelname)s %(message)s",
}
},
"handlers":{
"console":{
"level": "DEBUG",
"class": "logging.StreamHandler",
},
},
"loggers":{
"myapp":{
"handlers": ["console"],
"level": "DEBUG"
}
} }
Соответствующие требования:
django-storages==1.12.3 boto3==1.26.31
У кого-нибудь есть идеи, как это решить?
Я пробовал IAM пользователя с полным доступом, только S3 полный доступ, ключи доступа глобальной учетной записи и я просто продолжаю получать ошибку: "botocore.exceptions.ClientError: Произошла ошибка (SignatureDoesNotMatch) при выполнении операции PutObject: Вычисленная нами подпись запроса не соответствует предоставленной вами подписи. Проверьте ваш ключ и метод подписи." при попытке загрузить что-либо в S3. Затем веб-сайт выдает:
Internal Server Error The server encountered an unexpected internal server error (generated by the waitress)
Логгер, который я добавил в файл настроек Django, совсем не помогает, поскольку он просто показывает мне ошибку SignatureDoesNotMatch.
Я пробовал ключи доступа с + и без, так как это может быть источником ошибки. Я не смог найти никаких лучших практик о том, как вставлять ключи в настройки Heroku, но многие пользователи сообщают об ошибках при копировании ключей с сайта AWS. Я проверил это с помощью CSV-файла и вывода веб-сайта.
Я попытался добавить изображения через страницу администратора на случай, если моя HTML-страница неисправна. Та же ошибка. The
<script src="https://sdk.amazonaws.com/js/aws-sdk-2.1277.0.min.js"></script>
строка добавляется и в HTML-страницу. И я сохраняю ее через
form.save()
на моей HTML-странице.