Подпись DoesNotMatch - Boto3 Django -хранилища - PullRequest
0 голосов
/ 12 февраля 2020

У меня есть следующая конфигурация:

Django / DRF Boto3 Django -хранилища

Я использую учетные данные пользователя IAM с одним набором ключей. Я удалил все другие наборы ключей, включая ключи root, из своей учетной записи, чтобы устранить несоответствие ключей.

Я создал новое ведро my-prod-bucket. Обновлены настройки имени корзины в моем файле env. Я запустил python3 manage.py collectstatic, и он без проблем создал новое ведро.

my .env:

AWS_ACCESS_KEY_ID=something
AWS_SECRET_ACCESS_KEY=something
AWS_STORAGE_BUCKET_NAME=my-prod-bucket

my settings.py (используя python -decouple для получения из .env ):

AWS_ACCESS_KEY_ID = config('AWS_ACCESS_KEY_ID')
AWS_SECRET_ACCESS_KEY = config('AWS_SECRET_ACCESS_KEY')
AWS_STORAGE_BUCKET_NAME = config('AWS_STORAGE_BUCKET_NAME')

AWS_S3_CUSTOM_DOMAIN = '%s.s3.ca-central-1.amazonaws.com' % AWS_STORAGE_BUCKET_NAME
AWS_S3_REGION_NAME = 'ca-central-1'


AWS_HEADERS = {
    'CacheControl': 'max-age=86400',
}

AWS_STATIC_LOCATION = 'static'
STATIC_URL = 'https://%s/%s/' % (AWS_S3_CUSTOM_DOMAIN, AWS_STATIC_LOCATION)
STATICFILES_STORAGE = 'portal.storage_backends.StaticStorage'

# =======
AWS_DEFAULT_ACL = None

AWS_AUTO_CREATE_BUCKET = True
S3_USE_SIGV4 = True

Я могу загрузить и удалить однако при попытке загрузить файл, который я получаю:

<Error>
<Code>SignatureDoesNotMatch</Code>
<Message>
The request signature we calculated does not match the signature you provided. Check your key and signing method.
</Message>
<AWSAccessKeyId>AKIA6FUWELHP36HW6QOT</AWSAccessKeyId>
<StringToSign>
AWS4-HMAC-SHA256 20200211T215631Z 20200211/ca-central-1/s3/aws4_request 703b799a80d9efd9f9e06a01ab30a8a721f2a9bafe6a3d5c92b045ea769b0d87
</StringToSign>
<SignatureProvided>
46bd882624f966d9cb8914d279f7c8f91a2b3e5e577525c13069e29f8891c1ee
</SignatureProvided>
<StringToSignBytes>
41 57 53 34 2d 48 4d 41 43 2d 53 48 41 32 35 36 0a 32 30 32 30 30 32 31 31 54 32 31 35 36 33 31 5a 0a 32 30 32 30 30 32 31 31 2f 63 61 2d 63 65 6e 74 
</StringToSignBytes>
<CanonicalRequest>
GET /media/private/cities/20/2017/london_2016.csv X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIA6FUWELHP36%2F20200211%2Fca-central-1%2Fs3%2Faws4_request&X-Amz-Date=20200211T215631Z&X-Amz-Expires=3600&X-Amz-SignedHeaders=host host:my-prod-bucket.s3.ca-central-1.amazonaws.com host UNSIGNED-PAYLOAD
</CanonicalRequest>
<CanonicalRequestBytes>
47 45 54 0a 2f 6d 65 64 69 61 2f 70 72 69 76 61 74 65 2f 63 69 74 69 65 73 2f 32 30 2f 32 30 31 37 2f 45 43 35 2e 31 2f 6c 6f 6e 64 6f 6e 5f 32 30 31 36 2e 63 73 76 0a 58 2d 41 6d 7a 2d 41 6c 67 6f 72 69 74 68 6d 3d 41 57 53 
</CanonicalRequestBytes>
<RequestId>6A85C2780914C0F5</RequestId>
<HostId>
WtPC4cEV60ybq2pEdfghdfg23tg123lVV6l/iHiaSAjL4DS0=
</HostId>
</Error>

Я не уверен, что я ' Я делаю неправильно. Я обыскал все сообщения об этой ошибке, но не смог найти ничего недавнего, соответствующего моему сценарию.

Буду очень признателен за любые идеи по устранению неполадок.

1 Ответ

0 голосов
/ 12 февраля 2020

Хорошо, так что потратив почти 2 дня, пытаясь разобраться в этом, я пришел к следующему:

Проблема в моем случае заключалась в том, что корзина была создана в зоне ca-central-1. Как только я изменил запрос на корзину в us-east-1, все сразу работало нормально без этой ошибки. Все на моем конце было настроено идеально.

Теперь, на следующий день я попытался снова подключиться к этому же ca-central-1 ведру, и на этот раз это сработало. Нет ошибки несоответствия подписи.

На данный момент я думаю, что, возможно, на AWS S3 есть «задержка времени» при создании сегментов в некоторых областях, пока они не функционируют должным образом.

Чтобы проверить мою теорию, я создал новое ведро в ca-central-1 и попытался подключиться к нему. Опять та же ошибка, что и выше для нового ковша. Дождался следующего дня, попробовал еще раз - и все работало нормально.

Помните о «временной задержке» (из-за отсутствия лучшего объяснения), если когда-либо сталкиваетесь с той же проблемой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...