Cartoon rock climber using proper security techniques while climbing a rock wall

依存関係レビュー構成をカスタマイズする

Nicholas Liffen
Nicholas Liffen // Director, GitHub Advanced Security // GitHub

既定では、依存関係のレビューは、安全ではない依存関係をコード導入の前に捉えるのに役立ちます。しかし、依存関係レビュー アクションを構成することで、依存関係レビューでそれ以外のことも実行できるようになります。ここでは、3 つの非常に一般的な修正内容である、脆弱性の重大度レベルに基づき失敗した構築、依存関係ライセンス、スコープに着目していきます。


このガイドの学習内容

  • 依存関係レビュー ワークフロー ファイルを編集する方法

  • 一般的な依存関係レビューのカスタマイズを実装する方法


よくある質問の 1 つに、依存関係とライセンスを審査するために許可リストとブロックリストのどちらを使用すべきかというものがあります。大企業との連携で豊富な経験を持つ GitHub のプリンシパル フィールド セキュリティ スペシャリストである Keith Hoodlet は、次のような見解を示しています。

多くの場合、許可リストよりもブロック リストを使用することをお勧めします。 許可リストはセキュリティの観点から確実にデプロイすることができる事実上最も安全な方法ですが、このリストを効果的に使用できるだけのリソースを持っている組織はほとんどありません。 許可できる本当に優れたライブラリを全て網羅したリストを作成するよりも、実際に不適切なライブラリのリストを作成するほうが実用性が高くなります。 脆弱性の重大度に基づいて失敗させれば、セキュリティの必要性と、開発者のための摩擦の少ないエクスペリエンスを作るというニーズのバランスをうまく取ることができます。もちろん、リポジトリの性質やチームのリソースによって結果は左右されます。

同じことはライセンスにも当てはまります。世の中にはさまざまなライセンスがあるため、互換性のあるライセンスの完全なリストを作成するよりも、現在のライセンスと互換性がないとわかっているものを除外するほうが現実的です。

Keith Hoodlet
Keith Hoodlet // Principal Field Security Specialist, CodeQL // GitHub

1. 依存関係レビュー アクションを追加する。

GitHub Actions と依存関係グラフが有効になっていることを確認します。

[GitHub Actions] タブをクリックします。

[セキュリティ] セクションを見つけて [全て表示] をクリックします。

[依存関係レビュー] を見つけて [構成] をクリックします。

これにより、依存関係レビューの GitHub Actions ワークフロー ファイル dependency-review.ymlが開きます。次の内容が表示されます。

name: 'Dependency Review'
on: [pull_request]



permissions:
  contents: read



jobs:
  dependency-review:
    runs-on: ubuntu-latest
    steps:
      - name: 'Checkout Repository'
        uses: actions/checkout@v3
      - name: 'Dependency Review'
        uses: actions/dependency-review-action@v3

2. 重大度を変更する。

上記のワークフロー ファイルで説明したように、依存関係レビュー アクションを必須に設定することで、脆弱な依存関係を含むコードがマージされないようにブロックできます。ただし、リスクの低い脆弱性をブロックすると、状況によっては制限が厳しすぎる場合があります。脆弱性の重大度を変更して構築を失敗させるには、fail-on-severity オプションを使用できます。

次のコードを dependency-review.yml ファイルに追加します。

      - name: Dependency Review
        uses: actions/dependency-review-action@v3
        with:
          fail-on-severity: moderate

3. ブロックするライセンスを追加する。

依存関係をブロックする理由は脆弱性だけではありません。組織で使用できるライセンスの種類に制限がある場合は、依存関係レビューを使用して、deny-licenses オプションでポリシーを適用できます。

LGPL-2.0 または BSD-2-Clause ライセンスを含む依存関係を導入した場合に構築を中断するには、dependency-review.yml ファイルに追加します。

          deny-licenses: LGPL-2.0, BSD-2-Clause

4. スコープを追加する。

最後に、fail-on-scopes を使用して、脆弱な依存関係が特定のデプロイ環境にマージされるのを防ぎます。

このような依存関係を開発環境から除外するには、次のコードを dependency-review.yml ファイルに追加します。

          fail-on-scopes: development

この dependency-review.yml ファイルは次のようになります。

name: 'Dependency Review'
on: [pull_request]



permissions:
  contents: read



jobs:
  dependency-review:
    runs-on: ubuntu-latest
    steps:
      - name: 'Checkout Repository'
        uses: actions/checkout@v3
      - name: Dependency Review
        uses: actions/dependency-review-action@v3
        with:
          fail-on-severity: moderate
          deny-licenses: LGPL-2.0, BSD-2-Clause
          fail-on-scopes: development

このファイルは自分のカスタム構成のテンプレートとして使用できます。

次の項目: GitHub Advanced Security の中級モジュールのまとめ

ここで、これまでに学んだことを復習し、GitHub Advanced Security で他に何ができるかを見てみましょう