Подтвердить что ты не робот

Python: Amazon S3 не может получить ведро: говорит 403 Запрещено

У меня есть ведро для моей организации в Amazon S3, которое выглядит как mydev.orgname

  • У меня есть приложение Java, которое может подключаться к Amazon S3 с учетными данными и может подключаться к S3, создавать, читать файлы

  • У меня есть требование, когда приложение считывает данные из Python из того же ведра. Поэтому я использую boto для этого.

Я делаю следующее в другом, чтобы получить ведро

>>> import boto
>>> from boto.s3.connection import S3Connection
>>> from boto.s3.key import Key
>>> 
>>> conn = S3Connection('xxxxxxxxxxx', 'yyyyyyyyyyyyyyyyyyyyyy')
>>> conn
S3Connection:s3.amazonaws.com

Теперь, когда я пытаюсь получить ведро, я вижу ошибку

>>> b = conn.get_bucket('mydev.myorg')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Library/Python/2.7/site-packages/boto/s3/connection.py", line 389, in get_bucket
    bucket.get_all_keys(headers, maxkeys=0)
  File "/Library/Python/2.7/site-packages/boto/s3/bucket.py", line 367, in get_all_keys
    '', headers, **params)
  File "/Library/Python/2.7/site-packages/boto/s3/bucket.py", line 334, in _get_all
    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>EEC05E43AF3E00F3</RequestId><HostId>v7HHmhJaLLQJZYkZ7sL4nqvJDS9yfrhfKQCgh4i8Tx+QsxKaub50OPiYrh3JjQbJ</HostId></Error>

Но из приложения Java все работает.

Я делаю что-то не так здесь?

4b9b3361

Ответ 1

После того, как моя "Пользователь" стала намного более сильной, эта ошибка исчезла. Средства Пользователь дал разрешение на get_bucket

Ответ 2

Предоставление пользователю "более сильной роли" - не правильное решение. Это просто проблема с использованием библиотеки boto. Очевидно, что вам не нужны дополнительные разрешения при использовании библиотеки Java S3.

Правильный способ использования boto в этом случае:

b = conn.get_bucket('my-bucket', validate=False)
k = b.get_key('my/cool/object.txt') # will send HEAD request to S3
...

В принципе, boto по умолчанию (что является ошибкой со своей стороны IMHO), предполагается, что вы хотите взаимодействовать с ведром S3. Конечно, иногда вы этого хотите, но тогда вы должны использовать учетные данные, имеющие разрешения для операций с ведроми S3. Но более популярным вариантом использования является взаимодействие с объектами S3, и в этом случае вам не нужны специальные разрешения на уровне ведра, поэтому использование validate=False kwarg.

Ответ 3

этот ответ работает для меня:)

Я сделал

  • Настройка политики корзины S3
  • настройка времени
  • bucket = conn.get_bucket (BUCKET_NAME, validate = False)

Ответ 4

Я получил эту ошибку, когда мой код доступа был неправильным!