日本語

Pythonプロジェクト: セキュリティスキャンのベストプラクティス

Aikido は、Python の依存関係に含まれる既知の脆弱性(CVE)を検出し、それらの依存関係が使用しているリスクのあるライセンスや望ましくないライセンスにフラグを立てることができます。

これを正確に行うには、Aikido がすべての依存関係の正確なバージョンにアクセスできる必要があります。これには、それらのパッケージが依存しているパッケージも含まれます。

Aikido はどのように依存関係とサブ依存関係を検出するのか?

Aikido は、標準で以下のファイルの依存関係スキャンをサポートしています:

  • uv.lock
  • Pipfile.lock
  • poetry.lock
  • pdm.lock
  • requirements.txt (ロックファイルが存在しない場合のフォールバックとしてのみ)
  • requirements.yml (ロックファイルが存在しない場合のフォールバックとしてのみ)

プロジェクトに requirements.txt しか含まれていない場合、Aikido は依存関係ツリー全体を検出できない可能性があります。

これは、pip がサブ依存関係の正確なバージョンを記録しないためであり、結果が不完全または古くなる可能性があります。

完全で信頼性の高いスキャンを行うには、ロックファイルを生成するモダンな Python パッケージマネージャーである uv の使用をおすすめします。

なぜロックファイルを使用するのか?

  • 正確なセキュリティスキャン:ロックファイルには、解決されたすべての依存関係が正確なバージョンとともに含まれるため、Aikido はリスクの対象範囲を完全に把握できます。
  • サプライチェーン攻撃からの保護:バージョンを固定することで、悪意のあるパッケージを持ち込む可能性のある意図しないバージョン変更を防ぎます。
  • 予測可能なビルド:すべての環境で同じバージョンがインストールされます。「自分のマシンでは動く」という問題が減ります。
  • 高速なインストール:依存関係が固定されると、ロックファイルによって負荷の高い依存関係解決のステップを省略できます。

プロジェクトでロックファイルの使用を始める方法

UV

まず、uv をインストールし、まだ pyproject.toml がない場合は pyproject.toml を使用してプロジェクトをセットアップします。

そこから、依存関係を定義し、uv に uv.lock ファイルを生成させることができます。このファイルは、すべての依存関係とサブ依存関係の正確なバージョンを固定します。

pyproject.toml と uv.lock の両方をリポジトリにコミットし、ロックファイルを手動で編集しないようにしてください。

プロジェクトで現在 requirements.txt を使用している場合、uv はそれらの依存関係を直接インポートしてロックファイルを作成できます。これにより、Aikido は完全なバージョン精度で依存関係ツリー全体を検出できるようになります。

プロジェクトのセットアップ、依存関係の管理、移行に関する詳細な手順は、uv のドキュメントで確認できます。

Poetry

まず、まだ pyproject.toml がない場合は、Poetry をインストールし、pyproject.toml を使用してプロジェクトをセットアップします。

そこから、依存関係を定義し、Poetry に poetry.lock ファイルを生成させることができます。このファイルは、すべての依存関係とそれらが依存するパッケージの正確なバージョンを固定します。

pyproject.toml と poetry.lock の両方をリポジトリにコミットし、ロックファイルを手動で編集しないようにしてください。

プロジェクトのセットアップ、依存関係の管理、移行に関する詳細な手順は、Poetry のドキュメントで確認できます。