自由気ままに書いちゃおう

好きなことをつらつらと・・・

【AWS】CloudFront経由でのアクセス時に「SignatureDoesNotMatch」によりアクセスが拒否される

今回は、CloudFrontのカスタムオリジンにS3バケットを指定した際に、S3オブジェクトにアクセスすると以下のように「SignatureDoesNotMatch」が出力された際の対応方法についてです。

 

 

■ 結論

先に結論です。

冒頭の通り、「SignatureDoesNotMatch」が出た際は、CloudFrontのビヘイビア設定にて利用している「オリジンリクエストポリシー名」にて、「Managed-AllViewer」以外のものを設定してください。

※ 以下の赤枠部分の設定を変更する必要があります。

 

 

■ 原因

本エラーが表示された場合、すぐに思い当たる原因としてオリジンリクエストポリシーに「Managed-Allviewer」を設定している場合が挙げられます。

Managed-AllViewerを設定するとすべてのリクエストヘッダーをOriginに転送するのですが、この設定はクライアント側のHostヘッダーをそのままOriginに転送いたします。

例えば、

クライアント -> CloudFront -> S3 の場合、OAC(OriginAccessControl)を設定することが大半だと思いますが、この際に期待する動作はCloudFrontのHostヘッダーをS3に転送することになります。

 

前述の通り、Managed-AllViewerを利用するとクライアント側のHostヘッダーをS3に転送してしまうため、本エラーが出力されます。

 

■ 補足(OACについて)

Amazon S3 オリジンへのアクセスの制限 - Amazon CloudFront

 

以上です。