背景
以前Goで機密情報の漏洩防止について触れました。
今回はPythonでどうするべきかについて説明します。
環境
- Python 3.11.15
- Pydantic 2.13.4
Pydantic でシークレットを漏洩させないためのパラメータ
トークン等のシークレットが検証エラー・ログ・repr 経由で漏れないための対策を一覧化します。
各パラメータの守備範囲
| 漏洩経路 | SecretStr(型) |
hide_input_in_errors(ConfigDict) |
Field(repr=False) |
Field(exclude=True) |
|---|---|---|---|---|
A. print(settings)/f"{settings}"(モデルを文字列化) |
✅ ********** |
❌ | ✅ 項目ごと非表示 | ❌ raw 出る |
B. settings.token を直接ログ/f-string |
✅ 要get_secret_value() |
❌ | ❌ raw | ❌ raw |
| C. 第三者lib/例外がモデルをrepr (traceback locals等) |
✅ | ❌ | ✅ | ❌ |
D. model_dump()/model_dump_json() をログ |
✅ json→********** |
❌ | ❌ raw | ✅ 出力から除外 |
E. 検証エラーの input_value(モデルレベルは生 dict) |
❌ raw漏れ | ✅ | ❌ | ❌ |

