📌
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をダウンロードして展開し、パスを通す。
パスが通ったら、一度起動しておく。こうすることで、プロキシの証明書が生成される。
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を利用している場合は以下のような結果になる。

(参考)発生したエラーのメモ
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