Amazon s3 为什么没有准备好AmazonS3身份验证处理程序?
我已正确设置$AWS\u ACCESS\u KEY\u ID和$AWS\u SECRET\u ACCESS\u KEY环境变量,并运行以下代码:Amazon s3 为什么没有准备好AmazonS3身份验证处理程序?,amazon-s3,amazon-web-services,boto,Amazon S3,Amazon Web Services,Boto,我已正确设置$AWS\u ACCESS\u KEY\u ID和$AWS\u SECRET\u ACCESS\u KEY环境变量,并运行以下代码: import boto conn = boto.connect_s3() 并获取以下错误: boto.exception.NoAuthHandlerFound: No handler was ready to authenticate. 1 handlers were checked. ['HmacAuthV1Handler'] 发生了什么事?我不
import boto
conn = boto.connect_s3()
并获取以下错误:
boto.exception.NoAuthHandlerFound: No handler was ready to authenticate. 1 handlers were checked. ['HmacAuthV1Handler']
发生了什么事?我不知道从哪里开始调试
boto似乎没有从我的环境变量中获取值。如果我将密钥id和秘钥作为参数传递给连接构造函数,这可以正常工作。Boto将从环境变量中获取凭据。 我已经用V2.0b3测试过了,效果很好。它将优先于构造函数中显式指定的凭据,但也将从环境变量中获取凭据 最简单的方法是将凭据放入文本文件,并指定该文件在环境中的位置 例如(在Windows上:我希望它在Linux上也能正常工作,但我个人还没有尝试过) 创建一个名为“mycred.txt”的文件,并将其放入C:\temp 此文件包含两行:
AWSAccessKeyId=<your access id>
AWSSecretKey=<your secret key>
现在,您的代码片段位于上面:
import boto
conn = boto.connect_s3()
很好。我看到你叫他们
AWS\u ACCESS\u KEY\u ID
和AWS\u SECRET\u ACCESS\u KEY
当它们似乎应该设置为
AWSAccessKeyId
&AWSSecretKey
时,我对python和boto都是新手,但能够重现您的错误(或者至少是错误的最后一行)
您很可能无法在bash中导出变量。如果您只是定义它们,那么它们只在当前shell中有效,导出它们,python将继承该值。因此:
$ AWS_ACCESS_KEY_ID="SDFGRVWGFVVDWSFGWERGBSDER"
除非您还添加以下内容,否则将不起作用:
$ export AWS_ACCESS_KEY_ID
或者您可以在同一行上完成所有操作:
$ export AWS_ACCESS_KEY_ID="SDFGRVWGFVVDWSFGWERGBSDER"
对于另一个值也是如此。您还可以将其放在.bashrc中(假设bash是您的shell,并假设您记得导出)您现在可以在connect函数调用中将其设置为参数
s3 = boto.connect_s3(AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY)
我只是想补充一下,以防其他人像我一样搜索。见最新:
我找到了答案
在Unix上:首先设置aws配置:
#vim ~/.aws/config
[default]
region = Tokyo
aws_access_key_id = xxxxxxxxxxxxxxxx
aws_secret_access_key = xxxxxxxxxxxxxxxxx
并设置环境变量
export AWS_ACCESS_KEY_ID="aws_access_key_id"
export AWS_SECRET_ACCESS_KEY="aws_secret_access_key"
在我的例子中,问题是在IAM中“默认情况下,用户没有权限”。我花了一整天的时间才找到答案,因为我已经习惯了最初的AWS身份验证模型(pre iam),在该模型中,现在所谓的“根”凭据是唯一的方法 有很多关于创建用户的AWS文档,但是只有少数地方他们注意到你必须给他们权限才能做任何事情。一个是,但即使它并没有真正告诉你去“策略”选项卡,建议一个好的开始策略,并解释如何应用它 该向导只是鼓励您“开始使用IAM用户”,并没有说明还有很多事情要做。即使您稍微浏览一下,您也只会看到例如“托管策略此用户没有附加托管策略”,这并不意味着您需要一个策略来执行任何操作 要建立类似于root的用户,请参阅:
我看不到一个简单地允许对所有S3(我自己的存储桶以及其他人拥有的公共存储桶)进行只读访问的特定策略。继续nealmcb关于IAM角色的回答。在使用IAM角色部署EMR集群时,我遇到了一个类似的问题,在将boto连接到s3时,有时(并非每次)会出现此错误
boto.exception.NoAuthHandlerFound: No handler was ready to authenticate. 1 handlers were checked. ['HmacAuthV1Handler']
元数据服务在检索凭据时可能超时。因此,正如文档所建议的,我在配置中添加了Boto部分,并增加了检索凭据的重试次数。请注意,默认值为1次尝试
import boto, ConfigParser
try:
boto.config.add_section("Boto")
except ConfigParser.DuplicateSectionError:
pass
boto.config.set("Boto", "metadata_service_num_attempts", "20")
向下滚动至:
您可以控制从元数据服务检索信息时使用的超时和重试次数(用于检索EC2实例上IAM角色的凭据)
在Mac上,导出密钥需要如下所示:key=value
。所以导出,比如说,AWS\u ACCESS\u KEY\u ID
环境变量应该是这样的:AWS\u ACCESS\u KEY\u ID=yourkey
。如上面的回答所述,如果您的值周围有任何引用,boto将抛出上述错误 我在使用Linux和SES时遇到了这个问题,我希望它可以帮助其他人解决类似的问题。我已经安装了awscli并配置了我的密钥:
sudo apt-get install awscli
aws configure
这用于在~/.aws/config中设置您的凭据,就像@huythang所说的那样。所以把它们复制过来
cp ~/.aws/config ~/.aws/credentials
假设为具有这些凭据的用户设置了适当的策略-您不需要设置任何环境变量。我在ec2上的flask应用程序中遇到了这个问题。我不想在应用程序中放置凭据,但通过IAM角色管理权限。这样可以避免将键硬编码为代码。然后我在AWS控制台中设置了一个策略(我甚至没有编写它,我只是使用了策略生成器) 我的代码和OP的一模一样。这里的其他解决方案很好,但是有一种方法可以在不使用硬编码访问密钥的情况下获得大权限
我以前成功地使用了s3并行put,但它莫名其妙地停止了工作,出现了上面的错误。尽管已导出AWS_访问密钥ID和AWS_机密访问密钥,但仍存在此问题 解决方案是在boto配置文件中:
$ nano ~/.boto
按如下方式输入凭据:
[Credentials]
aws_access_key_id = KEY_ID
aws_secret_access_key = SECRET_ACCESS_KEY
带下划线的版本是正确的。相信您还应该能够在连接动词上提供KWARG,例如:boto.cloudformation.connect\u to\u region(myregion,aws\u access\u key\u id=xxxx,aws\u secret\u access\u key=yyyy)我刚刚为Linux用户发布了一个不需要环境变量的答案。这里有更多关于AWS凭证的详细信息,使用
boto
,最好不要使用inc
$ nano ~/.boto
[Credentials]
aws_access_key_id = KEY_ID
aws_secret_access_key = SECRET_ACCESS_KEY