Amazon web services 是否可以使boto3忽略签名过期错误?

Amazon web services 是否可以使boto3忽略签名过期错误?,amazon-web-services,boto3,Amazon Web Services,Boto3,我正在测试一个Python应用程序,使用boto3访问DynamoDB,我从boto3收到以下错误消息 {'error': {'Message': u'Signature expired: 20160915T000000Z is now earlier than 20170828T180022Z (20170828T181522Z - 15 min.)', 'Code': u'InvalidSignatureException'}} 我注意到这是因为我使用python包'

我正在测试一个Python应用程序,使用boto3访问DynamoDB,我从boto3收到以下错误消息

{'error': 
    {'Message': u'Signature expired: 20160915T000000Z is now earlier than 20170828T180022Z (20170828T181522Z - 15 min.)', 
     'Code': u'InvalidSignatureException'}}
我注意到这是因为我使用python包'freezegun.free_time'将时间冻结在20160915,因为测试使用的模拟数据是静态的

我确实研究了一下错误,我发现了。基本上,它是说AWS在签名创建后的短时间内使签名无效。据我所知,在我的情况下,签名被标记为在20160915创建,因为使用了“冻结时间”,但AWS使用的是当前时间(测试运行的时间)。因此,AWS认为该签名已过期将近一年,并将错误消息发送回

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


如果我没有清楚地解释我的问题,请告诉我。任何想法都值得赞赏。

AWS API调用使用时间戳来防止重播攻击。如果您的计算机时间/日期偏离实际时间太远,则API调用将被拒绝

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

检查是在主机端完成的,因此除了使用实际日期(或者以某种方式迫使Python使用与系统其余部分不同的日期)之外,您无法在本地修复任何东西

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

没有

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


您应该修补botocore库(源代码:)的auth.py文件中的任何datetime/time调用。

刚刚遇到类似的问题。我的解决方案是按照Antonio的建议,将
botocore.auth
中的
datetime
替换为未经修改的版本

pytest示例如下所示

导入类型
从immobilus导入逻辑
@fixture(scope='session',autouse=True)
def_boto_real_time():
从botocore导入验证
auth.datetime=get\u original\u datetime()
def get_original_datetime():
original_datetime=types.ModuleType('datetime'))
原始\u datetime.mktime=logic.original\u mktime
原始日期时间.date=logic.original\u时间
原始\u datetime.gmtime=logic.original\u gmtime
original\u datetime.localtime=logic.original\u localtime
原始\u datetime.strftime=logic.original\u strftime
原始日期time.date=logic.original\u日期
original\u datetime.datetime=logic.original\u datetime
返回原始日期时间

感谢您提供的信息和建议:)每当我尝试访问dynamodb时,我确实找到了一种切换回time back的方法。感谢您提供的信息和建议:)每当我尝试访问dynamodb时,我确实找到了一种切换回time back的方法。作为记录,由于冷冻枪已经使用了很长时间,我从冷冻枪切换到immobilus。