2013年8月19日月曜日

vmodでS3の認証を突破する





とか考えていたら




といわなちゃんさん先生に尋ねると、




なんということでしょう!


というわけで試してみました。







環境はVirtualBox上で




  • CentOS 5.6(x86_64)

  • Varnish 3.0.0

  • libvmod-awsrest


という感じです。


公式RPMからふわっとインストールするのではなく今回試したようにrpmbuildとかやりだすと3.0.2ではどハマりして泣きそうになったので3.0.0で検証しました。


通常S3にマネジメントコンソールからファイルをアップロードすると、自身しかOpen/Downloadは出来ません。


EveryoneにOpen/Downloadを許可する設定を追加してもいいのですが、高貴な恥じらいの精神をもった紳士淑女には抵抗があるかと思われます。


そこで


http://docs.amazonwebservices.com/AmazonS3/latest/dev/RESTAuthentication.html#ConstructingTheAuthenticationHeader


な感じでヘッダを設定してやればいいのですがAWSSecretAccessKeyからハッシュ値を出してやらなければなりません。


それを簡単かつお手軽に可能にしてくれるのが今回いわなちゃんさん先生が作成したlibvmod-awsrestなのです!


それでは早速やってみましょう。


1.ソースをダウンロード

https://www.varnish-cache.org/releases/varnish-cache-3.0.0


2.展開して/usr/src/redhat/SOURCESに

必要なもの(https://www.varnish-cache.org/docs/3.0/installation/install.html#build-dependencies-on-red-hat-centos)は事前に入れておきます。rpm-buildとgccも当然必要です。


docutilsが必要なのでhttp://sourceforge.net/projects/docutils/?source=directoryからダウンロードして展開し



python setup.py install


してあげます。


3.RPM作成

とりあえずRPMだけ作成したいので、ソースディレクトリ内のredhatディレクトリから



rpmbuild -bb varnish.spec


してやります。specファイルのバージョン部分の修正が必要です。


4.インストール

適当にrpm ivhとかして下さい。


5.libvmod-awsrestインストール

mhashが必要なので事前にインストールしておきます。


ダウンロードはhttps://github.com/xcir/libvmod-awsrestから。


VARNISHSRCは/usr/src/redhat/BUILDでconfigure。


6.VCL編集

Varnishが使用するVCLを編集します。Exampleの通りで大体できると思いますが、backendの「.host」に指定するドメイン名にはバケット名を先頭につけてやらないとダメかも?


そんなこんなでAWSAccessKeyId、AWSSecretAccessKeyを記載してlookupしてやります。


お望みの通りファイルは取得できたでしょうか。


おまけ.隠蔽工作

高貴な恥じらいをもつ紳士淑女ならS3を使用していることをちょっと隠したいかもしれません。


S3からのレスポンス内のヘッダをvcl_fetchの中で



unset beresp.http.x-amz-request-id;
unset beresp.http.x-amz-id-2;


等としてやると謎めいた雰囲気をより一層醸し出せるかもしれません。




いわなちゃんさん先生本当にありがとうございました!




おまけのおまけ

Varnish 3.0.2だとvarnishtestでコケまくりました。


使用ポートのレンジを広げてもulimit -nを増やしてもsomaxconnを増やしてもテストの並列度?を1にしても(そもそもそれらが関係あるか分かってませんが)ダメでした。





0 件のコメント:

コメントを投稿