セキュリティポリシープロジェクト
- プラン: Ultimate
- 提供形態: GitLab.com、GitLab Self-Managed、GitLab Dedicated
セキュリティポリシープロジェクトを使用すると、複数のプロジェクトにわたってポリシーを適用できます。セキュリティポリシープロジェクトは、ポリシーのみを格納するための特別なタイプのプロジェクトです。セキュリティポリシープロジェクトに含まれるポリシーを適用するには、セキュリティポリシープロジェクトを、ポリシーを適用するプロジェクト、サブグループ、またはグループにリンクします。セキュリティポリシープロジェクトには複数のポリシーを含めることができますが、それらはまとめて適用されます。グループまたはサブグループで適用されたセキュリティポリシープロジェクトは、すべてのサブグループとそのプロジェクトを含め、その階層以下のすべてに適用されます。
マージリクエストで適用されたポリシーの変更は、マージリクエストがマージされるとすぐに有効になります。マージリクエストを経由せず、デフォルトブランチに直接コミットされた変更は、ポリシーの変更が有効になるまでに最大10分かかります。
ポリシーは、.gitlab/security-policies/policy.yml YAMLファイルに保存されます。
セキュリティポリシープロジェクトの実装
セキュリティポリシープロジェクトの実装オプションは、GitLab.com、GitLab Dedicated、GitLab Self-Managedで若干異なります。主な違いは、GitLab.comではサブグループのみを作成できることです。職務分離を確実にするには、よりきめ細かい権限設定が必要です。
GitLab.comネームスペースでポリシーをグローバルに適用する
- プラン: Ultimate
- 提供形態: GitLab.com
前提要件:
- セキュリティポリシープロジェクトにリンクするには、オーナーロールまたは
manage_security_policy_link権限を持つカスタムロールが必要です。詳細については、職務分離を参照してください。
GitLab.comネームスペース内のすべてのサブグループとプロジェクト全体でポリシーをグローバルに適用するための概要ワークフロー:
トップレベルグループからポリシータブにアクセスします。
サブグループで、ポリシータブに移動し、テストポリシーを作成します。
テスト用にポリシーを無効にして作成できます。ポリシーを作成すると、トップレベルグループの下に新しいセキュリティポリシープロジェクトが自動的に作成されます。このプロジェクトは、
policy.ymlまたはpolicy-as-codeを保存するために使用されます。必要に応じて、新しく作成したプロジェクトの権限を確認および設定します。
デフォルトでは、オーナーとメンテナーはポリシーを作成、編集、および削除できます。デベロッパーはポリシーの変更を提案できますが、マージすることはできません。
サブグループ内に作成されたセキュリティポリシープロジェクトで、必要なポリシーを作成します。
作成した
Security Policy Managementプロジェクトのポリシータブにあるポリシーエディタを使用できます。または、新しく作成したセキュリティポリシープロジェクトSecurity Policy Management - security policy projectに保存されているpolicy.ymlファイルで、ポリシーを直接更新することもできます。グループ、サブグループ、またはプロジェクトをセキュリティポリシープロジェクトにリンクします。
サブグループのオーナー、または適切な権限を持つプロジェクトのオーナーは、ポリシーページにアクセスし、セキュリティポリシープロジェクトへのリンクを作成できます。プロジェクトの名前は、フルパス表記とし、「- security policy project」で終わる必要があります。リンクされているすべてのグループ、サブグループ、プロジェクトは、セキュリティポリシープロジェクトで作成されたポリシーによって「適用可能」になります。詳細については、セキュリティポリシープロジェクトへのリンクを参照してください。
デフォルトでは、ポリシーが有効になると、リンクされているグループ、サブグループ、プロジェクト内のすべてのプロジェクトにそのポリシーが適用されます。
よりきめ細かく適用するには、ポリシースコープを追加します。ポリシースコープを使用すると、特定のプロジェクトセット、またはコンプライアンスフレームワークラベルを含むプロジェクトに対してポリシーを適用できます。
たとえば、継承された権限のブロックや、ポリシー変更に対する追加のレビューまたは承認の要求など、追加の制限が必要な場合は、セキュリティポリシープロジェクトのみにスコープが設定された追加のポリシーを作成し、追加の承認を適用します。
GitLab DedicatedまたはGitLab Self-Managedでポリシーをグローバルに適用する
- プラン: Ultimate
- 提供形態: GitLab Self-Managed、GitLab Dedicated
GitLab Self-Managedでは、コンプライアンスとセキュリティポリシーグループを使用して、インスタンス全体のセキュリティポリシーを適用することもできます。
前提要件:
- セキュリティポリシープロジェクトにリンクするには、オーナーロールまたは
manage_security_policy_link権限を持つカスタムロールが必要です。詳細については、職務分離を参照してください。 - インスタンス全体で承認グループをグローバルにサポートするには、GitLabインスタンスアプリケーションの設定で
security_policy_global_group_approvers_enabledを有効にします。
複数のグループ全体にポリシーを適用するための概要ワークフロー:
ポリシーを格納し、職務分離を確保するために、別のグループを作成します。
別のスタンドアロングループを作成することで、権限を継承するユーザーの数を最小限に抑えることができます。
新しいグループで、ポリシータブにアクセスします。
このタブにはポリシーエディタがあり、UIによりポリシーの作成や管理ができます。
テストポリシーを作成します(テスト目的でポリシーを無効な状態で作成できます)。
ポリシーを作成すると、グループの下に新しいセキュリティポリシープロジェクトが自動的に作成されます。このプロジェクトは、
policy.ymlまたはpolicy-as-codeを保存するために使用されます。必要に応じて、新しく作成したプロジェクトの権限を確認および設定します。
デフォルトでは、オーナーとメンテナーはポリシーを作成、編集、および削除できます。デベロッパーはポリシーの変更を提案できますが、マージすることはできません。
サブグループで作成したセキュリティポリシープロジェクトで、必要なポリシーを作成します。
作成した
Security Policy Managementプロジェクトのポリシータブにあるポリシーエディタを使用できます。または、新しく作成したセキュリティポリシープロジェクトSecurity Policy Management - security policy projectに保存されているpolicy.ymlファイルで、ポリシーを直接更新することもできます。グループ、サブグループ、またはプロジェクトをセキュリティポリシープロジェクトにリンクします。
サブグループのオーナー、または適切な権限を持つプロジェクトのオーナーは、ポリシーページにアクセスし、セキュリティポリシープロジェクトへのリンクを作成できます。プロジェクトの名前は、フルパス表記とし、「- security policy project」で終わる必要があります。リンクされているすべてのグループ、サブグループ、プロジェクトは、セキュリティポリシープロジェクトで作成されたポリシーによって「適用可能」になります。詳細については、セキュリティポリシープロジェクトへのリンクを参照してください。
デフォルトでは、ポリシーが有効になると、リンクされているグループ、サブグループ、プロジェクト内のすべてのプロジェクトにそのポリシーが適用されます。よりきめ細かく適用するには、ポリシースコープを追加します。ポリシースコープを使用すると、特定のプロジェクトセット、またはコンプライアンスフレームワークラベルを含むプロジェクトに対してポリシーを適用できます。
たとえば、継承された権限のブロックや、ポリシー変更に対する追加のレビューまたは承認の要求など、追加の制限が必要な場合は、セキュリティポリシープロジェクトのみにスコープが設定された追加のポリシーを作成し、追加の承認を適用します。
セキュリティポリシープロジェクトへのリンク
セキュリティポリシープロジェクトに含まれるポリシーをグループ、サブグループ、またはプロジェクトに対して適用するには、それらをリンクします。デフォルトでは、リンクされているすべてのエンティティに適用されます。ポリシーごとにきめ細かくポリシーを適用するには、各ポリシーでスコープを設定します。
前提要件:
- セキュリティポリシープロジェクトにリンクするには、オーナーロールまたは
manage_security_policy_link権限を持つカスタムロールが必要です。詳細については、職務分離を参照してください。
グループ、サブグループ、またはプロジェクトをセキュリティポリシープロジェクトにリンクするには:
- 左側のサイドバーで、検索または移動先を選択し、プロジェクト、サブグループ、またはグループを見つけます。
- 左側のサイドバーで、セキュリティ > ポリシーを選択します。
- Edit Policy Project(ポリシープロジェクトを編集)を選択し、ドロップダウンリストからリンクするプロジェクトを検索して選択します。
- 保存を選択します。
セキュリティポリシープロジェクトのリンクを解除するには、同じ手順に従いますが、ダイアログでゴミ箱アイコンを選択します。同じトップレベルグループ内の別のサブグループから、または完全に異なるトップレベルグループからセキュリティポリシープロジェクトにリンクできます。ただし、パイプライン実行ポリシーを適用する場合、パイプラインをトリガーするには、ユーザーには少なくとも、そのポリシーで参照されているCI/CD設定を含むプロジェクトに対する読み取り専用アクセス権が必要です。
リンクされたセキュリティポリシープロジェクトを表示する
プロジェクトポリシーページへのアクセス権があり、プロジェクトオーナーではないすべてのユーザーには、関連付けられたセキュリティポリシープロジェクトにリンクするボタンが表示されます。
1つのセキュリティポリシープロジェクトを複数のグループまたはプロジェクトにリンクできます。リンクされた1つのグループまたはプロジェクトのセキュリティポリシーを表示する権限を持つすべてのユーザーは、他のリンクされたグループおよびプロジェクトでどのセキュリティポリシーが適用されているかを判断できます。
ポリシー制限の変更
- 提供形態: GitLab Self-Managed
パフォーマンス上の理由から、GitLabは、セキュリティポリシープロジェクトで設定できるポリシーの数を制限しています。
制限を、セキュリティポリシープロジェクトに現在保存されているポリシーの数より少なくすると、GitLabは制限を超えたポリシーを適用しません。ポリシーを再度有効にするには、制限を、最大のセキュリティポリシープロジェクトのポリシーの数と一致するように増やします。
デフォルトの制限は次のとおりです:
| ポリシーの種類 | デフォルトのポリシー制限 |
|---|---|
| マージリクエスト承認ポリシー | 5 |
| スキャン実行ポリシー | 5 |
| パイプライン実行ポリシー | 5 |
| 脆弱性管理ポリシー | 5 |
GitLab Self-Managedインスタンスでは、管理者はインスタンス全体のインスタンス制限を調整できます。各ポリシータイプの上限は20個です。管理者は、特定のトップレベルグループの制限を変更することもできます。
インスタンスのポリシー制限を変更する
組織がセキュリティポリシープロジェクトに保存できるポリシーの最大数を変更するには:
- 管理者エリア > 設定 > セキュリティとコンプライアンスに移動します。
- セキュリティポリシーセクションを展開します。
- 変更するポリシーの種類ごとに、Maximum number of {policy type} allowed per security policy configuration(セキュリティポリシー設定ごとに許可される{ポリシーの種類}の最大数)の新しい値を設定します。
- 変更を保存を選択します。
トップレベルグループのポリシー制限を変更する
グループ制限は、設定またはデフォルトのインスタンス制限を超える可能性があります。トップレベルグループのセキュリティポリシープロジェクトに組織が保存できるポリシーの最大数を変更するには:
これらの制限を増やすと、特に多数の複雑なポリシーを適用する場合、システムパフォーマンスに影響を与える可能性があります。
トップレベルグループの制限値を調整するには:
- 管理者エリア > 概要 > グループに移動します。
- 変更するトップレベルグループの行で、編集を選択します。
- 変更するポリシーの種類ごとに、Maximum number of {policy type} allowed per security policy configuration(セキュリティポリシー設定ごとに許可される{ポリシーの種類}の最大数)の新しい値を設定します。
- 変更を保存を選択します。
個々のグループの制限を0に設定すると、システムはインスタンス全体のデフォルト値を使用します。これにより、制限がゼロのグループでも、デフォルトのインスタンス構成に従ってポリシーを作成できます。
セキュリティポリシープロジェクトの削除
セキュリティポリシープロジェクトまたはその親グループの1つを削除するには、他のグループまたはプロジェクトから削除対象へのリンクをすべて削除する必要があります。そうしないと、リンクされたセキュリティポリシープロジェクトまたは親グループを削除する際にエラーメッセージが表示されます。