GitLab Compliance - ハンズオンラボ: ライセンスコンプライアンスの有効化と設定

このハンズオンガイドでは、GitLab プロジェクトでライセンスコンプライアンスを有効化して使用する方法を説明します。

完了までの推定時間: 15分

目標

プロジェクトに新しい依存関係を追加する際は、依存関係のライセンスがプロジェクトに与える影響を慎重に検討する必要があります。ライセンス要件が満たされていることを確認するために、新たに検出されたライセンスに対して承認を要求するポリシーを追加できます。

依存関係スキャナーは脆弱性のスキャンに加えて、各依存関係が使用するライセンスも記録します。

ライセンスコンプライアンスレポートは、プロジェクトのポリシーに準拠していないプロジェクト内で検出されたすべてのライセンスのリストを生成します。

タスク A. プロジェクトのセットアップ

ライセンスコンプライアンススキャンの使用を開始する前に、プロジェクトにいくつかのライセンスをセットアップしておくと便利です。

  1. プロジェクトに移動します。

  2. + > New file を選択します。

  3. Filenamerequirements.txt と入力します。

  4. 内容に以下のテキストを追加します:

    #
    # This file is autogenerated by pip-compile with Python 3.12 by the following command:
    #
    #    pip-compile --output-file=requirements.txt requirements.in
    #
    fastapi==0.135.1
    
  5. Commit changes を選択します。

  6. 任意のコミットメッセージを追加します。Branch 設定を Commit to a new branch に切り替えます。

  7. Target Branch フィールドに add-deps という名前を入力します。

  8. Create a merge request for this change にチェックが入っていることを確認します。

  9. Commit changes を選択します。

  10. マージリクエストのすべてのオプションをデフォルトのままにして Create Merge Request を選択します。

  11. Merge を選択します。

    注意: パイプラインがまだ実行中の場合、“Merge” ボタンの代わりに “Set to auto-merge” と表示されることがあります。これは問題ありません。ボタンをクリックすると、パイプラインが正常に完了した後に MR がマージされます。

  12. 左サイドバーで Code > Repository を選択します。

  13. + > New file を選択します。

  14. ファイル名を .gitlab-ci.yml にします。

  15. ファイルに以下の内容を追加します:

    stages:
        - test
    include:
      - component: ilt.gitlabtraining.cloud/components/dependency-scanning/main@main
    
  16. Commit changes を選択します。

  17. Commit message を “Added pipeline configuration file with Dependency Scanning” などに設定します。

  18. Commit to a new branch オプションを選択し、Target Branchadd-scans に設定します。

  19. Create a merge request for this change にチェックが入っていることを確認します。

  20. Commit changes を選択します。

  21. すべてのオプションをデフォルトのままにして Create Merge Request を選択します。

  22. Merge を選択します。

これらの変更により、依存関係スキャンと依存関係がアプリケーションに追加されました。これらの変更により、プロジェクトのライセンスを表示してライセンスコンプライアンスを制御できるようになります。

タスク B. ライセンスコンプライアンススキャン

  1. Build > Pipelines に移動します。ステータスをクリックして新しく作成されたパイプラインを開きます。dependency-scanning ジョブが実行されているはずです。

  2. パイプラインが正常に完了したら、Secure > Dependency list に移動します。

  3. ライセンスをクリックして、ライセンスとコンプライアンス要件の詳細を表示します。

タスク C. ライセンスの承認と拒否

