⭐️ Amazon Web Service/Amazon S3

[CloudFront & S3] SignatureDoesNotMatch ERROR

mini_world 2021. 12. 17. 23:43

S3를 이미지 서버로 해서, Cloudfront와 연결 했습니다.
그런데 오잉, 이게 무슨일이죠!!!! SignatureDoesNotMatch  두둥!!!!😳😳😳😳

이게 무슨일일까요...

<Error>
<Code>SignatureDoesNotMatch</Code>
<Message>The request signature we calculated does not match the signature you provided. Check your key and signing method.</Message>
<AWSAccessKeyId>4BE3VQ</AWSAccessKeyId>
<StringToSign>AWS4-HMAC-SHA256 20211217T081310Z 20211217/ap-northeast-2/s3/aws4_request 0c6200</StringToSign>
<SignatureProvided>a40d061e0682346ae2501d36e</SignatureProvided>
<StringToSignBytes>31 37 54 30 38 31 33 31 30 5a 0a 77 73 34 5f 72 65 71 75</StringToSignBytes>
<CanonicalRequest>GET /my/image.jpg host:example.com x-amz-content-sha256:e7852b855 x-amz-date:20211217T081310Z host;x-amz-content-sha256;x-amz-date e3b855</CanonicalRequest>
<CanonicalRequestBytes>32 34 </CanonicalRequestBytes>
<RequestId>TB2307</RequestId>
<HostId>HzzaKM=</HostId>
</Error>

 

자, 지금 혹시 이렇게 설정하지 않았나 확인해봅시다!!!!
CloudFront 배포 >> 동작 >> S3가 원본인 동작을 선택하고 편집을 클릭합니다.

혹시, CloudFront 캐싱 정책에, 아래와 같이 설정되어있나요?

그렇다면, 이렇게 바꿉시다. 기본으로요😁

 

이제, 잘 되나 확인해봅시다.

 


왜 오류가 났을까요?

기본적으로 CloudFront는 오리진에 헤더를 전달하지 않습니다.
위 설정은 오리진에 Origin, Host 헤더를 전달하도록 구성 한 것이고, Cloudfront로 들어온 요청이 S3에 보내지면서 헤더가 그대로 전달 되는 바람에..? 오히려 그게 오류를 발생 시킨것 같아요.....S3가 웹서버가 아니기때문에 그런게 아닐까요...? 😭😭😭

CloudFront + S3 구성인 경우 (오리진이 S3인 경우), 무조건 캐싱하도록 설정해야겠습니다. 괜히 헤더 전달하도록 구성했다가 오류만 났어요..

ㅠㅠ..... 뿅~~!!