2014-10-27 3 views
2

Есть несколько других вопросов по этому вопросу:Начало boto.exception.S3ResponseError: S3ResponseError: 403 Forbidden при загрузке файла

boto.exception.S3ResponseError: S3ResponseError: 403 Forbidden

S3ResponseError: S3ResponseError: 403 Forbidden

S3ResponseError: 403 Forbidden using boto

Python: Amazon S3 cannot get the bucket: says 403 Forbidden

Однако, похоже, у меня может быть другая проблема (например, c lock skew не проблема, и я уже пробовал настройку validate=False, и я считаю, что у меня есть правильный ключ и секретный ключ, потому что попытка поддельного ключа или секретного ключа дает мне разные ошибки). Вот мой сценарий:

import boto 
import sys 
from boto.s3.key import Key 

BUCKET_NAME = sys.argv[1] 
AWS_ACCESS_KEY_ID = sys.argv[2] 
AWS_SECRET_ACCESS_KEY = sys.argv[3] 

conn = boto.connect_s3(AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY) 
bucket = conn.get_bucket(BUCKET_NAME, validate=False) 
k = Key(bucket) 
k.key = 'barbaz' 
k.set_contents_from_filename('/tmp/barbaz.txt') 

И результат:

Traceback (most recent call last): 
    File "/home/jonderry/sdmain/src/scripts/jenkins/upload_to_s3.py", line 16, in <module> 
    k.set_contents_from_filename('/tmp/barbaz.txt') 
    File "/usr/local/lib/python2.7/dist-packages/boto/s3/key.py", line 1360, in set_contents_from_filename 
    encrypt_key=encrypt_key) 
    File "/usr/local/lib/python2.7/dist-packages/boto/s3/key.py", line 1291, in set_contents_from_file 
    chunked_transfer=chunked_transfer, size=size) 
    File "/usr/local/lib/python2.7/dist-packages/boto/s3/key.py", line 748, in send_file 
    chunked_transfer=chunked_transfer, size=size) 
    File "/usr/local/lib/python2.7/dist-packages/boto/s3/key.py", line 949, in _send_file_internal 
    query_args=query_args 
    File "/usr/local/lib/python2.7/dist-packages/boto/s3/connection.py", line 664, in make_request 
    retry_handler=retry_handler 
    File "/usr/local/lib/python2.7/dist-packages/boto/connection.py", line 1068, in make_request 
    retry_handler=retry_handler) 
    File "/usr/local/lib/python2.7/dist-packages/boto/connection.py", line 939, in _mexe 
    request.body, request.headers) 
    File "/usr/local/lib/python2.7/dist-packages/boto/s3/key.py", line 882, in sender 
    response.status, response.reason, body) 
boto.exception.S3ResponseError: S3ResponseError: 403 Forbidden 
<?xml version="1.0" encoding="UTF-8"?> 
<Error><Code>AccessDenied</Code><Message>Access Denied</Message><RequestId>***someRequestId***</RequestId><HostId>***someHostId</HostId></Error> 

Любые идеи, что это проблема, или как диагностировать дальше?

+0

Вы пытались загрузить с помощью тех же ключей, используя s3cmd? просто чтобы убедиться, что у вас есть права доступа к этому ведру. – mcniac

+0

Я просто попробовал 's3cmd'. Я не получаю ошибки, но файл не отображается в ведре, как ожидалось. Я выпустил следующую команду: 's3cmd -c/path/to/config/file put /tmp/bazbar.txt s3: // bucket-name' – jonderry

ответ

2

Похоже, что вы не имеете права писать на этом ведре. Что такое политика ведра? Можете ли вы убедиться, что этот пользователь IAM может надеть это ведро?

+0

Мне пришлось добавить к« Authenticated Users »разрешение на загрузку/удаление. Добавление политики тоже сработало бы, но для этого конкретного случая пользовательский интерфейс разрешений был самым простым способом решения проблемы. – jonderry

+2

Не используйте «Аутентифицированные пользователи»! Это очень вводит в заблуждение, так как дает доступ к вашему ведру всем авторизованным пользователям AWS (например, я, например). Амазонка должна прояснить ситуацию. –

28

Это также произойдет, если настройки времени вашего станка неверны

+2

Это оказалось моей проблемой. Время моей виртуальной коробки вышло из синхронизации с реальностью. – JayD3e

+0

Life saver! Установка 'ntp' сразу. – Rafa

+4

Это оказалось моей проблемой. Нужно просто сделать «бродячую перезагрузку» на моей виртуальной коробке. – JayD3e

0

я тоже была эта проблема, когда я попытался validate=False и ntpdate, и давая «Авторизованные пользователи» разрешение для загрузки/удаления на AWS. Мое разрешение, вероятно, редко, но на всякий случай это сделало так:

Я начал запускать свое приложение Django с учетными данными в своей среде для своего ведра «xyz». Затем я изменил учетные данные, чтобы загрузить в ковш моего друга «abc». Между этими учетными данными было несоответствие, поэтому все, что мне нужно было сделать, - это перезапустить стрельбу.

+0

Исходя из того, что я понимаю, предоставление разрешения «Любой пользователь Authenticated AWS» применяется к любому аутентифицированному пользователю aws, а не только к тем, кто прошел аутентификацию в вашей конкретной учетной записи, поэтому это решение является проблемой безопасности. – kloddant