AWS S3とBase64エンコードの話
最近、すごいエンジニアの人のブログを最初の記事から読んでいます。 勉強になるのはもちろんのこと、すごいエンジニアの人に比べて自分の成長スピードがいかほどか比較できておもしろいです(やっぱりすごい人はすごい!!)
さて、本題に入ります。
前々回の記事ではNet::Amazon::S3モジュールでAWS S3にアクセスする方法を紹介しました。
しかし、他の人からいただいたAccessKeyIDとSecretAccessKeyではなぜかアクセスすることができなかった/(^o^)\ナンテコッタイ
SignatureDoesNotMatch: The request signature we calculated does not match the signature you provided. Check your key and signing method. at ...
どうやら「SecretAccessKeyがおかしいぞ、ちゃんと確認しろよ!!」(意訳)ということだそうで、さっそく提供者に文句の1つでも入れたいところですが、ここはぐっと堪えて、エンジニアらしい原因の追及を試みることにしました。
ちゃんと調べていないですが、なんかSecretAccessKeyはBase64エンコードされているっぽいです・・
- 元データを64種類の印字可能な英数字(A-Z,a-z,0-9,+,/,=)のみを用いて表現する
- 元データを6ビットごとに分割し、6ビットに満たなければ"0"を追加する
- 6ビットのデータを変換表で4文字ごとに変換し、4文字に満たなければ"="を追加する
こんな感じの特徴があります。
あれ!?
でも、僕のもらったSecretAccessKey、41文字なんですけど・・4の倍数じゃないんですけど・・ てか、先頭に"="付いてるんですけど・・
案の定、"="を外したらちゃんと動きましたとさ(チャンチャン)
結論
提供者に確認中だけど多分"="いらない
確認って大事