9月 062012

Amazon S3 REST-API is necessary to generate signature.
vmod-awsrest generate to Authorization and Date header for Amazon S3.

How to use

VCL

import awsrest;
backend default {
 .host = "s3.amazonaws.com";
 .port = "80";
}
sub vcl_recv{
 awsrest.s3_generic(
 "accessKey", //AWSAccessKeyId
 "secretKey", //SecretAccessKeyID
 req.request, //HTTP-Verb
 req.http.content-md5, //Content-MD5
 req.http.content-type, //Content-Type
 "", //canonicalizedAmzHeaders
 req.url, //canonicalizedResource
 now //Date
 );
}

Output

15 TxHeader b Date: 2012年7月03日 16:21:47 +0000
15 TxHeader b Authorization: AWS accessKey:XUfSbQDuOWL24PTR1qavWSr6vjM=

This module set to req.http.Authorization and req.http.Date, bereq is not use.
I recommend call in the vcl_recv.
And, be careful to default settings.
If req.http.Authorization contains, it is not caching. (default setting)

download here.
libvmod-awsrest


Reference site
PHP で Amazon S3 の REST API を使用 #1
Authenticating REST Requests

日本語はこっち
VarnishでAmazon S3の認証ヘッダを作るVMODを作ってみた


7月 112012

hiro_yさんからこんな質問を受けたので

@xcir VarnishからS3の認証突破する方法とかご存知ないですか...と思いまして

— 山岡広幸さん (@hiro_y) 7月 2, 2012


AWSの勉強がてら作ってみました。

S3のREST-APIのAuthorizationヘッダは、日付やリソースの場所などを改行で結合して
HMAC-SHA1でハッシュ化して、BASE64エンコードする必要があります。
HMAC-SHA1については、Varnish公式が公開しているvmod-digestを使うことでできるのですが
出力をBASE64にすることができないので、コードを拝借して今回のVMODを作ってみました。
ちなみに改行を扱うことについても、インラインCかVMODを使う必要があります。

使い方

import awsrest;
backend default {
 .host = "s3.amazonaws.com";
 .port = "80";
}
sub vcl_recv{
 awsrest.s3_generic(
 "accessKey", //AWSAccessKeyId
 "secretKey", //SecretAccessKeyID
 req.request, //HTTP-Verb
 req.http.content-md5, //Content-MD5
 req.http.content-type, //Content-Type
 "", //canonicalizedAmzHeaders
 req.url, //canonicalizedResource
 now //Date
 );
}

上記のように呼び出すとreq.http.Authorizationとreq.http.Dateに生成したヘッダがセットされます。

15 TxHeader b Date: 2012年7月03日 16:21:47 +0000
15 TxHeader b Authorization: AWS accessKey:XUfSbQDuOWL24PTR1qavWSr6vjM=

セットされるのがbereqではないのでvcl_recvで呼び出すことを推奨します。

またAuthorizationを生成するのでもしキャッシュを行いたい場合は適切にVCLを記述してください。
デフォルトのVCLではreq.http.Authorizationを含む場合はpassするためです。

僕の方でも簡単な動作チェックを行なっていますが、もし変な動きをしたら教えて下さい。

downloadはこちら(libvmod-awsrest)


参考サイト
PHP で Amazon S3 の REST API を使用 #1
Authenticating REST Requests


7ads6x98y

AltStyle によって変換されたページ (->オリジナル) /