#はじめに
静的ファイルをS3に保存し、Cloudfront経由で公開しようとした際に、下記のエラーに出くわしました。
<Code>SignatureDoesNotMatch</Code>
<Message>The request signature we calculated does not match the signature you provided. Check your key and signing method.</Message>
<AWSAccessKeyId>*******</AWSAccessKeyId>
#原因
結論から言うと、CloudFrontのオリジンリクエストのキャッシュキーにHost
ヘッダーを追加していたことが原因でした。
Host
ヘッダーを追加すると、OriginにHost
ヘッダーが転送されます。
OriginにS3を設定した場合、S3バケットの特定にはHOSTヘッダーが使われます。
CloudFrontからS3へリクエストする際のHOSTヘッダーが、クライアントリクエストのHOSTヘッダーで上書きされてしまい
、その結果として、S3バケットが見つからず、エラーになったというわけです。
他にもオリジンリクエストポリシーのAllViewer
やヘッダーのAuthorization
が追加されると同様に上書きされてしまい、エラーになります。
同様に、CloudFront → ELB → EC2
の構成の場合、
abcd.cloudfront.net
でアクセスすると、同様のエラーが起きますね。