みんな待ってた「amazon-ecs + 署名認証」

railsamazon-ecsを使ってamazon APIを使用している方は多いと思います。もちろん私もその一人。
すでにamazonからのメールでご存知かと思いますが、2009年8月15日までにリクエストに電子署名を含めないと一切のリクエストが無視されてしまいます。
署名認証に対応したruby-aawsruby1.8.7以上のバージョンでないと動作しないし、そもそもruby-aaws用に作り直すのが手間だな〜と考えていました。

そんな中、amazon-ecsを改良して署名認証を含めてしまう改造を行っている方を発見。

■amazon-ecsに署名認証をつけるようにした

これぞ私が探していたものです!
ということで、私が趣味でやってるサービスに組み込んでみました。

インストール

sudo gem uninstall amazon-ecs
gem source -a http://gems.github.com
sudo gem install willnet-amazon-ecs

設定

/config/environment.rbに追記します。

require 'amazon/ecs'

Amazon::Ecs.options = {
  :aWS_access_key_id => "XXXXXXXXXXXXXXXXXXXX",
  :associate_tag => "xxxx-22",
  :country => :jp,
  :secret_access_key => "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" #ここにアクセスキーを追記
}

自分のAccessKeyとSecretAccessKeyはここでチェックできます。
https://aws-portal.amazon.com/gp/aws/developer/account/index.html?ie=UTF8&action=access-key

確認

リクエストURLにSignatureが追加されているか確認してみましょう。
Amazon::Ecsを使用している箇所でデバッグモードをOnにします。

Amazon::Ecs.debug = true

これでrailsのlogにリクエストが保存されるはずです。
「Request URL:」で検索してみましょう。
こんな感じでSignatureがついていればOKです。

Request URL: http://webservices.amazon.co.jp/onca/xml?AWSAccessKeyId=X
XXXXXXXXXXXXXXXXXXX&AssociateTag=xxxx-22&BrowseNode=13321821&Keywords=
%E7%8B%BC%E3%81%A8%E9%A6%99%E8%BE%9B%E6%96%99&Operation=ItemSearch&Res
ponseGroup=Medium&SearchIndex=Toys&Service=AWSECommerceService&Timestamp=
2009-07-19T07%3A14%3A35Z&Version=2009-01-06&
Signature=2xNUNBRLOw5raOJIAiYfBv3kN1umzY6qD9Ub%2B0x4XBM%3D

結論

id:willnetさんのおかげですごく簡単に署名認証を付けることができました。
ありがとうございました!

追記

×著名認証
○署名認証
お恥ずかしい限りです。