Загрузка файлов из корзины AWS S3 с помощью boto3 приводит к ClientError: произошла ошибка (403): запрещено

#python #amazon-web-services #amazon-s3 #boto3 #botocore

#python #amazon-веб-сервисы #amazon-s3 #boto3 #botocore

Вопрос:

Я пытаюсь загрузить файлы из корзины s3, используя идентификатор ключа доступа и секретный ключ доступа, предоставленныеhttps://db.humanconnectome.org. Однако, несмотря на то, что я могу перемещаться по базе данных и находить файлы (поскольку я настроил свои учетные данные через aws cli), попытка загрузить их приводит к следующей ошибке: «botocore.exceptions.ClientError: произошла ошибка (403) при вызове операции HeadObject: запрещено»

С теми же учетными данными я могу просматривать ту же базу данных и загружать файлы вручную через браузер облачного хранилища, такой как Cyberduck, поэтому доступ Cyberduck к данным не вызывает ошибку 403 Forbidden.

Я также проверил, что boto3 может получить доступ к моим учетным данным aws, а также попытался их жестко закодировать.

То, как я пытаюсь загрузить данные, очень просто и копирует пример документов boto3:https://boto3.amazonaws.com/v1/documentation/api/latest/guide/s3-example-download-file.html

 s3 = boto3.client('s3',
    aws_access_key_id=ACCESS_KEY_ID,
    aws_secret_access_key=ACCESS_KEY,)

s3.download_file(Bucket=BUCKET_NAME, Key=FILE_KEY, Filename=FILE_NAME)

  

Это должно загрузить файл в местоположение и файл, указанные FILE_NAME , но вместо этого вызывает ошибку 403 Forbidden.

Комментарии:

1. Попробуйте убедиться, что у вас есть правильное имя корзины s3 и правильный ключ файла. Согласно docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectGET.html Если у вас нет разрешения ListObject для этой корзины, вы получите 403 (доступ запрещен) вместо 404 («нет такого ключа»). Таким образом, код ошибки может немного вводить в заблуждение.

Ответ №1:

Вам также нужно будет передать область корзины при загрузке файла. Попробуйте настроить, region используя CLI или pass region_name при создании клиента.

 s3 = boto3.client('s3',
    aws_access_key_id=ACCESS_KEY_ID,
    aws_secret_access_key=ACCESS_KEY,
    region_name=AWS_REGION)
  

https://boto3.amazonaws.com/v1/documentation/api/latest/guide/quickstart.html

Комментарии:

1. Все еще не работает, несмотря на указание региона в моем случае:(

Ответ №2:

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

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

Странно, что они выдают вам запрещенную ошибку в отличие от ошибки «не найдено», но они это делают.