更新日:2025年7月15日
9分で読めます
DevSecOpsプラットフォームを使用して開発速度を保ったまま、コンプライアンスを遵守しましょう。
この記事では、GitLab DevSecOpsプラットフォームを使用して職務分離と
継続的なコンプライアンスを実現するためのさまざまな方法についてご紹介します。まずは、2つの重要な概念について説明しましょう。
コンプライアンスとは、企業や政府機関などが定めたガイドラインや規格に則って
行動することです。コンプライアンスは、
企業倫理や適切なユーザーポリシー、セキュリティ基準などを守り、
消費者の安全を確保する上で役立ちます。
コンプライアンスに違反した場合、裁判費用や罰金が発生する可能性があります。そのため、コンプライアンスを維持することは非常に重要です。DevSecOpsチームはコンプライアンスを遵守しつつ開発速度を維持し、さらにシンプルさや可視性、制御といった要件も満たす必要があります。
職務分離とは、エラーの防止や不正行為の抑止を目的に、業務を複数の担当者で分担することです。職務分離を行うことで、その作業に最適な担当者が作業を実施する体制となります。たとえば以下のように、
それぞれの担当者が特定の目的のもとで業務を受け持ちます。
デベロッパーは新機能の開発を担当
コンプライアンス担当者はパイプラインの作成と使用の実施を担当
アプリケーションセキュリティエンジニアは脆弱性のあるマージリクエストの承認を担当
このように業務が分担されていれば、たとえばデベロッパーが実行中のパイプラインを変更することはできません。
そのような業務を行えるのはコンプライアンス担当者のみであり、承認なしでプッシュできるのはコンプライアンスに準拠しているコードのみであることが保証されます。
脆弱性のあるコードのレビューと承認を担当するアプリケーションセキュリティエンジニアは、適切な方法で脆弱性を軽減し、将来的に問題が発生しないようにします。このシナリオでは、コンプライアンス
とセキュリティの要件が満たされるまでデベロッパーはコードをマージできません。
GitLabのセキュリティポリシーを使用すれば、セキュリティチームは設定に従ってセキュリティスキャンが必ず実行されるように指定できます。これにより、セキュリティチームは、設定済みのスキャンが変更されたり無効化されたりしていないことを把握できます。
セキュリティポリシーは、特定のコンプライアンスフレームワークを満たすようにスコープを設定できます。この場合、プロジェクトには特定のコンプライアンス要件が適用されているため、追加で監視を行う必要があります。このラベルは、トップレベルグループの 「セキュア」>「コンプライアンスセンター」>「フレームワーク」 から作成できます。
注:コンプライアンスラベルは、ラベルを作成したトップレベルグループ内のプロジェクトにのみ割り当てられます。
ポリシーには、スキャン実行ポリシー、マージリクエスト承認ポリシー、パイプライン実行ポリシーの3種類があります。
スキャン実行ポリシー:セキュリティスキャンが、あらかじめ設定したスケジュールに従って実行されるか、プロジェクトのパイプライン内で実行されるようにします。
マージリクエスト承認ポリシー:マージを実行する前にセキュリティチームによる承認を求めるなど、スキャン結果に基づいてアクションを実行します。
パイプライン実行ポリシー:対象のプロジェクトでCI/CDジョブを実施します。
これらのポリシーは、ポリシーエディタ上で簡単な手順で設定できます。
「セキュリティとコンプライアンス」 >「ポリシー」 の順に移動します。
「新しいポリシー」 ボタンをクリックして新規ポリシーを作成します。
「スキャン実行」 を選択します。
ルールを作成します。例として、SASTが設定されていなければパイプラインを実行できないようにするルールを作成します。
name: force_sast
description: 'require sast to run'
enabled: true
rules:
- type: pipeline branches: - main actions:
- scan: sast
すべてのスキャン実行ポリシーの変更は、10分ごとに実行されるバックグラウンドジョブを通じて適用されます。
対象プロジェクトにコミットされたポリシーの変更が反映されるまで、最長で10分かかることがあります。
注:タイマーを設定してSASTを強制的に実行することもできます。詳細はスキャン実行ポリシーの
ドキュメントをご参照ください。
「セキュア」>「ポリシー」 の順に移動します。
「新しいポリシー」 ボタンをクリックして新規ポリシーを作成します。
「マージリクエスト承認ポリシー」 を選択します。
ポリシーのスコープを定義します。
ルールを作成します。
注:ポリシーは設定したルールに従って評価されます。 そのため、ルールが無効であるか評価できない場合は、承認が必要となります。これを防ぐには、デフォルトのフォールバック動作フィールドをopen
に変更します。
マージリクエストを作成してからマージを実行し、ポリシーを送信します。
脆弱性を含むマージリクエストを別途作成します。
脆弱性の追加方法については、GitLab DevSecOpsワークショップの「デベロッパーワークフロー」セクションをご参照ください。
パイプライン実行ポリシーを設定するには、まず実行するCIファイルを含むプロジェクトを作成する必要があります。職務分離を確実にするため、セキュリティチームや管理者だけがアクセスできるように設定してください。例として、適用したいYAMLを含む「コンプライアンスとデプロイ」プロジェクトを作成しました。
「セキュア」>「ポリシー」 の順に移動します。
「新しいポリシー」 ボタンをクリックして新規ポリシーを作成します。
「パイプライン実行ポリシー」 を選択します。
ポリシーのスコープを定義します。
実行するアクションを追加します。
条件を追加します。
マージリクエストを作成してからマージを実行し、ポリシーを送信します。
パイプラインを実行してみてください。パイプラインにポリシー固有のジョブとステージが表示されます。
コンプライアンスを遵守する上でもうひとつ重要なのは、実際にグループやプロジェクト内で起きていることを把握することです。GitLabには、監査に対応するために監査イベントとコンプライアンスレポートが備わっています。
監査イベントを使用すると、GitLabのオーナーと管理者は、特定のアクションを実行したユーザーや、そのアクションが行われた時間といった重要なイベントを追跡できます。
監査イベントはグループやプロジェクトごとにさまざまなイベントを記録するもので、監査イベントのドキュメントで内容を
確認できます。
監査イベントには、**「セキュリティとコンプライアンス」>「監査イベント」**の順に移動してアクセスできます。
以下はその一例です。
ユーザーがプロジェクトに追加され、権限が付与された
プロジェクトに割り当てられたユーザーの権限が変更された
プロジェクトにCI/CD変数が追加または削除された、または保護された状態が変更された
ユーザーがグループに追加され、権限が付与された
グループ名またはパスが変更された
監査イベントは、監査イベントストリーミングを使用してHTTPエンドポイントに送信することもできます。監査イベントストリーミングの
実装方法については、こちらの動画をご覧ください。
**「基準遵守」**では、グループのマージリクエストアクティビティを確認できます。ここでは、グループ内のすべてのプロジェクトの概要が表示されます。
このレポートでは、次の情報を確認できます。
各プロジェクトの最新のマージリクエストの概要
マージリクエストの承認ステータスや承認者
マージリクエストの作成者
各マージリクエストの最新のCI/CDパイプライン結果
基準遵守レポートは、トップレベルグループの 「セキュア」 >「コンプライアンスセンター」にある「基準遵守」 タブから確認できます。
ここまでお読みいただきありがとうございました。GitLabでの職務分離について詳しくは、GitLabによる継続的なソフトウェアコンプライアンスをご参照ください。