概要??
AWS SDKを使用してアプリケーションを開発する際、SDKが実際にどのようなHTTPリクエストを送信しているのかを確認したい場面がありますよね!!??この記事では、Windowsにおいて、ワイヤーシャークを使ってAWS SDKのトラフィックを解析する方法を説明します。
必要なツール
- Wireshark
- AWS SDK for Python (Boto3)
- Python
SDKに関してはboto3を利用しましたが、AWSにアクセスできるのであればなんでも大丈夫です。
手順
Wiiresharkのセットアップ
-
Wiresharkをインストールし、起動します
-
適切なネットワークインターフェースを選択します。Windowsの場合は、「Wi-Fi」という名前のインターフェースを選択します
-
フィルタを設定して、AWS SDKのトラフィックのみを表示するようにします。AWS SDKはHTTPSを使用するため、以下のフィルタを適用します
絞り込みバー443
送信用の簡単なコードの準備
-
AWS SDKを使用するPythonスクリプトを準備します。以下は、S3バケットのリストを取得する例です
import boto3 s3 = boto3.client('s3') response = s3.list_buckets() print('Existing buckets:') for bucket in response['Buckets']: print(f' {bucket["Name"]}')
-
AWS認証情報を設定します。環境変数、
~/.aws/credentials
ファイル、またはIAMロールを使用して設定できます。
最悪のところ、認証情報などは空で誤った状態でも認証→400エラーが見られるので大丈夫ですが、正常な流れを見たい場合はすべて正しく認証設定などを行ってください。
自分は、認証を適当な状態で実行しているため本当にこのスクリプトが動くかは保証できません。
基本は動くはずですが動かない場合は各自修正のほどお願いいたします。
SSL複合化の準備
- SSLキーログファイルを設定します。コマンドプロンプトまたはPowerShellを管理者権限で開き、以下のコマンドを実行します。
- コマンドプロンプトの場合:
set SSLKEYLOGFILE=%cd%\keylog.log
- PowerShellの場合:
$env:SSLKEYLOGFILE = "$pwd\keylog.log"
- コマンドプロンプトの場合:
これを実行することで、SSLの暗号化をWiireshark上で解除してみることができますが、重要な情報であるため必要がなくなった場合は即座に 完全に削除することを推奨します
スクリプトの実行
- 同じターミナルセッションで、Pythonスクリプトを実行します。
これにより先ほどのSSL暗号と同じ暗号パターンで暗号化されるためWiireshark上で複合化できるようになる
Wiiresharkの複合化の設定
- 関連するパケットを選択し、詳細を確認します。SSLで暗号化されたペイロードを復号化するには、Wiresharkの設定で、「(Pre)-Master-Secret log filename」フィールドにキーログファイルのパスを指定します。
↓自分の説明よりもわかりやすいのでこちらから、複合化の設定を行うようにしてください
- Wiresharkでキャプチャされたパケットを確認します。AWS SDKのリクエストは、宛先がAWSのサービスエンドポイントになっているはずです。
エンドポイントもわからないよ、、となっているでしょう、、
そのような場合は443で絞り込んだ後に、(application/json)となっている通信を見るとよいいでしょう。暗号化されたものは本来見えないため、Wiiresharkによって複合化された今回の通信情報である可能性が限りなく高いです。
まとめ
Wiresharkを使用することで、AWS SDKが行っているHTTPリクエストの詳細を確認することができます。これにより、アプリケーションとAWSサービス間の通信をデバッグしたり、パフォーマンスを最適化したりする際に役立ちます。ただし、SSLキーログファイルには機密情報が含まれているため、取り扱いには十分注意してください。
おまけ
SDKの使えない環境においてAPIからアクセスする際にどのように動いいているのかあたりをつけたいと思い行ったが、認証回りが地獄であるためLambdaなどを利用することを考えようと思う、、、
本家のAWSの設定周りもこれの前に見たが、地獄であった、、無念である、、、