コンテンツにスキップ

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

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

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

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

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

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

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

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

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

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

なぜロックファイルを使うのか

Section titled “なぜロックファイルを使うのか”
  • 正確なセキュリティスキャン: ロックファイルには解決済みのすべての依存関係が正確なバージョンとともに含まれるため、Aikido がリスク範囲を完全に把握できます。
  • サプライチェーン攻撃への対策: ロックすることで、悪意のあるパッケージを混入させかねない意図しないバージョン変更を防げます。
  • 予測可能なビルド: すべての環境で同じバージョンがインストールされるため、「自分の環境では動く」問題が減少します。
  • 高速なインストール: 依存関係がロックされていれば、ロックファイルにより重いリゾルバー処理を省略できます。

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

Section titled “プロジェクトでロックファイルを使い始める方法”

始めるには、uvをインストールし、まだ用意していない場合はpyproject.tomlでプロジェクトをセットアップしてください。

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

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

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

プロジェクトのセットアップ、依存関係の管理、移行についての詳細な手順は、uvのドキュメントをご参照ください。

始めるには、Poetryをインストールし、pyproject.tomlでプロジェクトをセットアップしてください(まだ用意していない場合)。

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

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

プロジェクトのセットアップ、依存関係の管理、移行についての詳細な手順は、Poetryのドキュメントをご参照ください。