見出し画像

【AWS備忘録】SignatureDoesNotMatch: Signature expired: WSL2の時刻ずれでIAMクレデンシャルが期限早すぎエラー

おはようございますこぐまです。
AWS備忘録の記事です。

本日は、
「SignatureDoesNotMatch: Signature expired・・・」
というエラーが出たときの備忘録です。

結論

WSL2の時刻がずれていた。
IAMはどうやら実行サーバの時刻をチェックしている・・?(推測)

メモ解説

WSL2を立ち上げ、VSCode上でAWSCDKのハンズオンを実施しようとしていたところ、以下のエラーに遭遇しました。

$ cdk bootstrap

Unable to resolve AWS account to use. It must be either configured when you define your CDK Stack, or through the environment

AWSアカウントが解決できない・・。ふむふむなんだろうと。
いろいろググってみると、aws configureしてプロファイル等をしっかりすればいいよーと書いてある。
しかし、デフォルトのプロファイル(.aws/config,.aws/credentials)は設定ずみのはずなので、なんだろう・・と。
VSCodeでエラー出力を見てみた。

2023-03-21 20:24:51 [ERROR]: _aws.auth.reauthenticate: Error: Unable to authenticate connection
	 -> SignatureDoesNotMatch: Signature expired: 20230321T112451Z is now earlier than 20230321T145040Z (20230321T150540Z - 15 min.) (statusCode: 403; requestId: ・・・・・・)

SignatureDoesNotMatch: Signature expired・・・

どうやら作ったばかりの認証情報(アクセスキー、シークレットアクセスキーの期限が切れている・・?)ということらしいのですが、よくよくみると
「earlier than」 とあります。

マネジメントコンソール上でIAMクレデンシャルを作成したのは
「20230321T145040Z」・・つまり日本時間で「3/21 23:50:40」でした。
実際それくらいの時間に作成していました。

ところが、このサーバ(WSL2上)の時刻は、「3/21 20:24:51」となっています。UTCだと表記のとおり「20230321T112451Z 」となるんでしょう。
(9時間足せばその時刻になりますね。)

IAMクレデンシャルを作った時刻よりもはるかに前に、その情報を使ってアクセスしようとしているサーバがいたら、それは怪しいですよね。

サーバの現在時刻がそもそもおかしいのです。ということで、以下を参考にWSL2上の時間を修正しました。

ちゃんと設定したあと、コマンドの実行はうまくいきました!
IAMは実行サーバのシステム時刻を見ているということなんでしょうかね?
詳しくご存知の方いらっしゃいましたら是非教えていただきたいです。

読んで下さってありがとうございました!

この記事が気に入ったらサポートをしてみませんか?