Services(AWS)でちょこちょこ遊んでます。Service(S3)とGlacierぐらいですが。そこでPythonから使ってみようと思い、いろいろ試しているのでその記録。この記事内のコード片は、パブリックドメインということにしておきますので、使用される方の責任でご自由にお使いください。keyの取得が必要になります。その作業に関しては解説サイトも多数存在するようですのでそちらを参照して下さい。概要AWSへをPythonから利用するライブラリとしてはboto(http://docs.pythonboto.org/)がありますが、あらゆるサービスに対応している反面、かなり巨大なものになっています。私のようにS3ぐらいしか使わないライトユーザーはそこまでいらないので、基本を学ぶことも含めてアクセス用モジュールを作成してみました。key、シグネチャ、タイムスタンプの組み合わせにより認証されます。このHMACのシグネチャベースの認証はTwitterなどで用いられているOAuthに似ていますね。keyを使ってシグネチャを作成することで認証を行う仕組みです。keyを知らないため、シグネチャの検証により認証されるようです。Guideを参考にしました。Referenceは例が豊富に載っており非常にわかりやすいです。APIの例をここに示します。AKIAIOSFODNN7EXAMPLE:k3nL7gH3+PadhTEVn5EXAMPLEこのようなリクエストを発行します。各々はとりあえず無視して認証で使われるAuthorizationヘッダを中心に実装を解説してみます。前置きが長くなりましたが、まずはS3に対する簡単なリクエスト(Bucketの一覧取得)を実行してみます。このリクエストは使用しているリージョンに対して"/"をGETすることでXMLで書かれたBucketの一覧が取得するというものです。key:Signatureという組み合わせになっており、ここのSignatureを求める手順を示します。keyを使って署名することで作成することができます。署名対象のヘッダは以下です。検証が不要なら空文字列でよいContent-TypeContent-Typeヘッダ。keyを使ってHMAC-SHA1による署名をします。コードは以下のようになります。Guide内の値を使っており、実際の認証には使えません。AKIAIOSFODNN7EXAMPLE:nNUgLAHZKX8fLjg7EiueU0Q71v4=このAWSから始まる文字列をAuthorizationヘッダに使用します。hosted-styleとpath-styleがあるようですが、ここではpath-styleを使用しています。東京リージョン(s3-ap-northeast-1)を接続先にしています。必要であれば変更して下さい。実際のリクエストを作成してみます。リクエストヘッダなどをいじるのでurllib2モジュールを使います。opener.open(req).read()ACCESS_KEYとSECRET_KEYは適切なものを指定して実行するとこんな感じです。わかりやすいように結果のXMLには改行を入れてあります。値は適当にダミーにしてあります。Guidなどのドキュメントを参考にして下さい。urllib2.RequestではHTTPメソッドにGETかPOSTしか使えない(何という仕様!)のでGET以外のリクエスト(PUT、DELETEなど)を行う場合はRequestのサブクラスを作るなどの対応が必要になります。ましなモジュールができたらGitHubあたりで公開したいなーとか思ってます。Referenceコメントコメントなどありましたらお願いします。