公開:2024年2月27日
1分で読めます
ワークフローにカスタムセキュリティスキャナーを追加して、DevSecOpsプラットフォームを拡張する方法を学びましょう(わかりやすいチュートリアルが含まれています)。
最も包括的なDevSecOpsプラットフォームであるGitLabには、アプリケーションにおけるプラン、管理、ビルド、デプロイ、セキュア、ガバナンス、およびモニタリングに必要なすべての機能が備わっています。しかし、サードパーティのツールやカスタムツールを使用してGitLabを拡張したいときもあります。たとえば、別のソリューションからDevSecOpsプラットフォームに移行したり、サードパーティのツールを評価したり、独自の、またはカスタムビルドのソリューションをGitLabにインテグレーションしたりすることが求められる場合があります。
この記事では、次の内容について説明します。
GitLabはさまざまな方法で拡張でき、組織で必要となる拡張機能をサポートします。これらのインテグレーションの一般的な例としては、次のようなものがあります。
利用可能なすべてのインテグレーション機能は、GitLabドキュメントとのインテグレーションで確認できます(注:ドキュメントにはすべてのインテグレーションが記載されているわけではありません)。
サードパーティのセキュリティスキャナーまたはカスタムビルドのセキュリティスキャナーをGitLabにインテグレーションして、マージリクエストウィジェット、パイプラインセキュリティセクション、脆弱性レポート、脆弱性ページ、セキュリティダッシュボード、およびスキャン結果ポリシーを作成できます。各インテグレーションについて確認しましょう。
マージリクエストには、新たに検出された脆弱性の概要を表示するセキュリティウィジェットが含まれています。
脆弱性をクリックすると、次の情報がポップアップ表示されます。
これらの脆弱性は実行可能なため、無視するか、非公開のイシューとして作成できます。
カスタムスキャナーの結果は、セキュリティウィジェットに入力するために使用できます。脆弱性データは、スキャナーが出力するJSONスキーマから入力されます。
すべての有効なセキュリティアナライザーはパイプラインで実行され、結果をアーティファクトとして出力します。これらのアーティファクトは重複排除を含む処理が行われ、結果はパイプラインセキュリティタブに表示されます。ここから、生成されたJSONファイルをダウンロードすることもできます。
カスタムスキャナーの結果は、パイプラインセキュリティタブに入力するために使用できます。列は、スキャナーが出力するJSONスキーマを使用して入力されます。
脆弱性レポートには、デフォルトブランチのスキャンから得られた脆弱性に関する情報が記載されています。これには以下が含まれます。
デフォルトブランチのカスタムスキャナーの結果を使用して、脆弱性レポートを作成できます。
脆弱性レポート内の脆弱性をクリックすると、その脆弱性に関するページに移動します。プロジェクト内の各脆弱性には、次のような詳細情報が記載されている脆弱性ページがあります。
脆弱性ページで提供されるデータを使用して、検出された脆弱性をトリアージしたり、修正をサポートしたりできます。
カスタムスキャナーの結果は、脆弱性ページに入力するために使用できます。脆弱性データは、スキャナーが出力するJSONスキーマから入力されます。
セキュリティダッシュボードは、アプリケーションのセキュリティ対策状況を評価するために使用されます。GitLabは、プロジェクトで実行されているセキュリティスキャナーによって検出された脆弱性に関するメトリクス、評価、チャートを提供します。セキュリティダッシュボードには、次のようなデータが表示されます。
グループレベルのセキュリティダッシュボードからプロジェクトをクリックすると、365日間の状況を表示する特定のセキュリティダッシュボードにアクセスできます。
スキャン結果ポリシーは、1つ以上のセキュリティスキャンジョブによる発見事項に基づいて承認を要求するために使用されます。これにより、脆弱なコードが本番環境にマージされるのを防ぐことができます。スキャン結果ポリシーは、CI(継続的インテグレーション)スキャンジョブが完全に実行された後、完了したパイプラインで公開されるジョブアーティファクトレポートに基づいて評価されます。
たとえば、シークレット検出スキャナーが脆弱性を発見した場合、プロジェクトのメンテナーによる承認を必要とするスキャン結果ポリシーを作成できます。手順は次のとおりです。
スキャン結果ポリシーがマージされると、マージリクエストを作成し、ルールで定義された条件が満たされるたびに、定義されたアクションがトリガーされます。この場合、コードをマージするには、メンテナーからの承認が少なくとも1回必要になります。
カスタムスキャナーの結果は、スキャン結果ポリシーと完全に統合できます。カスタムスキャナーが脆弱性を検出した場合、コードをマージするには承認が必要になります。スキャン結果ポリシーで選択するスキャナーは、適切なJSONスキーマを利用している必要があります。
では、カスタムセキュリティスキャナーのインテグレーションという重要なパートについて見てみましょう。このチュートリアルでは、カスタムセキュリティスキャナーの作成方法と、それをGitLabに統合する方法を学びます。次のプロジェクトを活用します。
アプリケーションの作成方法と使用方法を詳しく説明していますので、次の動画をご覧ください。
次に、GitLabに統合できるカスタムスキャナーを作成しましょう。カスタムスキャナーをGitLabと完全に統合する前に、スキャナーは以下の要件を満たす必要があります。
提供されたテンプレートを使用してFernパターンスキャナーをプロジェクトで実行すると、次の手順を実行します。
JSONレポートがアーティファクトとしてGitLabに読み込まれると、上記で定義されているように、マージリクエストウィジェット、脆弱性レポート、脆弱性ページ、スキャン結果ポリシー、およびセキュリティダッシュボードが作成されます。
インテグレーションのすべてのニーズを満たすカスタムスキャナーを作成したら、それをGitLabで実行できます。
カスタムスキャナーの実行は、テンプレートを追加するのと同じくらい簡単です。シークレットリストプロジェクトの.gitlab-ci.yml
を調べることで、Fernパターンスキャナーテンプレートがどのように読み込まれるかを確認できます。
ファイルがコミットされると、カスタムスキャナーがパイプラインで実行されることがわかります。パイプラインが完了すると、スキャナーは上記のGitLabセキュリティスキャナーのインテグレーションセクションで定義されたすべての領域にデータを入力します。
GitLabの詳細とDevSecOpsプラットフォームを拡張するその他の方法については、次のリソースをご覧ください。