У меня был код Python, который подписывает URL-адреса AWS S3, которые работают годами. Мы только что добавили новую корзину в дата-центре Бахрейна AWS. Это местоположение было отключено и требовало явного включения этого центра обработки данных.
Кажется, все в порядке. Однако полученный URL-адрес всегда дает мне IllegalLocationConstraintException
, и я считаю, что boto3
генерирует неправильное доменное имя в URL-адресе.
Ошибка указывает, что запрос отправлен на us-east-1
. Я знаю, что вы должны указать регион, у нас есть 8-10 регионов, которые мы используем, и они все в порядке до этого.
URL-адрес, сгенерированный boto3.client('s3', ...).generate_presigned_url()
, кажется, дает URL для востока США S3. Учитывая что-то вроде этого:
region: me-south-1
bucket: bucket-name
key: full/path/to/file.txt
Вы ожидаете что-то вроде этого для подписанного URL:
https://bucket-name.s3.me-south-1.amazonaws.com/full/path/to/file.txt?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AZIAJ4252S33LNN3Y14Q/20100504/me-south-1/s3/aws4_request&X-Amz-Date=20200504TA22522Z&X-Amz-Expires=3600&X-Amz-SignedHeaders=host&X-Amz-Signature=1717275aff4af5fcff2f44f74615fadb5ba448eb83219c88f59d0792d4e44b8f
Обратите внимание на домен: bucket-name.s3.me-south-1.amazonaws.com
Но что мы получаем из boto3.client('s3', ...).generate_presigned_url()
:
https://bucket-name.s3.amazonaws.com/full/path/to/file.txt?X-Amz-Algorithm=...
Обратите внимание, что этот результирующий домен: s3.amazonaws.com
Были ли у кого-нибудь проблемы с новыми местоположениями s3, подобными этому?
Если это поможет, мы получаем полное сообщение об ошибке:
<?xml version="1.0" encoding="UTF-8"?>
<Error>
<Code>IllegalLocationConstraintException</Code>
<Message>
The me-south-1 location constraint is incompatible for the region specific endpoint this request was sent to.
</Message>
</Error>