Akata Works

東京エンジニア。主にRuby,Go,たまにAWSとiOS。ゲーム音楽が好きです。連絡はTwitterかakata.onen@gmail.comまで

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エンコードされているっぽいです・・

ここで、Base64エンコードについて簡単に紹介しておくと

  • 元データを64種類の印字可能な英数字(A-Z,a-z,0-9,+,/,=)のみを用いて表現する
  • 元データを6ビットごとに分割し、6ビットに満たなければ"0"を追加する
  • 6ビットのデータを変換表で4文字ごとに変換し、4文字に満たなければ"="を追加する

こんな感じの特徴があります。

あれ!?

でも、僕のもらったSecretAccessKey、41文字なんですけど・・4の倍数じゃないんですけど・・ てか、先頭に"="付いてるんですけど・・

案の定、"="を外したらちゃんと動きましたとさ(チャンチャン)

結論

提供者に確認中だけど多分"="いらない

確認って大事

参考URL

[Amazon S3]Bucket一覧取得

http://www.wikiwand.com/ja/Base64