アプリケーションセキュリティの問題を解決する
- プラン: Ultimate
- 提供形態: GitLab.com、GitLab Self-Managed、GitLab Dedicated
アプリケーションセキュリティ機能を使用する際に、以下の問題が発生する可能性があります。
ログレベル
GitLabアナライザーによって出力されるログの冗長性は、SECURE_LOG_LEVEL環境変数によって決定されます。このログ生成レベル以上のメッセージが出力されます。
ログレベルは、重大度が最も高いものから順に、、、、、です:
fatalerrorwarninfo(デフォルト)debug
デバッグレベルのログを生成する
デバッグログは重大なセキュリティリスクになる可能性があります。出力には、環境変数の内容や、ジョブで利用できるその他のシークレットが含まれる場合があります。この出力はGitLabサーバーにアップロードされ、ジョブログに表示されます。
デバッグレベルのログを有効にするには、.gitlab-ci.ymlファイルに以下を追加します:
variables:
SECURE_LOG_LEVEL: "debug"これは、すべてのGitLabアナライザーに対して、すべてのメッセージを出力するように指示します。詳細については、ログレベルを参照してください。
終了コード1で失敗するSecureジョブ
Secureジョブが失敗している理由が不明な場合は、以下を行います:
- デバッグレベルのログを有効にします。
- ジョブを実行します。
- ジョブの出力を調べます。
debugログレベルを削除して、デフォルトのinfo値に戻します。
非推奨のセキュリティレポート
マージリクエストに対して生成されたセキュリティレポートが非推奨になると、マージリクエストにセキュリティウィジェットに警告メッセージが表示され、適切なアクションを実行するように求められます。
これは、次の2つのシナリオで発生する可能性があります:
ソースブランチがターゲットブランチより遅れています
セキュリティレポートは、ターゲットブランチとソースブランチの間の最新の共通祖先コミットが、ターゲットブランチの最新のコミットではない場合に古くなることがあります。
この問題を修正するには、リベースまたはマージして、ターゲットブランチからの変更を取り込みます。
ターゲットブランチのセキュリティレポートが古くなっています
これは、失敗したジョブや新しい勧告など、さまざまな理由で発生する可能性があります。マージリクエストにセキュリティレポートが古くなっていると表示された場合は、ターゲットブランチで新しいパイプラインを実行する必要があります。new pipeline(新しいパイプライン)を選択して、新しいパイプラインを実行します。
警告メッセージ… report.json: no matching filesが表示される
デバッグログは重大なセキュリティリスクになる可能性があります。出力には、環境変数の内容や、ジョブで利用できるその他のシークレットが含まれる場合があります。この出力はGitLabサーバーにアップロードされ、ジョブログに表示されます。
このメッセージの後にエラーNo files to uploadが続くことが多く、JSONレポートが生成されなかった理由を示す他のエラーまたは警告が前に付いています。このようなメッセージがないか、ジョブログ全体を確認してください。これらのメッセージが見つからない場合は、カスタムCI/CD変数としてSECURE_LOG_LEVEL: "debug"を設定した後、失敗したジョブを再試行してください。これにより、さらに調査するための追加情報が得られます。
エラーメッセージの取得sast job: config key may not be used with 'rules': only/except
組み込み .gitlab-ci.ymlテンプレート(SAST.gitlab-ci.ymlなど)を使用すると、GitLab CI/CD設定によっては、次のエラーが発生する可能性があります:
Unable to create pipeline
jobs:sast config key may not be used with `rules`: only/exceptこのエラーは、組み込みジョブのrules設定が、オーバーライドされた場合に表示されます。非推奨のonlyまたはexcept構文。この問題を修正するには、次のいずれかを実行する必要があります:
詳細については、SASTジョブのオーバーライドを参照してください。
only/except構文からrulesへの移行
ジョブの実行を制御するためにテンプレートをオーバーライドする場合、onlyまたはexceptの以前のインスタンスは互換性がなくなり、rules構文に移行する必要があります。
オーバーライドがmainでのみジョブを実行するように制限することを目的としている場合、以前の構文は次のようになります:
include:
- template: Jobs/SAST.gitlab-ci.yml
# Ensure that the scanning is only executed on main or merge requests
spotbugs-sast:
only:
refs:
- main
- merge_requests以前の設定を新しいrules構文に移行するには、オーバーライドを次のように記述します:
include:
- template: Jobs/SAST.gitlab-ci.yml
# Ensure that the scanning is only executed on main or merge requests
spotbugs-sast:
rules:
- if: $CI_COMMIT_BRANCH == "main"
- if: $CI_MERGE_REQUEST_IDオーバーライドがタグ付けではなく、ブランチでのみジョブを実行するように制限することを目的としている場合、次のようになります:
include:
- template: Jobs/SAST.gitlab-ci.yml
# Ensure that the scanning is not executed on tags
spotbugs-sast:
except:
- tags新しいrules構文に移行するには、オーバーライドを次のように書き換えます:
include:
- template: Jobs/SAST.gitlab-ci.yml
# Ensure that the scanning is not executed on tags
spotbugs-sast:
rules:
- if: $CI_COMMIT_TAG == null詳細については、rulesを参照してください。
非推奨バージョンのテンプレートをピン留めします
最新のサポートを確保するには、rulesに移行します。
CI/CD設定をすぐに更新できない場合は、以前のテンプレートバージョンにピン留めするいくつかの回避策があります。次に例を示します:
include:
remote: 'https://gitlab.com/gitlab-org/gitlab/-/raw/12-10-stable-ee/lib/gitlab/ci/templates/Security/SAST.gitlab-ci.yml'さらに、バージョニングされたレガシーテンプレートを含む専用のプロジェクトを提供しています。これは、オフラインセットアップ、またはAutoデブオプスを使用したい人が使用できます。
手順は、レガシーテンプレートプロジェクトで入手できます。
脆弱性が見つかりましたが、ジョブは成功します。パイプラインの失敗を代わりにどのように発生させることができますか?
このような状況では、ジョブが成功することがデフォルトの動作です。ジョブのステータスは、アナライザー自体の成功または失敗を示します。アナライザーの結果は、ジョブログ 、マージリクエストウィジェット 、またはセキュリティダッシュボードに表示されます。
エラー: ジョブis used for configuration only, and its script should not be executed
Security/Dependency-Scanning.gitlab-ci.ymlおよびSecurity/SAST.gitlab-ci.ymlテンプレートに対するGitLab 13.4で行われた変更は、sastまたはdependency_scanningジョブをrules属性を設定して有効にすると、エラー(job) is used for configuration only, and its script should not be executedで失敗することを意味します。
sastまたはdependency_scanningスタンザは、すべてのSASTまたは依存関係スキャンに変更を加えるために使用できます。たとえば、variablesまたはstageの変更などですが、共有rulesを定義するために使用することはできません。
拡張性を向上させるために、イシューが公開されています。優先順位付けを支援するためにイシューに同意することができ、コントリビュートを歓迎します。
空の脆弱性レポート、依存関係リストページ
パイプラインにallow_failure: falseオプションを持つジョブの手順があり、このジョブが完了していない場合、GitLabはリストされたページにセキュリティレポートからのデータを入力された状態にすることができません。この場合、脆弱性レポートと依存関係リストページは空です。これらのセキュリティページは、パイプラインの手動ステップからジョブを実行することで、入力された状態にすることができます。
このシナリオを処理するために、イシューが公開されています。優先順位付けを支援するためにイシューに同意することができ、コントリビュートを歓迎します。