У меня есть корзина my-bucket-name
, и я хочу предоставить временный доступ к некоторым file.pdf
в folder-name
. По умолчанию я получаю следующую ссылку, используя boto3:
https://my-bucket-name.s3.amazonaws.com/folder-name/file.pdf?AWSAccessKeyId=<key>&Signature=<signature>&x-amz-security-token=<toke>&Expires=<time>
Но также у меня есть псевдоним DNS, my.address.com
сопоставлен с my-bucket-name.s3.amazonaws.com
. Конечно, если я использую это непосредственно, я получил SignatureDoesNotMatch
от Амазонки. Поэтому я использую следующий код для генерации предварительно подписанной ссылки:
from botocore.client import Config
kwargs = {}
kwargs['endpoint_url'] = f'https://my.address.com'
kwargs['config'] = Config(s3={'addressing_style': 'path'})
s3_client = boto3.client('s3', **kwargs)
url = s3_client.generate_presigned_url(ClientMethod='get_object',
Params={
'Bucket': 'my-bucket-name',
'Key': 'folder-name/file.pdf'
},
ExpiresIn=URL_EXPIRATION_TIME)
В результате он возвращает мне следующую ссылку:
https://my.address.com/my-bucket-name/folder-name/file.pdf?AWSAccessKeyId=<key>&Signature=<signature>&x-amz-security-token=<toke>&Expires=<time>
С этим связаны две проблемы:
- Я не хочу раскрывать имя своего сегмента, поэтому
my-bucket-name/
следует опустить - Эта ссылка не работает, я получаю
<Code>SignatureDoesNotMatch</Code>
<Message>
The request signature we calculated does not match the signature you provided. Check your key and signing method.
</Message>
Вот эти вопросы:
- Можно ли получить работоспособную ссылку, не раскрывая имя корзины?
- Я уже читал кое-что о том, что пользовательские домены только возможно для HTTP, а не для доступа HTTPS, это правда? Что мне делать в этом случае?
- Псевдоним DNS не был сделан мной, поэтому я не уверен, работает ли он или настроен правильно, что я должен проверить / попросить, чтобы убедиться, что он будет работать на s3?
В настоящее время я немного потерян в документах Amazon. Также я новичок во всем этом AWS материал.