python - 发现 Boto 异常 NoAuthHandler

标签 python bash python-2.7 amazon-web-services

我收到以下错误:

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

当我直接在文件中进行身份验证时,我的 key 有效,因此我知道 key 是正确的。

我有 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)

所以我知道 key 本身是正确的。

我有一个看起来像这样的 .bash_profile 文件(**表示已删除,我也尝试过带或不带“”):

export AWS_ACCESS_KEY="myAccessKey**"

export AWS_SECRET_KEY="mySecretKey**"

export DYNAMO_REGION="us-east"

我运行 source ~/.bash_profile,然后尝试运行但出现错误。我不明白为什么导入会改变相同 key 字符串的影响。

最佳答案

一些提示:

  • 在代码中断言 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>值(value)null ,它将作为 boto将检查其他方法来查找该值。
  • 从大约一年前开始,就有一个选项 profile ,允许引用 boto 配置文件中的特定配置文件。这让我可以在代码中的任何位置切换到不同的配置文件。

有关更多提示和详细信息,请参阅 related SO answer

关于python - 发现 Boto 异常 NoAuthHandler,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24832524/

相关文章:

python - 无法使用 pyenv 激活 virtualenv

python - 使用 python 的 ** 运算符和 * 运算符时进行签名

python - MD5 key 加密

python - 访问函数调用的打印输出

python - 使用 openCV : empty video 在 python 中保存视频捕获

python - 使用 Python 将系数拟合到数据和函数

python - 正则表达式提取整数或浮点值后跟一个单位,Python

python - 解决Python中abc.Sequence、abc.Hashable、list的继承矛盾

linux - Base64编码修改只是可打印的字符

linux - 在 bash 中比较 *nix 时间戳的最佳方法