正式なドキュメントは英語版であり、この日本語訳はAI支援翻訳により作成された参考用のものです。日本語訳の一部の内容は人間によるレビューがまだ行われていないため、翻訳のタイミングにより英語版との間に差異が生じることがあります。最新かつ正確な情報については、英語版をご参照ください。

チュートリアル: スキャン実行ポリシーをセットアップする

  • プラン: Ultimate
  • 提供形態: GitLab.com、GitLab Self-Managed、GitLab Dedicated

このチュートリアルでは、スキャン実行ポリシーを作成して適用する方法を説明します。これらのポリシーは、CI/CDパイプラインの一部としてアプリケーションセキュリティツールを適用します。このチュートリアルでは、2つのプロジェクトのCI/CDパイプラインでシークレット検出を適用するポリシーを作成します。

このチュートリアルでは、次のことを行います:

はじめる前

  • 既存のグループに新しいプロジェクトを作成するための権限が必要です。

プロジェクトAを作成

標準的なワークフローでは、既存のプロジェクトが既にある場合があります。このチュートリアルでは、何もない状態から始めるため、最初のステップはプロジェクトを作成することです。

プロジェクトAを作成するには、次の手順を実行します:

  1. 左側のサイドバーで、検索または移動先を選択して、グループを見つけます。

  2. 新規プロジェクトを選択します。

  3. 空のプロジェクトの作成を選択します。

  4. フィールドに入力します。プロジェクト名に、go-example-aと入力します。

  5. プロジェクトを作成を選択します。

  6. Add (+)(追加) > 新しいファイルを選択します。

  7. ファイル名にhelloworld.goと入力します。

  8. 次のGoのコード例をコピーしてファイルに貼り付けます。

    package main
    import "fmt"
    func main() {
        fmt.Println("Hello world")
    }
  9. 変更をコミットするを選択します。

次の手順は、スキャン実行ポリシーを作成することです。最初のセキュリティポリシーを作成すると、ポリシープロジェクトが作成されます。ポリシープロジェクトには、リンクされているすべてのプロジェクトで作成されたセキュリティポリシーが保存されます。ポリシーを保護対象のプロジェクトから分離しておくことで、セキュリティの設定を再利用しやすく、メンテナンスも容易になります。

スキャン実行ポリシーを作成

スキャン実行ポリシーを作成するには、次の手順を実行します:

  1. 左側のサイドバーで検索または移動先を選択し、go-example-aプロジェクトを検索します。

  2. セキュリティ > ポリシーに移動します。

  3. 新規ポリシーを選択します。

  4. スキャン実行ポリシーセクションで、ポリシーの選択を選択します。

  5. フィールドに入力します。

    • 名前: シークレット検出を適用します。
    • ポリシーステータス: 有効。
    • アクション: シークレット検出スキャンを実行します。
    • 条件: すべてのブランチで、パイプラインが実行されるたびにトリガーされます。
  6. マージリクエスト経由で設定を選択します。

    ポリシープロジェクトgo-example-a - Security projectが作成され、マージリクエストが作成されます。

  7. オプション。マージリクエストの変更タブで、生成されたポリシーYAMLを確認します。

  8. 概要タブに移動し、マージを選択します。

  9. 左側のサイドバーで検索または移動先を選択し、go-example-aプロジェクトを検索します。

  10. セキュリティ > ポリシーに移動します。

これで、すべてのマージリクエストのすべてのブランチでシークレット検出スキャンを実行するスキャン実行ポリシーが作成されました。プロジェクトAでマージリクエストを作成して、ポリシーをテストします。

プロジェクトAでスキャン実行ポリシーをテスト

