📌

dataform (BigQuery) の通信をmitmproxyでインターセプトしてみる

に公開

はじめに

Dataform CLI(Google Cloudのドキュメント, GitHub)の通信をmitmproxyでインターセプトしてみる。

Dataform CLIといっても内部的にはNode.jsのBigQuery Clientを読んでいるようなので、BigQuery Clientを使っているツールに対しては基本的に同じ手法でいけるはず。

環境

項目 バージョン
Windows Windows 11 Home 24H2 26100.4652
Node.js v22.19.0
npm 11.6.0
@dataform/cli 3.0.30
@dataform/core 3.0.30

mitmproxyのインストール

Download画面からWindows用zipをダウンロードして展開し、パスを通す。
https://www.mitmproxy.org/downloads/#

パスが通ったら、一度起動しておく。こうすることで、プロキシの証明書が生成される。

nodeのプロキシ設定

まず、PEM BUNDLE形式のファイルを作る。
今回はファイル名をnode_extra_ca_certs.pembundleとする。

C:\Users\{user_name}\.mitmproxy\mitmproxy-ca-cert.pemの中身をコピーして、作成したpembundleファイルにペーストする。

環境変数として、以下を設定する。(mitmproxyの待ち受けが127.0.0.1:8080の場合)

set "HTTP_PROXY=http://127.0.0.1:8080"
set "HTTPS_PROXY=http://127.0.0.1:8080"
set "NODE_EXTRA_CA_CERTS={pembundleへのパス}"

dataform通信のインターセプト

上記環境変数を設定した状態で、mitmproxyを起動し、dataform runを実行する。
mitmproxyではなくmitmwebを利用している場合は以下のような結果になる。

mitmweb

(参考)発生したエラーのメモ

HTTP_PROXYの設定PORT誤り

mitmwebのwebインターフェースの方のPORTを誤ってHTTP_PROXYに設定していたため発生。
プロキシサーバとしての待ち受けPORT側を設定したところ解消。

エラー内容
> dataform run
...
Dataform encountered an error: Request failed with status code 405
Error: Request failed with status code 405

HTTP_PROXYの設定形式誤り

HTTP_PROXY=127.0.0.1:8080からHTTP_PROXY=http://127.0.0.1:8080としたところ解消。

エラー内容
> dataform run
...
Dataform encountered an error: request to https://www.googleapis.com/oauth2/v4/token failed, reason: getaddrinfo ENOTFOUND 8080

証明書追加漏れ

信頼できる証明書の追加漏れ。環境変数NODE_EXTRA_CA_CERTSを設定したところ解消

エラー内容
> dataform run          
...
Dataform encountered an error: request to https://www.googleapis.com/oauth2/v4/token failed, reason: unable to verify the first certificate
FetchError: request to https://www.googleapis.com/oauth2/v4/token failed, reason: unable to verify the first certificate

Discussion