最も包括的なDevSecOpsプラットフォームであるGitLabには、アプリケーションにおけるプラン、管理、ビルド、デプロイ、セキュア、ガバナンス、およびモニタリングに必要なすべての機能が備わっています。しかし、サードパーティのツールやカスタムツールを使用してGitLabを拡張したいときもあります。たとえば、別のソリューションからDevSecOpsプラットフォームに移行したり、サードパーティのツールを評価したり、独自の、またはカスタムビルドのソリューションをGitLabにインテグレーションしたりすることが求められる場合があります。
この記事では、次の内容について説明します。
- GitLab DevSecOpsプラットフォームの拡張性
- GitLabセキュリティスキャナーのインテグレーション
- マージリクエストのセキュリティウィジェット
- パイプラインセキュリティセクション
- 脆弱性レポート
- 脆弱性ページ
- セキュリティダッシュボード
- スキャン結果ポリシーのインテグレーション
- チュートリアル:カスタムセキュリティスキャナーのインテグレーション
- カスタムセキュリティスキャナーの作成
- カスタムセキュリティスキャナーとGitLabのインテグレーション
GitLab DevSecOpsプラットフォームの拡張性
GitLabはさまざまな方法で拡張でき、組織で必要となる拡張機能をサポートします。これらのインテグレーションの一般的な例としては、次のようなものがあります。
- JenkinsやSlackなどの外部アプリケーションのインテグレーション
- BugzillaやJiraなどの外部イシュートラッキングのインテグレーション
- LDAPやSAMLなどの外部認証プロバイダーのインテグレーション
- FortifyやCheckmarxなどの外部セキュリティスキャナーのインテグレーション
- AWSやGCPのアクセスキーなどの流出したシークレットに対応する機能
利用可能なすべてのインテグレーション機能は、GitLabドキュメントとのインテグレーションで確認できます(注:ドキュメントにはすべてのインテグレーションが記載されているわけではありません)。
GitLabセキュリティスキャナーのインテグレーション
サードパーティのセキュリティスキャナーまたはカスタムビルドのセキュリティスキャナーをGitLabにインテグレーションして、マージリクエストウィジェット、パイプラインセキュリティセクション、脆弱性レポート、脆弱性ページ、セキュリティダッシュボード、およびスキャン結果ポリシーを作成できます。各インテグレーションについて確認しましょう。
マージリクエストのセキュリティウィジェット
マージリクエストには、新たに検出された脆弱性の概要を表示するセキュリティウィジェットが含まれています。

脆弱性をクリックすると、次の情報がポップアップ表示されます。
- 状態
- 説明
- プロジェクト
- ファイル
- 識別子
- 重大度
- ツール
- スキャナープロバイダー

これらの脆弱性は実行可能なため、無視するか、非公開のイシューとして作成できます。
カスタムスキャナーの結果は、セキュリティウィジェットに入力するために使用できます。脆弱性データは、スキャナーが出力するJSONスキーマから入力されます。
パイプラインセキュリティセクション
すべての有効なセキュリティアナライザーはパイプラインで実行され、結果をアーティファクトとして出力します。これらのアーティファクトは重複排除を含む処理が行われ、結果はパイプラインセキュリティタブに表示されます。ここから、生成されたJSONファイルをダウンロードすることもできます。

カスタムスキャナーの結果は、パイプラインセキュリティタブに入力するために使用できます。列は、スキャナーが出力するJSONスキーマを使用して入力されます。
脆弱性レポート
脆弱性レポートには、デフォルトブランチのスキャンから得られた脆弱性に関する情報が記載されています。これには以下が含まれます。
- 重大度レベルごとの脆弱性の総数
- 一般的な脆弱性属性のフィルター
- 表形式のレイアウトで表示される各脆弱性の詳細

デフォルトブランチのカスタムスキャナーの結果を使用して、脆弱性レポートを作成できます。
脆弱性ページ
脆弱性レポート内の脆弱性をクリックすると、その脆弱性に関するページに移動します。プロジェクト内の各脆弱性には、次のような詳細情報が記載されている脆弱性ページがあります。
- 説明
- 検出時期
- 現在の状態
- 検出場所
- 実行可能なアクション
- 紐つけられたイシュー
- アクションログ
- ソリューション
- 識別子
- トレーニング
脆弱性ページで提供されるデータを使用して、検出された脆弱性をトリアージしたり、修正をサポートしたりできます。

カスタムスキャナーの結果は、脆弱性ページに入力するために使用できます。脆弱性データは、スキャナーが出力するJSONスキーマから入力されます。
セキュリティダッシュボード
セキュリティダッシュボードは、アプリケーションのセキュリティ対策状況を評価するために使用されます。GitLabは、プロジェクトで実行されているセキュリティスキャナーによって検出された脆弱性に関するメトリクス、評価、チャートを提供します。セキュリティダッシュボードには、次のようなデータが表示されます。
- グループ内のすべてのプロジェクトにおける、30日間、60日間、または90日間の脆弱性トレンド
- 脆弱性の重大度に基づく各プロジェクトのレターグレードの評価
- 過去365日以内に検出された脆弱性の総数とその重大度レベル

