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に対象のホスト名とポート番号を設定します。
[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のルート証明書をインストールして信頼する必要があります。
[常に信頼]にしておくと、以下のようにアイコンが変わります。