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 audit
  • pip-audit
  • Dependabot

Claude Opus 4.7 のおすすめ運用

ついでに、Claude Opus4.7におすすめの運用を聞いてみました。以下のような情報が出てきましたので参考までに。

  • 信頼度が高いパッケージ (Djangoなど) は、0 days/短め
  • 攻撃対象になりやすいユーティリティ系は、全体設定の 7-14 days を適用
  • インシデントがあった or 脆弱性修正が頻繁なもの (cryptography, urllib3 など) は、個別に短めにして、別途 脆弱性スキャナで監視

類似投稿

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です