44 amazon-s3 boto amazon-web-services
我正确设置了$ AWS_ACCESS_KEY_ID和$ AWS_SECRET_ACCESS_KEY环境变量,并运行此代码:
import boto
conn = boto.connect_s3()
Run Code Online (Sandbox Code Playgroud)
并得到此错误:
boto.exception.NoAuthHandlerFound: No handler was ready to authenticate. 1 handlers were checked. ['HmacAuthV1Handler']
Run Code Online (Sandbox Code Playgroud)
发生了什么?我不知道从哪里开始调试.
似乎boto没有从我的环境变量中获取值.如果我将密钥id和密钥作为参数传递给连接构造函数,这可以正常工作.
lia*_*amf 35
Boto 将从环境变量中获取您的凭据.我用V2.0b3测试了它,它工作正常.它将优先于构造函数中显式指定的凭据,但它也将从环境变量中获取凭据.
最简单的方法是将您的凭据放入文本文件中,并在环境中指定该文件的位置.
例如(在Windows上:我希望它在Linux上可以正常工作,但我没有亲自尝试过)
创建一个名为"mycred.txt"的文件并将其放入C:\ temp这个文件包含两行:
AWSAccessKeyId=<your access id>
AWSSecretKey=<your secret key>
Run Code Online (Sandbox Code Playgroud)
将环境变量AWS_CREDENTIAL_FILE定义为指向C:\ temp\mycred.txt
C:\>SET AWS_CREDENTIAL_FILE=C:\temp\mycred.txt
Run Code Online (Sandbox Code Playgroud)
现在你的代码片段如上:
import boto
conn = boto.connect_s3()
Run Code Online (Sandbox Code Playgroud)
会很好的.
小智 14
我是python和boto的新手,但能够重现你的错误(或者至少是错误的最后一行.)
您很可能无法在bash中导出变量.如果你只是定义那么,它们只在当前shell中有效,导出它们并且python继承该值.从而:
$ AWS_ACCESS_KEY_ID="SDFGRVWGFVVDWSFGWERGBSDER"
Run Code Online (Sandbox Code Playgroud)
除非你还添加:
$ export AWS_ACCESS_KEY_ID
Run Code Online (Sandbox Code Playgroud)
或者你可以在同一行上完成所有工作:
$ export AWS_ACCESS_KEY_ID="SDFGRVWGFVVDWSFGWERGBSDER"
Run Code Online (Sandbox Code Playgroud)
同样对于另一个值.你也可以把它放在.bashrc中(假设bash是你的shell并假设你记得导出)
dyl*_*ini 10
跟进nealmcb关于IAM角色的回答.虽然使用IAM角色部署EMR集群,但我遇到了类似的问题,在将boto连接到s3时,有时(并非每次)都会出现此错误.
boto.exception.NoAuthHandlerFound: No handler was ready to authenticate. 1 handlers were checked. ['HmacAuthV1Handler']
Run Code Online (Sandbox Code Playgroud)
元数据服务在检索凭据时可能会超时.因此,正如文档所示,我在配置中添加了一个Boto部分,并增加了重试次数以检索凭据.请注意,默认值为1次尝试.
import boto, ConfigParser
try:
boto.config.add_section("Boto")
except ConfigParser.DuplicateSectionError:
pass
boto.config.set("Boto", "metadata_service_num_attempts", "20")
Run Code Online (Sandbox Code Playgroud)
http://boto.readthedocs.org/en/latest/boto_config_tut.html?highlight=retries#boto
向下滚动到: You can control the timeouts and number of retries used when retrieving information from the Metadata Service (this is used for retrieving credentials for IAM roles on EC2 instances)
我在使用Linux和SES时遇到了这个问题,我希望它可以帮助处理类似问题的其他人.我安装了awscli并配置了我的密钥:
sudo apt-get install awscli
aws configure
Run Code Online (Sandbox Code Playgroud)
这用于在〜/ .aws/config中设置你的凭证,就像@huythang所说的那样. 但是boto会在〜/ .aws /凭证中查找您的凭据,因此请将其复制
cp ~/.aws/config ~/.aws/credentials
Run Code Online (Sandbox Code Playgroud)
假设使用这些凭据为您的用户设置了适当的策略 - 您不需要设置任何环境变量.
| 归档时间: |
|
| 查看次数: |
44032 次 |
| 最近记录: |