2012-04-09 42 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