Boto异常未找到授权处理器

2 投票
2 回答
13366 浏览
提问于 2025-04-18 13:53

我遇到了以下错误:

File "/Users/tai/Desktop/FlashY/flashy/sniffer/database.py", line 21, in <module>
    import dynamoStorage
File "/Users/tai/Desktop/FlashY/flashy/sniffer/dynamoStorage.py", line 37, in <module>
    swfTable = Table(decompiled_dynamo_table, connection=dynamoConn)
File "/Library/Python/2.7/site-packages/boto/dynamodb2/table.py", line 107, in __init__
    self.connection = DynamoDBConnection()
File "/Library/Python/2.7/site-packages/boto/dynamodb2/layer1.py", line 183, in __init__
    super(DynamoDBConnection, self).__init__(**kwargs)
File "/Library/Python/2.7/site-packages/boto/connection.py", line 1073, in __init__
    profile_name=profile_name)
File "/Library/Python/2.7/site-packages/boto/connection.py", line 572, in __init__
    host, config, self.provider, self._required_auth_capability())
File "/Library/Python/2.7/site-packages/boto/auth.py", line 883, in get_auth_handler
    'Check your credentials' % (len(names), str(names)))
boto.exception.NoAuthHandlerFound: No handler was ready to authenticate. 1 handlers were checked. ['HmacAuthV4Handler'] Check your credentials

当我把认证信息直接写在文件里的时候,我的密钥是有效的,所以我知道这些密钥是正确的。

我有一个叫 awsAccess.py 的文件:

#aswAccess holds the names of the bash environment set keys.
#used by other classes to create a connection to aws
aws_access_key_id=os.getenv('AWS_ACCESS_KEY');
aws_secret_access_key=os.getenv('AWS_SECRET_KEY');
aws_dynamo_region=os.getenv('DYANAMO_REGION')

还有一个叫 database.py 的文件:

#for connecting to aws
aws_access_key_id=awsAccess.aws_access_key_id
aws_secret_access_key=awsAccess.aws_secret_access_key
aws_dynamo_region=awsAccess.aws_dynamo_region

aws_dynamo_table="decompiled_swf_text"
conn= S3Connection(aws_access_key_id,aws_secret_access_key);
dynamoConn = boto.connect_dynamodb(aws_access_key_id, aws_secret_access_key)
dTable = dynamoConn.get_table(aws_dynamo_table)

所以我知道这些密钥本身是没问题的。

我有一个 .bash_profile 文件,内容大致是这样的(**这里省略了一些内容,我也试过加引号和不加引号的情况):

export AWS_ACCESS_KEY="myAccessKey**"

export AWS_SECRET_KEY="mySecretKey**"

export DYNAMO_REGION="us-east"

我运行了 source ~/.bash_profile,然后尝试运行程序,但还是出现了错误。我不明白为什么导入会影响同一个密钥字符串的效果。

2 个回答

0

我在使用Ubuntu Wily(15.10)时遇到了问题。

这里有一个关于ConfigParser的更新。

.get方法增加了一个新的参数,但在boto.pyami.config中不支持这个参数。

可以在这里这里查看相关信息。

3

这里有几个小建议:

  • 在你的代码里检查一下,确保ID、aws_access_key和aws_secret_access_key这几个值不是空的。很可能你以为设置了,但其实并没有。
  • boto.connect_<something>中去掉身份验证的参数。这样boto就会使用内置的身份验证方式,它会尝试读取文件、检查环境变量等等。这样可以让你的代码更简单,同时也能满足boto的所有身份验证需求。
  • 我最喜欢的身份验证方式是使用ini文件(通常叫boto.cfg),并把环境变量BOTO_CONFIG设置为这个文件的完整路径,比如`"/home/javl/.boto/boto.cfg"`。
  • 注意,如果你在boto.connect_<something>中传入任何身份验证参数,值为null,它也能正常工作,因为boto会检查其他方法来找到这个值。
  • 大约一年前,增加了一个profile选项,可以在boto配置文件中引用特定的配置文件。这让我可以在代码的任何地方切换不同的配置。

想要了解更多建议和细节,可以查看相关的SO回答

撰写回答