チームが MIT ライセンスを承認したとしましょう。MIT ライセンス以外のライセンスが依存関係に存在する場合は、マージリクエストを完了する前に承認が必要です。

  1. Secure > Policies に移動します。

  2. New policy ボタンをクリックします。

  3. Merge Request approval policy > Select policy をクリックします。

  4. ポリシーの名前(例: ScanApprovedPolicy)と説明を入力します。

  5. Policy statusEnabled に設定します。

  6. Policy enforcementStrictly enforced に設定します。

  7. RulesSelect scan type ドロップダウンメニューを License Scan に設定します。マージリクエストのターゲットとして all protected branchesNo exceptions が選択されていることを確認します。

  8. Status is ドロップダウンメニューを Newly Detected に設定します。

    次に、MIT ライセンスを Allow list に追加します。これを行う方法はいくつかあります。まず、allowlist (0 licenses) というリンクをクリックして、許可リストと拒否リストを使用することができます。ただし、許可するライセンスと拒否するライセンスをより細かく制御できる少し異なる方法を使用します。

  9. License is セクションの右側にある削除ボタン(ゴミ箱アイコン)をクリックします。

  10. Add new criteria を選択し、ドロップダウンから License type を選択します。

  11. Matching と表示されているドロップダウンを Except に変更します。

    これにより、これから選択するライセンスを除くすべてのライセンスで MR の承認が必要になります。つまり、その特定のライセンスは allowed(許可)になります。

  12. Select license types ドロップダウンで MIT License を検索して選択します。類似した名前のライセンスがいくつかあるため、正しいものを選択していることを確認してください。

  13. Actions セクションで、個人ユーザーからの 1 つの承認を要求します。承認ユーザーとしてあなたのユーザー名をクリックします。

  14. Advanced 設定を展開します。

  15. Prevent approval by merge request’s authorPrevent approval by commit author の設定を無効にします。

  16. Configure with a Merge Request をクリックします。

  17. 表示されたマージリクエストで Merge ボタンをクリックします。

  18. ポリシーを作成すると、GitLab はポリシーを管理するための新しいプロジェクトを作成します。Merge をクリックした後、元のプロジェクトに戻る必要があります。

タスク D. パイプラインのライセンスコンプライアンスレポートを表示する

  1. 左サイドバーで Build > Pipelines を選択します。

  2. ページ右上の New pipeline ボタンを選択します。

  3. すべてのオプションをデフォルト値のままにして New pipeline を選択します。

  4. パイプラインを監視して、各ジョブが正常に完了するまで待ちます。

  5. すべてのジョブが完了したら、ページを更新します。Licenses タブを選択します。

  6. GitLab が MIT License 以外のすべてのライセンスをポリシー違反として説明していることを確認します。このレポートは、承認していないライセンスを含む可能性のある既存の依存関係をフラグとして立てるのに役立ちます。

タスク E. 拒否されたライセンスを持つ依存関係を追加する MR を作成する

  1. add-dnspython-dependency という名前の新しいブランチを作成します。

  2. add-dnspython-dependency ブランチ(main ブランチではありません!)に requirements.txt の末尾に dnspython==2.1.0 を新しい行として追加して、新しい依存関係を追加します。

  3. Create Merge Request ボタンをクリックします。

  4. すべてのフィールドをデフォルト値のままにして Create Merge Request をクリックします。

  5. マージリクエストのパイプラインが完了するまで待ちます。

  6. パイプラインが完了したら、ページを更新します。ライセンスコンプライアンススキャンが表示され、1 件の新しいライセンスが検出されたことが示されます。

  7. マージリクエストの概要に戻ります。

  8. Full report をクリックします。

  9. ライセンスコンプライアンスレポートに、プロジェクトポリシーに準拠しなくなったすべてのライセンスが一覧表示されます。マージステータスに Requires 1 approval from policy と表示されることを確認します。

  10. マージリクエストのアクティビティに新しいコメントも追加され、ポリシー違反が検出されたことが示されます。

    このマージリクエストは、dnspython が承認されたライセンスを使用していないため、追加の承認が必要になりました。レビュアーはマージを完了する前に、ライセンスが問題ないかどうかを確認できます。

タスク F. ラボポリシーのクリーンアップ

承認なしに main にブランチをマージできるようにするために、ポリシーを無効にすることをお勧めします。

  1. Secure > Policies に移動します。

  2. 作成したポリシーをクリックします。Edit policy をクリックします。

  3. ページ下部の Delete Policy をクリックします。

  4. 表示されたマージリクエストの Merge をクリックします。

ラボガイド完了

このラボ演習を完了しました。このコースの他のラボガイドを参照できます。

ご提案はありますか?

ラボに変更を加えたい場合は、マージリクエストで変更内容を送信してください。