セキュリティ設定
- プラン: Free、Premium、Ultimate
- 提供形態: GitLab.com、GitLab Self-Managed、GitLab Dedicated
個々のプロジェクトに対してセキュリティスキャナーを設定することも、複数のプロジェクトで共有するスキャナー設定を作成することもできます。各プロジェクトを手動で設定すると最大の柔軟性が得られますが、規模が拡大すると維持が困難になります。複数のプロジェクトやグループの場合、共有スキャナー設定により管理が容易になり、必要な場合はカスタマイズも可能です。
たとえば、同じセキュリティスキャン設定が手動で適用されたプロジェクトが10個ある場合、1つの変更を10回行う必要があります。代わりに共有CI/CD設定を作成した場合、1つの変更は1回行うだけで済みます。
個々のプロジェクトを設定する
個々のプロジェクトでセキュリティスキャンを設定するには、次のいずれかの方法を使用します:
- CI/CD設定ファイルを編集します。
- UIでCI/CD設定を編集します。
CI/CDファイルを使用する
個々のプロジェクトのセキュリティスキャンを手動で有効にするには、次のいずれかの方法を使用します:
- 個々のセキュリティスキャナーを有効にします。
- Auto DevOpsを使用してすべてのセキュリティスキャナーを有効にします。
Auto DevOpsは、ほとんどのセキュリティスキャナーを有効にするための最小限の労力で済むパスを提供します。ただし、個々のセキュリティスキャナーを有効にする場合と比較して、カスタマイズオプションは制限されています。
個々のセキュリティスキャナーを有効にする
個々のセキュリティスキャンツールを設定のカスタマイズオプション付きで有効にするには、セキュリティスキャナーのテンプレートを.gitlab-ci.ymlファイルに含めます。
個々のセキュリティスキャナーを有効にする方法については、それらのドキュメントを参照してください。
Auto DevOpsを使用してセキュリティスキャンを有効にする
次のセキュリティスキャンツールをデフォルト設定で有効にするには、Auto DevOpsを有効にしてください:
Auto DevOpsを直接カスタマイズすることはできませんが、プロジェクトの.gitlab-ci.ymlファイルにAuto DevOpsテンプレートを含めることで、必要に応じて設定をオーバーライドできます。
UIを使用する場合
「セキュリティ設定」ページを使用して、プロジェクトのセキュリティテストと脆弱性管理設定を表示および設定できます。
「セキュリティテスト」タブには、デフォルトブランチの最新のコミットにおけるCI/CDパイプラインをチェックすることにより、各セキュリティツールのステータスが反映されます。
有効: セキュリティテストツールのアーティファクトがパイプラインの出力で検出されました。
無効: CI/CDパイプラインが存在しないか、セキュリティテストツールのアーティファクトがパイプラインの出力で見つかりませんでした。
「セキュリティ設定」ページを表示する
プロジェクトの「セキュリティ設定」を表示するには:
- 上部のバーで、検索または移動先を選択して、プロジェクトを見つけます。
- セキュリティ > セキュリティ設定を選択します。
CI/CD設定ファイルへの変更の履歴を表示するには、「設定履歴」を選択します。
プロジェクトの「セキュリティ設定」を編集する
プロジェクトの「セキュリティ設定」を編集するには:
- 上部のバーで、検索または移動先を選択して、プロジェクトを見つけます。
- セキュリティ > セキュリティ設定を選択します。
- 有効にする、または設定するセキュリティスキャナーを選択し、指示に従ってください。
個々のセキュリティスキャナーを有効にして設定する方法の詳細については、それらのドキュメントを参照してください。
共有設定を作成する
- プラン: Ultimate
- 提供形態: GitLab.com、GitLab Self-Managed、GitLab Dedicated
同じセキュリティスキャン設定を複数のプロジェクトに適用するには、次のいずれかの方法を使用します:
これらの各方法により、セキュリティスキャンを含むCI/CD設定を一度定義し、複数のプロジェクトやグループに適用することができます。これらの方法は、各プロジェクトを個別に設定する場合に比べて、いくつかの利点があります:
- 設定の変更は、各プロジェクトに対してではなく、1回行うだけで済みます。
- 設定変更を行う権限が制限され、職務分離が提供されます。
セキュリティスキャンをカスタマイズする
要件と環境に合わせてセキュリティスキャンをカスタマイズできます。個々のセキュリティスキャナーをカスタマイズする方法の詳細については、それらのドキュメントを参照してください。
ベストプラクティス
セキュリティスキャン設定をカスタマイズする際には、次の点に注意してください:
- デフォルトブランチへの変更をマージする前に、マージリクエストを使用してセキュリティスキャンツールのすべてのカスタマイズをテストしてください。そうしないと、誤検出が多数発生するなど、予期しない結果が生じる可能性があります。
- スキャンツールのCI/CDテンプレートを含めます。テンプレートの内容をコピーしないでください。
- 必要な場合にのみテンプレートの値をオーバーライドしてください。他のすべての値はテンプレートから継承されます。
- 本番環境ワークフローには、各テンプレートの安定版エディションを使用してください。安定版エディションの変更頻度は少なく、破壊的な変更はGitLabのメジャーバージョン間でのみ行われます。最新バージョンには最も新しい変更が含まれていますが、マイナーなGitLabバージョン間で大きな変更がある場合があります。
テンプレートエディション
GitLabアプリケーションセキュリティツールには、最大2つのテンプレートエディションがあります:
- 安定版: 安定版テンプレートはデフォルトです。これは信頼性が高く一貫したアプリケーションセキュリティエクスペリエンスを提供します。CI/CDパイプラインで安定性と予測可能な動作を必要とするほとんどのユーザーおよびプロジェクトでは、安定版テンプレートを使用する必要があります。
- Latest: 最新テンプレートは、最先端の機能にアクセスしてテストしたい方向けです。テンプレート名にある単語
latestで識別されます。安定版とは見なされておらず、次のメジャーリリースで計画されている破壊的な変更が含まれている可能性があります。このテンプレートを使用すると、安定版リリースの一部となる前に、新機能やアップデートを試すことができます。
同じプロジェクト内でセキュリティテンプレートを混在させないでください。異なるセキュリティテンプレートエディションを混在させると、マージリクエストパイプラインとブランチパイプラインの両方が実行される可能性があります。
デフォルトレジストリベースアドレスをオーバーライドする
デフォルトでは、GitLabセキュリティスキャナーはregistry.gitlab.com/security-productsをDockerイメージのベースアドレスとして使用します。ほとんどのスキャナーでこれをオーバーライドするには、CI/CD変数SECURE_ANALYZERS_PREFIXを別の場所に設定します。これはすべてのスキャナーに一度に影響します。
コンテナスキャンアナライザーは例外であり、SECURE_ANALYZERS_PREFIXという変数は使用しません。そのDockerイメージをオーバーライドするには、オフライン環境でコンテナスキャンを実行するの手順を参照してください。
マージリクエストパイプラインでセキュリティスキャンツールを使用する
デフォルトでは、アプリケーションセキュリティジョブはブランチパイプラインに対してのみ実行されるように設定されています。マージリクエストパイプラインで使用するには、次のいずれかの方法を使用します:
- CI/CD変数
AST_ENABLE_MR_PIPELINESを"true"に設定します(18.0で導入)(推奨) - マージリクエストパイプラインをデフォルトで有効にする
latestエディションテンプレートを使用します。
たとえば、SASTと依存関係スキャンの両方をマージリクエストパイプラインで有効にして実行するには、次の設定を使用します:
include:
- template: Jobs/Dependency-Scanning.v2.gitlab-ci.yml
- template: Jobs/SAST.gitlab-ci.yml
variables:
AST_ENABLE_MR_PIPELINES: "true"カスタムスキャンパイプラインステージを使用する
セキュリティスキャナーテンプレートは、デフォルトで事前定義されたtestパイプラインステージを使用します。代わりに別のステージで実行させるには、カスタムステージの名前を.gitlab-ci.ymlファイルのstages:セクションに追加します。
セキュリティジョブをオーバーライドする方法の詳細については、以下を参照してください:
トラブルシューティング
セキュリティスキャンを設定する際に、以下の問題が発生する可能性があります。
エラー: chosen stage test does not exist
パイプラインの実行中に、chosen stage test does not existというエラーが表示されることがあります。
この問題は、セキュリティスキャンジョブで使用されるパイプラインステージが.gitlab-ci.ymlファイルで宣言されていない場合に発生します。
これを解決するには、次のいずれかの方法を使用します:
.gitlab-ci.ymlにtestパイプラインステージを追加します:stages: - test - unit-tests include: - template: Jobs/Dependency-Scanning.v2.gitlab-ci.yml - template: Jobs/SAST.gitlab-ci.yml - template: Jobs/Secret-Detection.gitlab-ci.yml custom job: stage: unit-tests script: - echo "custom job"各セキュリティジョブのデフォルトパイプラインステージをオーバーライドします。たとえば、
unit-testsという名前の事前定義されたパイプラインステージを使用するには:stages: - unit-tests include: - template: Jobs/Dependency-Scanning.v2.gitlab-ci.yml inputs: stage: unit-tests - template: Jobs/SAST.gitlab-ci.yml - template: Jobs/Secret-Detection.gitlab-ci.yml sast: stage: unit-tests .secret-analyzer: stage: unit-tests custom job: stage: unit-tests script: - echo "custom job"