#はじめに
S3に画像ファイルをアップロードする対応を行った際、403ステータスにハマったので記事にします。
#前提
開発言語・・・VBScript
送信方式・・・HttpRequest
送信ファイル種別・・・jpg
#現象
・Httpステータスが403で返ってくる(SignatureDoesNotMatch)
#原因究明
疑ったことその1
・権限がない?またはACL掛かってる?
→権限はある
→ACLも掛かってない
疑ったことその2
・レスポンスをよく見てみると、以下が返ってきている
・アクセスキーまたはシークレットアクセスキーが間違っている?
→間違っていない
<Code>SignatureDoesNotMatch</Code>
<Message>The request signature we calculated does not match the signature you provided. Check your key and signing method.</Message>
疑ったことその3
・ハッシュ化の部分か文字コードがおかしい?
→きちんとハッシュ化されている
→文字コードもUTF-8
疑ったことその4
・Signatureの構築内容をもう一度確認する
Dim stringToSign : stringToSign = Replace("PUT\n\n" & contetType & _
"\n\nx-amz-acl:public-read" & _
"\nx-amz-date:" & timestamp & _
"\n/"& bucket_name & "/" & target_directory,_
"\n", vbLf)
・target_directoryに続くファイル名が付いてない
→これ
#原因
・Signatureの内容不備による認証エラー
#まとめ
・エラーコードが403だったので、とにかく権限周りを気にしていた
・不備のある認証情報でアクセスしてきたら、AWSは権限不足と判断する(AWS側の立場だとそうするも納得)