グループレベルのセキュリティダッシュボードからプロジェクトをクリックすると、365日間の状況を表示する特定のセキュリティダッシュボードにアクセスできます。

スキャン結果ポリシーのインテグレーション
スキャン結果ポリシーは、1つ以上のセキュリティスキャンジョブによる発見事項に基づいて承認を要求するために使用されます。これにより、脆弱なコードが本番環境にマージされるのを防ぐことができます。スキャン結果ポリシーは、CI(継続的インテグレーション)スキャンジョブが完全に実行された後、完了したパイプラインで公開されるジョブアーティファクトレポートに基づいて評価されます。
たとえば、シークレット検出スキャナーが脆弱性を発見した場合、プロジェクトのメンテナーによる承認を必要とするスキャン結果ポリシーを作成できます。手順は次のとおりです。
- 左側のサイドバーで、検索または移動先を選択し、ポリシーを追加するプロジェクトを検索します。
- プロジェクトの左側のサイドバーで、セキュア > ポリシーに移動します。
- 新しいポリシーを選択します。
- スキャン結果ポリシーセクションで、ポリシーを選択を選択します。
- 次のフィールドに入力します。
- 名前:ポリシーの名前
- 説明:ポリシーの説明
- ポリシーの状態:有効かどうか
- ルール:アクションを実行する(承認が必要)ために満たす必要がある条件

- アクション:ルールの条件(定義された脆弱性/ライセンスの検出)が満たされた場合に実行されるアクションです

- プロジェクトの承認設定を上書き:選択した場合、次のオプションによりプロジェクト設定が上書きされますが、ポリシーで選択されたブランチにのみ影響します

- マージリクエスト経由で設定ボタンを押します。
スキャン結果ポリシーがマージされると、マージリクエストを作成し、ルールで定義された条件が満たされるたびに、定義されたアクションがトリガーされます。この場合、コードをマージするには、メンテナーからの承認が少なくとも1回必要になります。

カスタムスキャナーの結果は、スキャン結果ポリシーと完全に統合できます。カスタムスキャナーが脆弱性を検出した場合、コードをマージするには承認が必要になります。スキャン結果ポリシーで選択するスキャナーは、適切なJSONスキーマを利用している必要があります。
チュートリアル:カスタムセキュリティスキャナーのインテグレーション
では、カスタムセキュリティスキャナーのインテグレーションという重要なパートについて見てみましょう。このチュートリアルでは、カスタムセキュリティスキャナーの作成方法と、それをGitLabに統合する方法を学びます。次のプロジェクトを活用します。
- Fernパターンスキャナー:パスワード、秘密キー、社会保障番号などの特定のパターンを探してファイルをスキャンします。
- シークレットリスト:ユーザーのパスワード、クライアント、およびキーのリストが含まれています。このプロジェクトは、カスタムセキュリティスキャナーをGitLabに統合する方法を示すために使用されています。
アプリケーションの作成方法と使用方法を詳しく説明していますので、次の動画をご覧ください。
カスタムセキュリティスキャナーの作成
次に、GitLabに統合できるカスタムスキャナーを作成しましょう。カスタムスキャナーをGitLabと完全に統合する前に、スキャナーは以下の要件を満たす必要があります。
- ディレクトリをスキャンして定義されたパターンを探す
- 適切なスキーマに従っったJSONを出力する
- コンテナ化され、アクセス可能である
- 別のプロジェクトで実行できるテンプレートを作成する
提供されたテンプレートを使用してFernパターンスキャナーをプロジェクトで実行すると、次の手順を実行します。
- 検出するパターン(正規表現)を定義する一連のルールを読み込みます。
- 組織のニーズの変化に合わせてルールを構成できるようにします。
- ファイルをスキャンして定義されたパターンを探します。
- シークレット検出スキーマに従ってJSONレポートを出力します。
- このプロジェクトでは、Goテンプレートを使用してJSONを作成します。
- スキャナーの検出対象に応じて、適切なスキーマを使用するようにしてください。
JSONレポートがアーティファクトとしてGitLabに読み込まれると、上記で定義されているように、マージリクエストウィジェット、脆弱性レポート、脆弱性ページ、スキャン結果ポリシー、およびセキュリティダッシュボードが作成されます。
カスタムセキュリティスキャナーとGitLabのインテグレーション
インテグレーションのすべてのニーズを満たすカスタムスキャナーを作成したら、それをGitLabで実行できます。
カスタムスキャナーの実行は、テンプレートを追加するのと同じくらい簡単です。シークレットリストプロジェクトの.gitlab-ci.ymlを調べることで、Fernパターンスキャナーテンプレートがどのように読み込まれるかを確認できます。
- スキャナーを実行するプロジェクトに.gitlab-ci.ymlファイルを作成します。
- カスタムスキャナーテンプレートを含めます。
- 環境変数を使用してテンプレートを設定することもできます。
- ファイルをmainブランチにコミットします。
ファイルがコミットされると、カスタムスキャナーがパイプラインで実行されることがわかります。パイプラインが完了すると、スキャナーは上記のGitLabセキュリティスキャナーのインテグレーションセクションで定義されたすべての領域にデータを入力します。
詳細を読む
GitLabの詳細とDevSecOpsプラットフォームを拡張するその他の方法については、次のリソースをご覧ください。





