使用 sudo python3 而不是 python3 时导入 aws 凭据时出错

Error importing aws credentials while using sudo python3 but not with python3

我是 aws cli、boto 的初学者,正在从事 IoT 项目。最近遇到这个错误,如果我使用 sudo python3 并尝试连接到 s3,我的连接就通过了身份验证。但是如果我只使用 python3 我就可以连接。任何想法为什么会这样?

如果我的脚本需要超级用户权限,我以后会 运行 出错吗?我现在正在通过 USB 连接使用互联网,需要超级用户命令 运行 我的代码。

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()
>>>

我假设您使用的是凭据文件。如果您 运行 sudo 下的 python 脚本那么它是 运行 在 root 帐户下并且不会访问您正在使用的用户下的凭据文件。

一种快速测试方法是将凭据文件从您的用户帐户复制到根帐户。

供参考https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html

好的,我想我已经找到问题所在了。我认为您的凭据位于 ~/.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

这是我指的评论:

AWS CLI 还将从配置文件中读取凭证。如果你想保留所有 您可以将配置文件设置在一个文件中。如果两者都有凭据 配置文件的位置(假设您使用 aws configure 更新配置文件的密钥), 凭据文件中的密钥将优先。

如果您除了使用 AWS CLI 之外还使用其中一个开发工具包,您可能会注意到其他 如果凭据未存储在自己的文件中,则会发出警告。 我已将我的凭据作为 ~/.aws/config 的一部分并删除了我的 ~/.aws/credentials 并且我重现了你得到的相同错误。

作为此修复的一部分,我要求使用 --aws-region 或 AWS_REGION env 变量提供有效的 aws-region。我认为这应该足以让这种情况不再发生。