Я использую пакет boto3
для подключения извне кластера s3 (т. Е. Сценарий в настоящее время выполняется не в «облаке» AWS, а из моего MBP, подключающегося к соответствующему кластеру).Мой код:
s3 = boto3.resource(
"s3",
aws_access_key_id=self.settings['CREDENTIALS']['aws_access_key_id'],
aws_secret_access_key=self.settings['CREDENTIALS']['aws_secret_access_key'],
)
bucket = s3.Bucket(self.settings['S3']['bucket_test'])
for bucket_in_all in boto3.resource('s3').buckets.all():
if bucket_in_all.name == self.settings['S3']['bucket_test']:
print ("Bucket {} verified".format(self.settings['S3']['bucket_test']))
Теперь я получаю это сообщение об ошибке:
botocore.exceptions.ClientError: An error occurred (SignatureDoesNotMatch) when calling the ListBuckets operation
Мне известно о последовательности проверки учетных данных aws, и я пробовал разные вариантымои переменные окружения и ~/.aws/credentials
, и я знаю, что учетные данные в соответствии с моим сценарием .py должны быть переопределены, однако я все еще вижу это сообщение об ошибке SignatureDoesNotMatch.Любые идеи, где я могу пойти не так?Я также попытался:
# Create a session
session = boto3.session.Session(
aws_access_key_id=self.settings['CREDENTIALS']['aws_access_key_id'],
aws_secret_access_key=self.settings['CREDENTIALS']['aws_secret_access_key'],
aws_session_token=self.settings['CREDENTIALS']['session_token'],
region_name=self.settings['CREDENTIALS']['region_name']
)
s3 = boto3.resource('s3')
for bucket in s3.buckets.all():
print(bucket.name)
... однако я также вижу ту же ошибку трассировки.