S3にデプロイ時にSignatureDoesNotMatchがでた話

2023/08/09に公開

S3にデプロイ時にSignatureDoesNotMatchがでた話

今回Reactで開発したものをS3にデプロイしていました。
すると、このようなエラーがでました。
A client error (SignatureDoesNotMatch) occurred when calling the CreateBucket operation: The request signature we calculated does not match the signature you provided. Check your key and signing method.

chatGPT先生に聞いてみると、
このエラーメッセージは、AWS S3 オペレーションを呼び出す際に署名が一致しない場合に発生するものです。一般的に、このエラーは AWS 認証情報が正しく設定されていない、または AWS リソースにアクセスするための権限が不足している場合に発生します。以下のステップを確認して、問題を特定して修正してみてください。
とのこと。

ポリシーは間違えていなかったし、GitHub Secretsに登録しているIAMユーザーのアクセスキーとシークレットアクセスキーを何度確認しても間違えていませんでした。

そこでなんで認証に失敗し、アクセスできないのか調べていくうちにこのページを見つけました。
https://github.com/aws/aws-cli/issues/2665

エラーの内容は全く同じでこの人も困っているみたいでした。
そこでこの質問者への回答も見てみると、
This error occurred when you AWS credential set using environment variables And the key has special characters in my case "/"
このエラーは、環境変数を使用して AWS 認証情報を設定した場合、私の場合はキーに特殊文字「/」が含まれている場合に発生しました。

シークレットアクセスキーに「/」があると特殊文字と判断されて認証に失敗するみたいです。
(AWSが自動生成するくせに...)
そこでシークレットアクセスキーに「/」が入らないように作っては削除しを繰り返して、「/」が入っていないシークレットアクセスキーを取得しました。
すると、問題なく動きました。

ちなみに「+」が入っていてもだめだったと回答している人がいましたが、私は「+」があっても問題なく動きました。

まとめ

AWSのIAMユーザーのシークレットアクセスキーに「/」が含まれていたことが原因だった。

きもかったです^^

Discussion