在aws上使用boto3 for dynamoDB时出现InvalidSignatureException

时间:2016-02-08 15:53:27

标签: amazon-web-services amazon-dynamodb python-3.4 boto3

在尝试连接到aws上的dynamoDB时,我遇到了某种凭据问题。在本地它一切正常,我可以使用AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEYAWS_DEFAULT_REGION的env变量进行连接,然后

dynamoConnection = boto3.resource('dynamodb', endpoint_url='http://localhost:8000')

当在env变量中更改为live creds并在aws上将endpoint_url设置为dynamoDB时,这会失败:

  

" botocore.exceptions.ClientError:调用Query操作时发生错误(InvalidSignatureException):我们计算的请求签名与您提供的签名不匹配。检查您的AWS Secret Access Key和签名方法。有关详细信息,请参阅服务文档。"

信用证是有效的,因为它们用于与同一dynamoDB对话的不同应用程序。我也试过不使用env变量,而是直接在方法中,但错误仍然存​​在。此外,为了避免尾随空格的任何问题,我甚至直接在代码中使用了凭证。我正在使用Python v3.4.4。

是否可能还应该设置一个我不知道的标题?任何提示都会得到认可。

修改

我现在还创建了新的凭据(以确保只有字母数字符号),但仍然没有骰子。

4 个答案:

答案 0 :(得分:1)

当您连接到真正的DynamoDB服务时,您不应该使用endpoint_url。这实际上只适用于连接本地服务或非标准端点。相反,只需指定所需的区域:

dynamoConnection = boto3.resource('dynamodb', region_name='us-west-2')

答案 1 :(得分:1)

表示您的时区不同。也许你可以检查你的: 1.时区 2.时间设置。

如果有一些自动设置,您应该修改时间设置。

答案 2 :(得分:0)

“ sudo hwclock --hctosys”应该可以解决问题。

答案 3 :(得分:0)

只是想指出从 C# 环境(使用 AWS.NET SDK)访问 DynamoDB 我遇到了这个错误,我解决它的方法是创建一对新的 AWS 访问/秘密密钥。 在我更改代码中的这些键后立即工作。