現象
エラー
ある日突然以下のエラーを出し、AWS CLIコマンドが動かなくなる。
An error occurred (AuthFailure) when calling the DescribeInstances operation: AWS was not able to validate the provided access credentials
原因
インスタンスのClockがずれた。
応急処置
次のコマンドを実行する
sudo ntpdate ntp.jst.mfeed.ad.jp
恒久対応
NTPなど時刻の同期をちゃんと設定する。
詳しく
AWSサーバのインスタンス情報などを取得するためのコマンド、たとえば以下のようなもの
export EC2_INSTANCE_ID=`wget -q -O - http://instance-data/latest/meta-data/instance-id 2> /dev/null`
aws ec2 describe-instances --filters Name=instance-id,Values="$EC2_INSTANCE_ID"
これを使う際には以下のようなAWS CLIを使うための認証用の環境変数を設定しないと、今回のようなAuthエラーがでて使えないのはよく知られているし、普通にドキュメントに書いてある。
export avail_zone=`wget -q -O - http://instance-data/latest/meta-data/placement/availability-zone`
export AWS_DEFAULT_REGION=`echo -n ${avail_zone}|sed -e 's/[a-z]$//'`
export AWS_ACCESS_KEY_ID=XXXXXXXXXXXXXXXXXXXXX
export AWS_SECRET_ACCESS_KEY=XXXXXXXXXXXXXXXXXXXXXXXX
これを設定しておけば通常は認証はOKだ。
だが、認証が失敗するケースはこれだけではない。
インスタンスのOSのClockがズレている場合も認証エラーになるのだ。
問題が起きたのは次のイメージから作ったインスタンス。
ubuntu/images/hvm-ssd/ubuntu-trusty-14.04-amd64-server-20160114.5 (ami-9abea4fb)
このイメージのデフォルトではNTPの設定がされていないため、負荷をかけると時刻がずれていくのであるらしい。
それで、ある日突然AWS CLIが動かなくなり、それを利用していたCronなどがエラーを吐くようになった。
AWSでUbuntuのイメージを使ってインスタンスを作っている人はOSのクロックが同期しているか確認した方がいい。