2016-01-03

AWS CLIのHTTPキャプチャ

AWSのREST APIはリファレンスもあるしSignatureの生成方法も載っているので、SDKが無いような言語でAPI叩きたい場合でも大抵問題ないんですが、それでも仕様が謎でどういうリクエスト投げれば良いんだ!?っていうケースもあると思います。

そんなときは各種SDKのコードを読むか、SDKを使ってAPIコールしてHTTPの中身を見るかして仕様を把握する感じになりますが、今回は後者のSDKを使ってAPIコールの中身を見る、というのをやっていきます。

基本的な考え方は以前のSOAP APIの中身をFiddlerで見る回と同じですが、今回はAWS CLIのAPIコールに対してCharlesとmitmproxyを使ってキャプチャしていきます。

Charles

mac版のGUIなプロキシであるCharlesを使います(買い切りで6000円くらいの有料ライセンス)

[Proxy]>[SSL Proxying Settings]で[Enable SSL Proxying]にチェックをつけて、Locationsに対象のホスト名とポート番号を設定します。

charles_ssl_settings

[Help]>[SSL Proxying]>[Save Charles Root Certificate]で任意の場所にCharlesのルート証明書をエクスポートします。

mitmproxy

OSSでCUIなプロキシであるmitmproxyを使った方法になります。

インストール

$ pip install mitmproxy

起動

$ mitmproxy -p 8888

ルート証明書は~/.mitmproxyディレクトリ内にあります。(awscliのオプションに指定する証明書はmitmproxy-ca-cert.cerでOK)

AWS CLIのキャプチャ

事前にAWS CLIのプロキシの設定をします(環境変数の設定)

$ export HTTPS_PROXY=https://localhost:8888

SNSのPublishをキャプチャしたい場合はこんな感じでコールします↓

$ aws sns publish --topic-arn "{input your topic ARN}" \
> --message "{message}" --ca-bundle {certificate path}

–ca-bundleにはエクスポートしたルート証明書のパスをセットします。面倒な場合は証明書のエクスポートを飛ばして、–no-verify-sslを指定してもOKですが、セキュリティ的には証明書使ったほうが良いと思われます(とは言えローカルのプロキシなのでそんなに変わらないと思いますが…)

ブラウザでSSL/TLS通信のキャプチャをしたい場合は、Charlesやmitmproxyのルート証明書をインストールして信頼する必要があります。

charles_certificate_install1

[常に信頼]にしておくと、以下のようにアイコンが変わります。

charles_certificate_install2

このエントリーをはてなブックマークに追加