2012-04-09 125 views
6

任何机构可以说为什么我得到这个错误?400错误请求,同时拉亚马逊实例

我在连接到亚马逊服务器后拉动实例时遇到此问题。

import boto 

con = boto.connect_ec2(aws_access_key_id='XXX',aws_secret_access_key='XXX') 
con.get_all_instances() 

Traceback (most recent call last): 

    File "getAllinstanc.py", line 7, in <module> 

    reservations = ec2conn.get_all_instances() 

    File "c:\jiva\py26\lib\site-packages\boto-2.3.0-py2.6.egg\boto\ec2\connection.py", line 467, in get_all_instances 

    [('item', Reservation)], verb='POST') 
    File "c:\Jiva\py26\lib\site-packages\boto-2.3.0-py2.6.egg\boto\connection.py", line 896, in get_list 

    raise self.ResponseError(response.status, response.reason, body) 

boto.exception.EC2ResponseError: EC2ResponseError: 400 Bad Request 

<?xml version="1.0" encoding="UTF-8"?> 
<Response><Errors><Error><Code>RequestExpired</Code><Message>Request has expired. Timestamp date is 2012-04-09T06:54:53Z</Message></Error></Errors><RequestID>44 
08be18-5d2b-420b-af48-e2cb03</RequestID></Response> 

回答

7

由伯特(或任何其他AWS客户端库)制成的每个请求加密签名和具有与其相关联的时间戳(通常是日期头中的请求)。时间戳必须相当接近,通常在15分钟内亚马逊的当前时间的想法。如果时间戳超出此可接受窗口,您将收到类似的错误。

所以,简单的答案是检查客户机上的系统时间。这似乎是不准确的。

+0

如果我的系统时间是关闭的,我得到一个** 401未授权**,不是400 --'''boto.exception.EC2ResponseError:EC2ResponseError:401未授权''' – 2015-11-06 19:06:02

2

有很好的方法来测试Amazon's forum上描述的时钟歪斜。

类型:

wget -S "https://email.us-east-1.amazonaws.com" 

这将返回一个错误,但包括远程系统的中的日期时间报头。然后将其与您的系统上的date的结果进行比较(假设它是派生的unix)。

如果您的操作系统恰好是Ubuntu或其他Debian的变种,您可以通过安装一个NTP守护像这样保持的时间电流:

sudo apt-get install ntp