Pythonにおけるサプライチェーン対策現在地
最近、Pythonのサプライチェーン対策で新パッケージをガードする仕組みが出ました。どういう背景があるのか、どうやって使うのか、どういう仕組みかを調べておきたいと思います。
一連の背景
Dependency Cooldown という仕組みが2025年11月ごろから提唱されました。
We should all be using dependency cooldowns
詳細は、上記の記事を読んでください。私が重要と考える要点は以下です。
- 過去のOSS向けサプライチェーン攻撃のうち、10件中8件が1週間以内に発覚している
- 新しく公開されたパッケージを一定期間使わないようにしましょう。
- 7日間のクールダウンはどうか、という話が出ている
そして、これを実現するために各種パッケージマネージャーが対応を進めています。
パッケージマネージャーの対応状況
Pythonのパッケージマネージャーといえば、pipやuvが思い浮かびます。それぞれの対応状況を調べてみました。その結果、以下がわかりました。
まず、uvもpipも両方とも、実装されています。それぞれの対応時期は以下です。
- uv は2024年5月には絶対日付の指定が実装されていた
- uv は2025年12月に相対期間をサポートした
- pip は2026年1月の絶対日付がリリースで公開された
- pip は2026年4月26日の相対期間対応がリリースで公開された
以下のリンクを参考にしています。
Package Managers Need to Cool Down
uvの場合
私は普段、uvを使っています。uvの場合、pyproject.tomlへ以下のような記載を書くと、この期間以内に公開されたパッケージを無視する
[tool.uv]
exclude-newer = "7 days"
https://docs.astral.sh/uv/reference/settings/#dependency-metadata
実際に手元で動かしてみたところ、ライブラリ単位でスルーしたい状況が想像できました。例えば、Djangoはスルーしたい、とか、セキュリティアップデートは先に適応したい、など。
ライブラリ単位のcooldown指定
調べてみたところ、uv ならできる様子が見えました。pipの場合は、明示的な機能がなさそうに見えます。
uvでやってみた
以下のように書きます。当たり前ですが、この数字を変更していくと動くことが確認できます。
[tool.uv.exclude-newer-package]
django = "0 days"
この仕組みの課題
このサプライチェーン対策について調べていたところ、以下のような運用課題があることも指摘されていました。
- CVE が cooldown 期間内に出た時、修正版の取り込みが遅れる問題
- CVEの修正版が出てきた時に取り込みできない、等
それに対する対応は、定期的に脆弱性スキャナで状況をチェックして、セキュリティ的な懸念が出てきたら、それだけ通すようにする運用ができるようです。
ここでいう脆弱性スキャナとは以下のようなものです。私はDependabotしか実際に使ったことがないので、それぞれの挙動は各自でご確認ください。
uv auditpip-auditDependabot
Claude Opus 4.7 のおすすめ運用
ついでに、Claude Opus4.7におすすめの運用を聞いてみました。以下のような情報が出てきましたので参考までに。
- 信頼度が高いパッケージ (Djangoなど) は、0 days/短め
- 攻撃対象になりやすいユーティリティ系は、全体設定の 7-14 days を適用
- インシデントがあった or 脆弱性修正が頻繁なもの (cryptography, urllib3 など) は、個別に短めにして、別途 脆弱性スキャナで監視