Ошибка импорта учетных данных aws при использовании sudo python3, но не с python3 - PullRequest
0 голосов
/ 03 июля 2019

Я новичок в aws cli, boto и работаю над проектом IoT. Недавно столкнулся с этой ошибкой: если я использую sudo python3 и пытаюсь подключиться к s3, мое соединение проходит проверку подлинности. Но если я просто использую python3, я могу подключиться. Есть идеи, почему это происходит?

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

debian@maraca:~$ sudo python3 
[sudo] password for debian: Python 3.5.3
(default, Sep 27 2018, 17:25:39) [GCC 6.3.0 20170516] on linux 
Type "help", "copyright", "credits" or "license" for more information.

>>> import boto

>>> s3 = boto.connect_s3()

Traceback (most recent call last):
File "<stdin>", line 1, in <module>

File "/usr/local/lib/python3.5/dist-packages/boto/__init__.py", line 141, in connect_s3

return S3Connection(aws_access_key_id, aws_secret_access_key, **kwargs)

File "/usr/local/lib/python3.5/dist-packages/boto/s3/connection.py", line 194, in __init__

validate_certs=validate_certs, profile_name=profile_name)

File "/usr/local/lib/python3.5/dist-packages/boto/connection.py", line 569, in __init__

host, config, self.provider, self._required_auth_capability())

File "/usr/local/lib/python3.5/dist-packages/boto/auth.py", line 1021, in get_auth_handler

'Check your credentials' % (len(names), str(names)))

boto.exception.NoAuthHandlerFound: No handler was ready to authenticate. 1 handlers were checked. ['HmacAuthV1Handler'] Check your credentials



debian@maraca:~$ python3 
Python 3.5.3 (default, Sep 27 2018, 17:25:39)
[GCC 6.3.0 20170516] on linux 
Type "help", "copyright", "credits" or "license" for more information.

>>> import boto

>>> s3 = boto.connect_s3()
>>>

Ответы [ 2 ]

0 голосов
/ 11 июля 2019

Хорошо, я думаю, что нашел проблему. Я прав, думая, что ваши учетные данные находятся в ~ / .aws / config вместо ~ / .aws / credentials? если это так, то aws-cli будет работать, но поскольку предполагается, что этот файл не содержит конфиденциальных опций, boto не будет их использовать:

http://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html http://boto.readthedocs.org/en/latest/boto_config_tut.html#details

Это комментарий, на который я ссылаюсь:

CLI AWS также будет считывать учетные данные из файла конфигурации. Если вы хотите сохранить все Настройки вашего профиля в одном файле вы можете. Если когда-либо есть полномочия в обоих местоположения для профиля (скажем, вы использовали aws configure для обновления ключей профиля), ключи в файле учетных данных будут иметь приоритет.

Если вы используете один из SDK в дополнение к интерфейсу командной строки AWS, вы можете заметить дополнительные предупреждения, если учетные данные не хранятся в их собственном файле. Я поместил свои учетные данные как часть ~ / .aws / config и удалил мои ~ / .aws / credentials, и я воспроизвел ту же ошибку, что и вы.

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

0 голосов
/ 03 июля 2019

Я собираюсь сделать предположение, что вы используете файл учетных данных. Если вы запускаете скрипт python под sudo, он запускается под учетной записью root и не будет обращаться к файлу учетных данных, который принадлежит пользователю, которого вы используете.

Быстрый способ проверить это - скопировать файл учетных данных из вашей учетной записи пользователя в корневую учетную запись.

Для справки https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html

...