代码之家  ›  专栏  ›  技术社区  ›  KalleJuhans

在aws上使用boto3 for dynamoDB时发生InvalidSignatureException

  •  3
  • KalleJuhans  · 技术社区  · 9 年前

    当我试图在aws上连接到我的dynamoDB时,我面临着某种凭据问题。在本地,一切都很好,我可以使用env变量连接 AWS_ACCESS_KEY_ID , AWS_SECRET_ACCESS_KEY AWS_DEFAULT_REGION 然后

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

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

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

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

    是否有一个我不知道的标题也应该设置?任何暗示都会受到欢迎。

    编辑

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

    4 回复  |  直到 9 年前
        1
  •  2
  •   garnaat    9 年前

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

    dynamoConnection = boto3.resource('dynamodb', region_name='us-west-2')
    
        2
  •  1
  •   gkhanacer    8 年前

    这表明你的时区不同。也许你可以查看你的: 1.时区 2.时间设置。

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

        3
  •  1
  •   Arup Chaudhury    4 年前

    “sudo hwclock--hctosys”应该能做到这一点。

        4
  •  0
  •   nrod    4 年前

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