Content last updated 2026-10-22

GitLab プロジェクトのベースライン要件

このハンドブックページでは、GitLab のコードベースに影響を与える GitLab プロジェクトに対して設定しなければならないベースライン構成について概説します。

目的

このページの目的は、スコープで定義するプロジェクトが満たさなければならない最小限の要件を概説することです。最終的な目標は、GitLab のコードベースに最終的に影響を与える変更が独立したレビューなしで行われないようにし、脆弱性やサプライチェーン攻撃が本番環境に到達するリスクを減らすことです。このページはまた、GitLab ユーザーが重要と考えるプロジェクトを保護するための構成例を示すことで、ユーザーを支援できます。

GitLab のドッグフーディングへのコミットメントと効率のバリューを踏まえると、これらのベースラインプロジェクト構成はすべてのプロジェクトに必要なわけではなく、スコープで定義するプロジェクト、または別途伝えられた理由で重要と判断されるプロジェクトにのみ必要であることを理解することが重要です(こうした場合には、これらのベースライン構成が「なぜ」必要なのかを明確に説明できる必要があります)。

ただし、チームメンバーがプロジェクトを作成または作業する際に、これらのベースライン構成を念頭に置くことが推奨されます。これらは、GitLab プロジェクトでなされる貢献のセキュリティと品質を向上させるように設計されているためです。

スコープ

これらのベースライン構成は、GitLab のコードベースに直接的または間接的に影響を与えるプロジェクト、および/または GitLab のビルド、リリース、デプロイに影響を与えるプロジェクトに適用しなければなりません。これには、本番コード、インフラストラクチャ、コンテナのビルド、または GitLab 製品を構成するソフトウェアをデプロイする CI/CD パイプラインを含むプロジェクトが該当します。

この基準に当てはまるプロジェクトの例:

  • GitLab のコンポーネントをビルドするプロジェクト
  • GitLab のコンポーネントのコードベースを管理するのに役立つボットをビルドするプロジェクト
  • 重要な非 GitLab システム(例:Salesforce)のコードベースを更新するために使用されるプロジェクト

この基準に当てはまらないプロジェクトの例:

  • コードを持たないプロジェクト
  • GitLab のコードベースに影響を与えないボットをビルドするプロジェクト(例:YAML ファイルを CSV に変換するスクリプト)

プロジェクトの使用法は時間の経過とともに自然にシフトする可能性があり、継続的にプロジェクトの使用法を再評価することが重要です。プロジェクトはどちらのカテゴリーにも入ったり出たりする可能性があるため、毎日プロジェクトで作業する際にそれを念頭に置いてください。期待されるのは、プロジェクトにこれらのベースライン構成が設定されている場合でも、チームメンバーが作業で協力し合い、個人が単一障害点になるリスクを高める知識のサイロでの作業を避けることで、効率が低下しないことです。これらの価値観はまた、変更に複数のチームメンバーを関与させることで、私たちの透明性の価値を促進します。

自分のプロジェクトがどこに当てはまるかわかりません

問題ありません!決して珍しいことではありません。質問がある場合は、私たちが対処し、適切なカテゴリーに当てはめられるよう、提起してください。プロジェクトの分類方法をここでイテレーションを行い、セキュリティと品質、そして効率へのコミットメントを確保できます。

自分のプロジェクトは基準に当てはまらないようですが、それでもこれらの構成が必要ですか?

プロジェクトがベースライン構成を要求するための一般的な基準を厳密に満たさないが、何らかの理由でプロジェクトをベースライン構成を使用して構成すべきと判断される場合もあります。こうした場合には、これらのベースライン構成の必要性の背後にある「理由」の根拠が明確に伝えられる必要があります。既存の基準を満たさないと思われるプロジェクトに対して多くの類似した根拠が提供される場合、それはプロジェクトのスコープと基準を調整すべきという指標である可能性があります。

ベースライン要件

スコープで定義するプロジェクトは、以下のすべての要件を満たさなければなりません。チームは、より厳格な統制を適用できます。

  1. ブランチを保護します。

  2. レビューと承認を必須にします。

  3. Code Owner の承認を必須にします。

  4. シークレットの漏えいを防ぎます。

  5. トークンのアクセスを制限します。

  6. CI/CD 変数を保護します。

  7. CI の依存関係を検証します。

  8. セキュリティスキャンを実行します。

  9. マージチェックを必須にします。

    • マージ前に CI パイプラインの成功を必須にします。
    • ターゲットブランチと比較して、セキュリティスキャンで新たに検出された High または Critical の脆弱性について承認を必須にするよう、マージリクエスト承認ポリシーを設定します。
  10. 公開された CI コンポーネントを保護します。

    • CI コンポーネントをホストするプロジェクトでは、下流のパイプラインが利用するコンポーネントの内容が不正に変更されないよう、すべての semver バージョンタグに不変タグを使用します。
  11. 公開されたパッケージを保護します。

    • 公開レジストリにパッケージを公開する前に、許可されたファイルやファイルパターンの承認済みリストに照らして内容を確認します。npm パッケージの場合は、パッケージの内容に関するガイダンスに従います。
    • サポートされている場合は、パッケージ保護ルールを設定して、パッケージをプッシュまたは削除できるユーザーを制限します。
  12. 本番イメージとデプロイを保護します。

質問がある場合は、#security-help で尋ねてください。

設定例

保護されたブランチ

マージリクエストを必須にする保護されたブランチ設定

Code Owners を使用する承認ルール

Code Owners を使用するマージリクエスト承認ルール

継続的なモニタリング

これらのベースライン構成を要求する基準を満たすプロジェクトは、私たちのこのページに示されているガイダンスに従っていることを確認する継続的コントロールモニタリングプログラムの一環として、GitLab Security Compliance チームによって構成テストのためにいつでも選択される可能性があることに注意してください。プログラムの概要については、GCF セキュリティコントロールライフサイクルページを参照してください。

継続的なコントロールモニタリングの対象は、現在、保護されたブランチと MR 承認の設定のみです。パイプラインと CI/CD の統制は、まだ対象に含まれていません。

Security Compliance チームはまた、上記で概説されたすべての MR 承認および保護されたブランチ設定について、Devo SIEM ツールでの検出/アラートと Slack を使用してライブモニタリングを実装しています。設定の変更の結果として、適切な承認/SOD なしに MR がマージされた場合、根本原因を特定して修復を実行するための観察 Issue が開かれます。修復には、なぜ変更されたかを理解する、設定をコンプライアンスに戻す、適切な承認や職務分掌(SOD)なしにマージされた MR をレビューして悪意のある変更が含まれていないことを確認する、必要に応じて遡及的な承認を取得するなどのステップが含まれます。Security Compliance はまた、変更の根本原因を特定し、設定がチームの開発作業を完了するために変更される必要がないようにワークフローの変更を実装することに向けて作業するために、変更を行った個人とプロジェクトを所有/作業するチームの管理を巻き込みます。

さらなるセキュリティ推奨事項

  1. 変数を平文で保存したり、包括的なシークレット管理のためにマスクされた環境変数に依存したりしないでください。代わりに、外部シークレットストレージソリューションを設定してください
  2. プロジェクトの脅威モデルの作成を強く検討してください。
  3. プロジェクトがより確立された時点で、AppSec レビューを依頼することを検討してください。
  4. さらに質問がある場合は、AppSec チーム (@gitlab-com/gl-security/appsec および #security_help)に連絡してください。

参考文献