2017-02-20 18 views
0

Я пытаюсь получить доступ к ведро S3 из программы python, запущенной на экземпляре EC2. Код и ошибка прилагается:Ошибка 400 при доступе к ведро S3 в области ap-south-1 с помощью boto

from boto.s3.connection import S3Connection   
import boto   

conn=S3Connection()    
bucket=conn.get_bucket('nplr1')   

Ошибка:

Traceback (most recent call last): 
    File "Main.py", line 140, in <module> 
    main() 
    File "Main.py", line 33, in main 
    conn.get_all_buckets() 
    File "/usr/local/lib/python2.7/dist-packages/boto/s3/connection.py", line 444, in get_all_buckets 
    response.status, response.reason, body) 
boto.exception.S3ResponseError: S3ResponseError: 403 Forbidden 
<?xml version="1.0" encoding="UTF-8"?> 
<Error><Code>InvalidAccessKeyId</Code><Message>The AWS Access Key Id you provided does not exist in our records.</Message> 

Это мой /etc/boto.cfg файл

[Credentials]    
aws_access_key_id = 'id'    
aws_secret_access_key = 'key' 

[s3]  
region='ap-south-1'   
aws_access_key_id ='id'    
aws_secret_access_key = 'key' 

Что такое проблема с этим ? Почему я не могу получить доступ к ведру?

+0

Я считаю, что 'хозяин' должен быть 'регион'. – hurturk

+0

Эй, @zatta, я попробовал заменить хост с регионом, и я получил эту ошибку: boto.exception.S3ResponseError: S3ResponseError: 403 Forbidden –

+0

Правильно ли указано ведро? Если да, доступны ли предоставленные ключи? – franklinsijo

ответ

0

Проблема связана с тем, что ap-south-1 использует Подпись v4 для подписи запросов, а boto не признает этого. Также нет boto3.

Однако вы можете переопределить конфигурацию подписи. Вот некоторые рабочий код в boto3:

import boto3 
from botocore.client import Config 

s3 = boto3.resource('s3', config=Config(signature_version='s3v4')) 
bucket=s3.get_bucket('nplr1') 

Для boto, мне удалось получить его работу, прямо указав хост для ap-south-1:

from boto.s3.connection import S3Connection   
import boto   

conn=S3Connection(host='s3.ap-south-1.amazonaws.com')    
bucket=conn.get_bucket('nplr1') 

Полезная информация была получена от:

+0

Большое спасибо! Это была проблема. Решено сейчас :) –

0

Ваш код не обращается к профилю [s3] в вашем файле учетных данных. Профили должны быть явно запрошены при создании клиентского соединения. Поэтому регион, вероятно, не подбирается.

Я рекомендую вам проверить свои учетные данные с помощью AWS Command-Line Interface (CLI). Например, запуск aws s3 ls будет проверять, есть ли у вас разрешение на перечисление ковшей Amazon S3. Если это сработает, вы можете выполнить дополнительные команды для проверки своих прав (например, aws s3 ls s3://nplr1).

+0

Эй @ Джон, я попробовал запустить команду, но у меня такая же ошибка. Я попробовал команду 'aws configure' и добавил учетные данные. Затем я попробовал 'aws s3 ls' и нашел свое ведро. Но когда я запускаю программу, я получаю ошибку 400: Плохой запрос –

+0

@John Существует область 'ap-south-1'. Недавно было добавлено. – franklinsijo

+1

@franklinsijo Упс! Ты прав! Сожалею! Обновлено. –