Ответ 1
После того, как моя "Пользователь" стала намного более сильной, эта ошибка исчезла. Средства Пользователь дал разрешение на get_bucket
У меня есть ведро для моей организации в 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 все работает.
Я делаю что-то не так здесь?
После того, как моя "Пользователь" стала намного более сильной, эта ошибка исчезла. Средства Пользователь дал разрешение на get_bucket
Предоставление пользователю "более сильной роли" - не правильное решение. Это просто проблема с использованием библиотеки 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.
этот ответ работает для меня:)
Я сделал
Я получил эту ошибку, когда мой код доступа был неправильным!