Pythonプロジェクト: セキュリティスキャンのベストプラクティス
Aikido は Python の依存関係に存在する既知の脆弱性(CVE)を発見し、それらの依存関係が使用しているリスクのある、あるいは望ましくないライセンスを検出できます。
これを正確に行うには、Aikido がすべての依存関係(それらのパッケージが依存しているパッケージも含む)の正確なバージョンにアクセスできる必要があります。
Aikidoはどのように依存関係とサブ依存関係を検出するか
Section titled “Aikidoはどのように依存関係とサブ依存関係を検出するか”Aikido は標準で、依存関係スキャンのために以下のファイルをサポートしています。
uv.lockPipfile.lockpoetry.lockpdm.lockrequirements.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
Section titled “Poetry”始めるには、Poetryをインストールし、pyproject.tomlでプロジェクトをセットアップしてください(まだ用意していない場合)。
その後、依存関係を定義し、Poetryにpoetry.lockファイルを生成させることで、すべての依存関係およびそれらが依存するパッケージの正確なバージョンを固定できます。
pyproject.toml と poetry.lock の両方をリポジトリにコミットし、ロックファイルを手動で編集することは避けてください。
プロジェクトのセットアップ、依存関係の管理、移行についての詳細な手順は、Poetryのドキュメントをご参照ください。