スキャン実行ポリシーをテストするには、次の手順を実行します:

  1. 左側のサイドバーで、検索または移動先を選択して、go-example-aという名前のプロジェクトを見つけます。

  2. コード > リポジトリに移動します。

  3. helloworld.goファイルを選択します。

  4. 編集 > 単一のファイルを編集を選択します。

  5. fmt.Println("hello world")行の直後に次の行を追加します:

    var GitLabFeedToken = "feed_token=eFLISqaBym4EjAefkl58"
  6. Target Branch(ターゲットブランチ)フィールドに、feature-aと入力します。

  7. 変更をコミットするを選択します。

  8. マージリクエストページが開いたら、マージリクエストを作成を選択します。

    スキャン実行ポリシーが機能するかどうかを確認しましょう。シークレット検出がすべてのブランチで、パイプラインが実行されるたびに実行されるように指定したことを覚えておいてください。

  9. 作成したばかりのマージリクエストで、パイプラインタブに移動し、作成したパイプラインを選択します。

    ここでは、シークレット検出ジョブが実行されたことがわかります。テストシークレットが検出されたかどうかを確認しましょう。

  10. シークレット検出ジョブを選択します。

    ジョブのログの下部付近にある次の出力は、シークレットの例が検出されたことを確認します。

    [INFO] [secrets] [2023-09-04T03:46:36Z] ▶ 3:46AM INF 1 commits scanned.
    [INFO] [secrets] [2023-09-04T03:46:36Z] ▶ 3:46AM INF scan completed in 60ms
    [INFO] [secrets] [2023-09-04T03:46:36Z] ▶ 3:46AM WRN leaks found: 1

1つのプロジェクトでのポリシーの動作を確認しました。別のプロジェクトを作成し、同じポリシーを適用します。

プロジェクトBを作成

プロジェクトBを作成するには、次の手順を実行します:

  1. 左側のサイドバーで、検索または移動先を選択して、グループを見つけます。

  2. 新規プロジェクトを選択します。

  3. 空のプロジェクトの作成を選択します。

  4. フィールドに入力します。プロジェクト名に、go-example-bと入力します。

  5. プロジェクトを作成を選択します。

  6. Add (+)(追加) > 新しいファイルを選択します。

  7. ファイル名にhelloworld.goと入力します。

  8. 次のGoのコード例をコピーしてファイルに貼り付けます。

    package main
    import "fmt"
    func main() {
        fmt.Println("Hello world")
    }
  9. 変更をコミットするを選択します。

これで別のプロジェクトができたので、それを同じポリシープロジェクトにリンクします。

プロジェクトBをセキュリティポリシープロジェクトにリンクするには、次の手順に従います:

  1. 左側のサイドバーで、検索または移動先を選択して、go-example-bプロジェクトを見つけます。
  2. セキュリティ > ポリシーに移動します。
  3. ポリシープロジェクトを編集を選択します。
  4. ドロップダウンリストを選択し、このチュートリアルの開始時に作成されたセキュリティポリシープロジェクトを検索します。
  5. 保存を選択します。

プロジェクトBを同じポリシープロジェクトにリンクすると、同じポリシーが適用されます。スキャン実行ポリシーは、すべてのブランチで、すべてのマージリクエストでシークレット検出スキャンを実行します。プロジェクトBでマージリクエストを作成して、ポリシーをテストしましょう。

プロジェクトBでスキャン実行ポリシーをテスト

スキャン実行ポリシーをテストするには、次の手順を実行します:

  1. 左側のサイドバーで、検索または移動先を選択して、go-example-bプロジェクトを見つけます。

  2. コード > リポジトリに移動します。

  3. helloworld.goファイルを選択します。

  4. 編集 > 単一のファイルを編集を選択します。

  5. fmt.Println("hello world")行の直後に次の行を追加します:

    var AdobeClient = "4ab4b080d9ce4072a6be2629c399d653"
  6. Target Branch(ターゲットブランチ)フィールドに、feature-bと入力します。

  7. 変更をコミットするを選択します。

  8. マージリクエストページが開いたら、マージリクエストを作成を選択します。

    スキャン実行ポリシーが機能するかどうかを確認しましょう。シークレット検出がすべてのブランチで、パイプラインが実行されるたびに実行されるように指定したことを覚えておいてください。

  9. 作成したばかりのマージリクエストで、パイプラインタブに移動し、作成したパイプラインを選択します。

  10. 作成したばかりのマージリクエストで、パイプラインのIDを選択します。

    ここでは、シークレット検出ジョブが実行されたことがわかります。テストシークレットが検出されたかどうかを確認しましょう。

  11. シークレット検出ジョブを選択します。

    ジョブのログの下部付近にある次の出力は、シークレットの例が検出されたことを確認します。

    [INFO] [secrets] [2023-09-04T04:22:28Z] ▶ 4:22AM INF 1 commits scanned.
    [INFO] [secrets] [2023-09-04T04:22:28Z] ▶ 4:22AM INF scan completed in 58.2ms
    [INFO] [secrets] [2023-09-04T04:22:28Z] ▶ 4:22AM WRN leaks found: 1

おつかれさまでした。スキャン実行ポリシーを作成し、プロジェクトに適用する方法を学習しました。