2012-04-09 13 views
6

なぜこのエラーが出るのですか?400悪い要求がアマゾンでインスタンスを引っ張っているとき

私はamazonサーバーに接続した後にインスタンスをプルする際にこれを取得しています。

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

のboto(または任意の他のAWSクライアントライブラリ)によって行われた各要求は、暗号署名され、それに関連付けられたタイムスタンプ(要求における通常Dateヘッダ)を有しています。アマゾンの現時点のアイデアのタイムスタンプは、通常15分以内にかなり近いものでなければなりません。タイムスタンプがこの許容範囲外の場合は、次のようなエラーが表示されます。

したがって、簡単な答えは、クライアントマシンのシステム時刻を確認することです。それは不正確なようです。

+0

を**、400 - '' 'boto.exception.EC2ResponseError:EC2ResponseError:401 Unauthorized''' –

2

Amazon's forumに記載されているクロックスキューをテストする良い方法があります。

型:

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

これは、エラーを返すが、日付ヘッダーのリモート・システムの時間を含みます。次に、システム上のdateの結果と比較してください(UNIX由来の場合)。

お使いのOSがUbuntuまたは他のDebianの変異体であることを起こる場合は、このようなNTPデーモンインストールすることで、時間を最新の状態に保つことができます。私のシステム時刻が、私は不正な** 401を取得していますオフの場合

sudo apt-get install ntp 
関連する問題