0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

PythonのloggingでAPIキー漏洩を防ぐ:URLクエリ・トレースバック・例外保存の「出口2か所」マスク設計

0
Posted at
record = _old_factory(*args, **kwargs)
if isinstance(record.msg, str):
    record.msg = mask_text(record.msg)
if record.args:
    record.args = tuple(mask_text(str(a)) for a in record.args)
return record

logging.setLogRecordFactory(masked_record_factory)



URLクエリの key、api_key、token や、HTTPヘッダーの Bearer トークンを *** に置き換えます。monkey= のような無関係なクエリを巻き込まないよう、境界を考慮した正規表現を設計し、単体テストで固定しました。


### ② 例外トレースバックの文字化の瞬間


エラー発生時に出力されるスタックトレースの中にも、URLやクエリパラメータが露出する可能性があります。カスタムの logging.Formatter または formatException をオーバーライドし、トレースバック文字列全体に対しても同様のマスキングを通します。


### ③ データベースに保存する例外メッセージ


見落としがちだったのが、**「バッチ処理が失敗した際のエラーメッセージをデータベースに保存していた」** 経路です。ログファイルを塞いでも、DBテーブルに生のキーが残っては意味がありません。DB保存の直前にも同じ mask_text 関数を噛ませることで、すべての流出経路を塞ぎました。


## 3. 実稼働中のプロセスを止めるタイミング


![時刻は会話ログとコミットの記録から](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3477815/1478828d-1d78-4e54-8c6a-efe7b9f315a2.jpeg)
*発見から27分でコミット*


修正コードができても、稼働中のワーカープロセスがログファイルをロックしており、古いプロセスのままではログにキーが書き足され続けます。


AIは「今すぐワーカーを止める(推奨)」を提案しましたが、人間は「実行中の学習バッチの終了(約15分後)を待ってから停止する」判断を選びました。


バッチ完了直後にプロセスを停止し、該当ログファイルを削除、修正版コードを適用して再起動。新しく出力されたログを確認し、生キーが0件、マスクされた key=*** が出力されていることを確かめてからコミットしました。発見からコミットまで27分でした。


## 4. 鍵をログに出さないためのチェックリスト


![鍵をログに出さないための5つの確認](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3477815/f5c72f3c-0233-4bd7-b701-76afc4270985.jpeg)
*鍵をログに出さないための5つの確認*


:::note info
- [ ] APIキーをURLのクエリパラメータで渡すSDK/サービスを使っていないか
- [ ] HTTPライブラリがリクエストURLを記録するログレベル(INFOなど)になっていないか
- [ ] マスキングはプロセス個別ではなく、共通の出口(LogRecordFactory等)に置いたか
- [ ] 失敗時の例外メッセージをDBや外部ストレージに平文保存していないか
- [ ] AIエージェントにログを読ませる際、機密行を除外・停止するガードがあるか
:::


AIに自律的なタスクを任せる際は、「秘密情報やセキュリティ懸念を見つけたら、ログを表示して書き写す前に作業を中断して報告する」というハーネス側のルールが不可欠です。![02_wall.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3477815/0e5efbf3-b371-4c6a-b3ca-96ea8fd688bc.jpeg)

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?