セキュリティ設定
- プラン: Free、Premium、Ultimate
- 提供形態: GitLab.com、GitLab Self-Managed、GitLab Dedicated
プロジェクトごとにセキュリティスキャナーを設定したり、複数のプロジェクトで共有されるスキャナー設定を作成したりできます。各プロジェクトを手動で設定すると、最大限の柔軟性が得られますが、スケールすると維持が困難になります。複数のプロジェクトまたはグループの場合、共有スキャナー設定により、必要に応じてカスタマイズを可能にしながら、より簡単な管理が実現します。
たとえば、同じセキュリティスキャン設定が手動で適用された10個のプロジェクトがある場合、1つの変更を10回行う必要があります。代わりに共有CI/CD設定を作成すると、1回の変更のみで済みます。
個々のプロジェクトを設定する
個々のプロジェクトでセキュリティスキャンを設定するには、次のいずれかの方法を使用します:
- CI/CD設定ファイルを編集します。
- UIでCI/CD設定を編集します。
CI/CDファイルを使用する
個々のプロジェクトのセキュリティスキャンを手動で有効にするには、次のいずれかの方法を使用します:
- 個々のセキュリティスキャナーを有効にします。
- Auto DevOpsを使用して、すべてのセキュリティスキャナーを有効にします。
AutoDevOpsは、ほとんどのセキュリティスキャナーを有効にするための、最も手間のかからないパスを提供します。ただし、カスタマイズオプションは、個々のセキュリティスキャナーを有効にする場合と比較して制限されています。
個々のセキュリティスキャナーを有効にする
設定をカスタマイズするオプションを使用して個々のセキュリティスキャンツールを有効にするには、.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回定義し、複数のプロジェクトおよびグループに適用できます。これらの方法には、各プロジェクトを個別に設定するよりも、いくつかの利点があります:
- 設定の変更は、各プロジェクトの代わりに1回だけ行う必要があります。
- 設定の変更を行う権限は制限されており、職務分離が提供されます。
セキュリティスキャンをカスタマイズ
要件と環境に合わせてセキュリティスキャンをカスタマイズできます。個々のセキュリティスキャナーをカスタマイズする方法の詳細については、ドキュメントを参照してください。
ベストプラクティス
セキュリティスキャン設定をカスタマイズする場合:
- デフォルトブランチへの変更をマージする前に、マージリクエストを使用して、セキュリティスキャンツールのすべてのカスタマイズをテストします。そうしないと、誤検出が多数発生するなど、予期しない結果が生じる可能性があります。
- スキャンツールのCI/CDテンプレートを含めます。テンプレートのコンテンツをコピーしないでください。
- 必要に応じて、テンプレートの値をオーバーライドするだけです。他のすべての値はテンプレートから継承されます。
- 本番環境ワークフローには、各テンプレートの安定したバージョンを使用します。安定バージョンは変更頻度が低く、破壊的な変更はGitLabのメジャーバージョン間でのみ行われます。最新バージョンには最新の変更が含まれていますが、GitLabのマイナーバージョン間で大きな変更がある場合があります。
テンプレートエディション
GitLabアプリケーションセキュリティツールには、最大2つのテンプレートエディションがあります:
- 安定版: 安定版テンプレートはデフォルトです。信頼性が高く一貫したアプリケーションセキュリティエクスペリエンスを提供します。CI/CDパイプラインで安定性と予測可能な動作を必要とするほとんどのユーザーおよびプロジェクトでは、安定版テンプレートを使用する必要があります。
- Latest(最新): このテンプレートは、最先端の機能にアクセスしてテストしたい方を対象としています。テンプレート名に
latestという単語で識別されます。安定版とは見なされておらず、次のメジャーリリースで計画されている破壊的な変更が含まれている可能性があります。このテンプレートを使用すると、新しい機能と更新が安定版リリースの一部になる前に試すことができます。
同じプロジェクトでセキュリティテンプレートを混在させないでください。異なるセキュリティテンプレートエディションを混在させると、マージリクエストとブランチパイプラインの両方が実行される可能性があります。
デフォルトレジストリベースアドレスをオーバーライドする
デフォルトでは、GitLabセキュリティスキャナーは、Dockerイメージのベースアドレスとしてregistry.gitlab.com/security-productsを使用します。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ステージを使用します。代わりに別のステージで実行するには、カスタムステージの名前をstages:ファイルの.gitlab-ci.ymlセクションに追加します。
セキュリティジョブのオーバーライドの詳細については、以下を参照してください:
- SASTジョブをオーバーライドする。
- Dependency Scanningジョブをオーバーライドする。
- コンテナスキャンのジョブをオーバーライドする。
- シークレット検出のジョブをオーバーライドする。
- DASTジョブをオーバーライドする。
トラブルシューティング
セキュリティスキャンを設定する際に、次の問題が発生する可能性があります。
エラー: 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"