2017-08-28 77 views
0

我正在测试一个使用boto3来访问DynamoDB的Python应用程序,并从boto3得到以下错误消息。是否有可能让boto3忽略签名过期错误?

{'error': 
    {'Message': u'Signature expired: 20160915T000000Z is now earlier than 20170828T180022Z (20170828T181522Z - 15 min.)', 
    'Code': u'InvalidSignatureException'}} 

我注意到,这是因为我使用了Python包“freezegun.free_time”在20160915冻结的时间,因为在测试中使用的模拟数据是静态的。

我确实研究了一点错误,发现this answer post。基本上,这就是说AWS在创建后很短的时间内使签名无效。根据我的理解,就我而言,由于使用'freeze_time',签名被标记为在20160915创建,但AWS使用当前时间(测试运行的时间)。因此,AWS认为此签名已过期将近一年,并发回错误消息。

有没有办法让AWS忽略这个错误?或者是否可以使用boto3手动修改创建签名的日期和时间?

如果我没有清楚解释我的问题,请让我知道。任何想法都表示赞赏。

回答

2

AWS API调用使用时间戳来防止重放攻击。如果您的电脑时间/日期偏离实际时间太远,那么API调用将被拒绝。

将日期设置为2016的计算机运行请求肯定会触发此故障情况。

检查在主机端完成,所以除了使用真实日期(或以某种方式迫使Python使用与系统其余部分不同的日期)之外,您无法在本地修复任何问题。

+0

感谢您的信息和建议:)每当我尝试访问dynamodb时,我确实找到了一种改变时间的方法。 –

0

有没有办法让AWS忽略这个错误?

没有

或者是有可能使用boto3手动修改签名以创建时的日期和时间?

您应该修补botocore库的auth.py文件(来源:https://github.com/boto/botocore/blob/develop/botocore/auth.py)中的任何日期时间/时间调用。

+0

感谢您的信息和建议:)每当我尝试访问dynamodb时,我确实找到了一种改变时间的方法。 –

相关问题