0

我正在使用一个名为 Alteryx 的产品,并且我正在尝试编写一个利用 Dynamodb 查询 API 的 Alteryx 宏,以便我可以从 Alteryx 中访问我的 Dynamodb 表。不幸的是,我无法使用其中一个 Amazon SDK,因此必须手动/在 Alteryx 中编写 Amazon 查询 api 签名代码。

我正在使用 Amazon 文档中包含的 Python Post 示例来指导我完成整个过程。Python 示例可在此处找到:Python Post Example

我已经完成了示例中列出的每个任务:

  1. 定义请求变量
  2. 创建规范请求
  3. 创建要签名的字符串
  4. 计算签名
  5. 将签名信息添加到请求并发出请求。

最初我收到以下错误:

InvalidSignatureException","message":"Signature·expired:·20150704T101118Z·is·now·earlier·than·20150704T135625Z·(20150704T141125Z·-·15·min.)

虽然我电脑上的时间是正确的,而且我的请求中包含的时间:101118Z 实际上是正确的,但错误消息告诉我签名已经在四个小时前过期了。我解决此错误的方法是在我的日期/时间变量中增加 4 小时,这似乎可以解决问题。

问题 1。是否有人熟悉导致此错误的原因,有没有办法在不给我的日期/时间变量增加 4 小时的情况下修复它。这是否会导致签名 API 签名和请求过程中的额外复杂性。

应用我的日期/时间解决方法后,我收到了一条新的错误消息:

InvalidSignatureException","message":"The·request·signature·we·calculated·does·not·match·the·signature·you·provided.·Check·your·AWS·Secret·Access·Key·and·signing·method.·Consult·the·service·documentation·for·details.\n\nThe·Canonical·String·for·this·request·should·have·been\n'POST\n/\n\ncontent_type:\nhost:dynamodb.us-east-1.amazonaws.com\nx-amz-date:20150704T141834Z\nx-amz-target:DynamoDB_20120810.CreateTable\n\ncontent_type;host;x-amz-date;x-amz-target\n09a8bcdeea1d20631f887235820bbff0a614679080a2e74a89ceb1a1bcc71b44'\n\nThe·String-to-Sign·should·have·been\n'AWS4-HMAC-SHA256\n20150704T141834Z\n20150704/us-east-1/dynamodb/aws4_request\nec549e12e44faf7ee750e19b570eaf2389f82e722ae2978b535df6fd6f3df129'\n"}

所以接下来我将我的规范请求与错误消息中提供的请求进行了比较。这是我发现的:

  1. 该请求与一个例外相同。错误消息中提供的规范请求具有 content-type: 标头,但排除了相关的内容类型值。
  2. 我的规范请求包括内容类型标头和值。
  3. 规范请求末尾的请求参数哈希与其他所有内容完美匹配。

这很重要,因为规范请求是流程下一步的输入。您必须计算规范请求的 sha256 哈希摘要以创建要签名的字符串。对于这个问题,我尝试了两种替代方法/解决方法:

  1. 首先,我使用派生的规范请求(包括内容类型值)来计算要签名的字符串。在这种情况下,所有内容都与错误消息 String To Sign 匹配,除了最后一个元素:规范请求的哈希。
  2. 我的下一个方法是计算排除内容类型值的规范请求,因此与错误消息中包含的规范请求完全匹配。在这种情况下,派生的要签名的字符串完美匹配,但规范请求的哈希除外。

问题2:有没有人遇到过这个错误?你知道原因和/或你有解决方法吗?

我希望一旦我能够解决问题 3,我将能够成功完成第四个任务,计算签名并成功发出 api 请求。

问题 3:是否有人知道此过程中的任何其他问题或有任何其他建议或见解。

4

1 回答 1

0

除非您有非常具体的理由手动执行此操作,否则标准建议是使用boto从 Python 访问 AWS。

编辑:更一般地说,标准建议是在适合您用例的地方使用可用的库。

编辑 2:查看有关您的案例的评论sys.path和解决方法。

于 2015-07-04T16:20:21.873 回答