正式なドキュメントは英語版であり、この日本語訳はAI支援翻訳により作成された参考用のものです。日本語訳の一部の内容は人間によるレビューがまだ行われていないため、翻訳のタイミングにより英語版との間に差異が生じることがあります。最新かつ正確な情報については、英語版をご参照ください。

セキュリティ設定

  • プラン: 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パイプラインが存在しないか、セキュリティテストツールのアーティファクトがパイプラインの出力に見つかりませんでした。

セキュリティ設定ページを表示

プロジェクトのセキュリティ設定を表示するには:

  1. 左側のサイドバーで、検索または移動先を選択して、プロジェクトを見つけます。
  2. セキュリティ > セキュリティ設定を選択します。

CI/CD設定ファイルへの変更の履歴を表示するには、設定履歴を選択します。

プロジェクトのセキュリティ設定を編集

プロジェクトのセキュリティ設定を編集するには:

  1. 左側のサイドバーで、検索または移動先を選択して、プロジェクトを見つけます。
  2. セキュリティ > セキュリティ設定を選択します。
  3. 有効または設定するセキュリティスキャナーを選択し、指示に従います。

個々のセキュリティスキャナーを有効にして設定する方法の詳細については、ドキュメントを参照してください。

共有設定を作成する

  • プラン: 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イメージをオーバーライドするには、オフライン環境でのコンテナスキャンの実行の手順を参照してください。

マージリクエストパイプラインでセキュリティスキャンツールを使用するを参照してください。

デフォルトでは、アプリケーションセキュリティジョブは、ブランチパイプラインでのみ実行するように設定されています。それらをマージリクエストパイプラインで使用するには、次のいずれかを行います:

たとえば、マージリクエストパイプラインを有効にして、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セクションに追加します。

セキュリティジョブのオーバーライドの詳細については、以下を参照してください:

トラブルシューティング

セキュリティスキャンを設定する際に、次の問題が発生する可能性があります。

エラー: chosen stage test does not exist

パイプラインの実行中に、chosen stage test does not existというエラーが発生する場合があります。

この問題は、セキュリティスキャンジョブで使用されるステージが.gitlab-ci.ymlファイルで宣言されていない場合に発生します。

このエラーを解決するには:

  • .gitlab-ci.ymltestステージを追加します:

    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"