Amazonガイドに従ってec2 apiをインストールしました。環境変数としてアクセスIDとシークレットを設定しました。
ここに私のプロフィールがあります:
エクスポートAWS_ACCESS_KEY = XXXXX
エクスポートAWS_SECRET_KEY = XXXXXX
export Java_HOME =/usr/lib/jvm/Java-7-openjdk-AMD64/jre
export EC2_HOME =/usr/local/ec2/ec2-api-tools-1.7.1.0
export PATH = $ PATH:$ EC2_HOME/bin
すべてが質問どおりに構成されているように見えますが、awsに接続できません。
ここでは、冗長モードでのコマンドec2-describe-regionsの出力:
Client.AuthFailure: AWS was not able to validate the provided access credentials
ubuntu@ip:~$ ec2dre -v
Setting User-Agent to [ec2-api-tools 1.7.1.0]
2014-07-14 19:10:34,898 [main] DEBUG org.Apache.http.wire - >> "POST / HTTP/1.1[\r][\n]"
2014-07-14 19:10:34,912 [main] DEBUG org.Apache.http.wire - >> "Host: ec2.amazonaws.com[\r][\n]"
2014-07-14 19:10:34,912 [main] DEBUG org.Apache.http.wire - >> "X-Amz-Date: 20140714T191033Z[\r][\n]"
2014-07-14 19:10:34,913 [main] DEBUG org.Apache.http.wire - >> "Authorization: AWS4-HMAC-SHA256 Credential=AKIAIT64V5MH2HHF5QZQ/20140714/us-east-1/ec2/aws4_request, SignedHeaders=Host;user-agent;x-amz-date, Signature=06920c7d37a24d8244feb630d87310238886294d3ae2ab40f68a362a799d9a62[\r][\n]"
2014-07-14 19:10:34,913 [main] DEBUG org.Apache.http.wire - >> "User-Agent: ec2-api-tools 1.7.1.0, aws-sdk-Java/unknown-version Linux/3.2.0-36-virtual OpenJDK_64-Bit_Server_VM/24.51-b03[\r][\n]"
2014-07-14 19:10:34,913 [main] DEBUG org.Apache.http.wire - >> "Content-Type: application/x-www-form-urlencoded; charset=utf-8[\r][\n]"
2014-07-14 19:10:34,913 [main] DEBUG org.Apache.http.wire - >> "Content-Length: 41[\r][\n]"
2014-07-14 19:10:34,913 [main] DEBUG org.Apache.http.wire - >> "Connection: Keep-Alive[\r][\n]"
2014-07-14 19:10:34,913 [main] DEBUG org.Apache.http.wire - >> "[\r][\n]"
2014-07-14 19:10:34,914 [main] DEBUG org.Apache.http.wire - >> "Action=DescribeRegions&Version=2014-06-15"
2014-07-14 19:10:34,984 [main] DEBUG org.Apache.http.wire - << "HTTP/1.1 401 Unauthorized[\r][\n]"
2014-07-14 19:10:35,002 [main] DEBUG org.Apache.http.wire - << "Transfer-Encoding: chunked[\r][\n]"
2014-07-14 19:10:35,003 [main] DEBUG org.Apache.http.wire - << "Date: Mon, 14 Jul 2014 19:18:34 GMT[\r][\n]"
2014-07-14 19:10:35,003 [main] DEBUG org.Apache.http.wire - << "Server: AmazonEC2[\r][\n]"
2014-07-14 19:10:35,010 [main] DEBUG org.Apache.http.wire - << "[\r][\n]"
2014-07-14 19:10:35,225 [main] DEBUG org.Apache.http.wire - << "fe[\r][\n]"
2014-07-14 19:10:35,225 [main] DEBUG org.Apache.http.wire - << "<?xml version="1.0" encoding="UTF-8"?>[\n]"
2014-07-14 19:10:35,225 [main] DEBUG org.Apache.http.wire - << "<Response><Errors><Error><Code>AuthFailure</Code><Message>AWS was not able to validate the provided access credentials</Message></Error></Errors><RequestID>cd2b128b-3d70-425b-a8a7-4856fd9a6b99</RequestID></Response>"
2014-07-14 19:10:35,278 [main] DEBUG org.Apache.http.wire - << "[\r][\n]"
2014-07-14 19:10:35,279 [main] DEBUG org.Apache.http.wire - << "0[\r][\n]"
2014-07-14 19:10:35,279 [main] DEBUG org.Apache.http.wire - << "[\r][\n]"
Client.AuthFailure: AWS was not able to validate the provided access credentials
Request ID: cd2b128b-3d70-425b-a8a7-4856fd9a6b99
サーバーがクロックが同期されているであることを確認してください。
クロックが遅れると、次のエラーが発生する可能性があります。
AWS was not able to validate the provided access credentials
システムクロックが誤って設定されたときに、この問題に遭遇しました。
私の場合、時計は2時間進んでいた。
同様に重要なのは、コマンドを.bashrcまたは同様のファイル(.bash_aliases)に入れることです。
export AWS_ACCESS_KEY="XXXXXXXXXXXXXXXXX"
export AWS_SECRET_KEY="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
source ~/.bashrc
これが重要な理由は、ec2コマンドを実行すると、環境変数を取得しない新しいシェルインスタンスが作成されるためです。
実行aws s3 ls
エラーが時刻同期に関連しているかどうかを確認します。次のようなエラーが表示されるはずです。
ListBuckets操作を呼び出すときにエラーが発生しました(RequestTimeTooSkewed):要求時間と現在の時間の差が大きすぎます。
その場合は、提案どおりに日時を同期してみてください。
Linuxで実行するシェルコマンドの例:
# Install the ntpdate client for setting system time from NTP servers.
Sudo apt-get --yes install ntpdate
Sudo ntpdate 0.Amazon.pool.ntp.org
次に、aws
コマンドを再試行します。
それでもタイムゾーンが正しくない場合は、次を実行します:Sudo dpkg-reconfigure tzdata
構成するか、次の方法で:
timedatectl list-timezones
timedatectl set-timezone 'Europe/London'
localtimeの設定。dpkg-reconfiguretzdata も参照してください。
AWS CLIは正常に機能していましたが、突然次のエラーで失敗し始めました
A client error (AuthFailure) occurred when calling the DescribeTags operation: AWS was not able to validate the provided access credentials
新しい一連の資格情報を試してみましたが、それは役に立ちませんでした。
EC2インスタンスでstop-startが実行された後にのみ機能しました(再起動も機能した可能性があります)。したがって、aws cliが実行された特定のEC2インスタンスに問題があるようです。
同様の問題がありました。ローカルサーバーのクロックがオフでした。次のコマンドで修正しました。
Sudo date -s "$(wget -qSO- --max-redirect = 0 google.com 2>&1 | grep Date:| cut -d '' -f5-8)Z"
その後、awsは機能しました。
これは、到達しようとしている地域に応じて問題が発生することもあります。すべての地域で役割を引き受けようとするスクリプトがあり、これを香港(ap-east-1)で保持し続けました。アクセスするには、まずこのリージョンを有効にする必要があります。次の地域を有効にしていない場合、このエラーが発生します。
ap-east-1
cn-north-1
cn-northwest-1
us-gov-east-1
us-gov-west-1
奇妙なことに、ap-northeast-3
もエラーを返しますが、そのエラーはOptInRequired
です。