エンジニアの皆さん、こんにちは。現場の最前線でコードを書き、守り、そして進化させている皆さんなら、「セキュリティ設定の統一」という終わりのない課題に一度は頭を抱えたことがあるはずです。
「Aプロジェクトは設定されているけど、Bプロジェクトではスキャンが漏れている」「設定変更を全リポジトリに反映するのに一週間かかる」……そんな悪夢のような運用からは、今日で卒業しましょう。
GitLabの 「Security Policy Management(セキュリティポリシー管理)」 を使えば、グループやインスタンス全体に対してセキュリティガードレールを「強制」できます。今回は、現場で即座に効力を発揮する「最強のセキュリティ統治術」を解説します。
—
1. なぜ「個別の設定」では限界なのか?
開発者が10人、リポジトリが20個を超えた瞬間、手動管理は破綻します。
GitLabのポリシー管理が優れているのは、「ポリシーをリポジトリ(コード)として管理し、それをグループ全体に継承させる」という点です。
- 強制力: 開発者が個別にスキャンを無効化しようとしても、ポリシーが上書きします。
- 集中管理: セキュリティチームがポリシーファイルを更新するだけで、数百のリポジトリに即時反映されます。
2. まずはここから:セキュリティポリシー用プロジェクトの作成
最も安全でスケーラブルな方法は、「専用のポリシー管理プロジェクト」を作ることです。
1. ポリシー管理用グループを作成: 例えば `Security-Policies` というグループを作ります。
2. プロジェクトを作成: その中に `Compliance-Policies` という名前でリポジトリを作成してください。
3. リンクの紐付け: 組織のメイングループ設定から、このプロジェクトを「Security Policy Project」として指定します。
これだけで、このプロジェクト内の `.gitlab/security-policies/policy.yml` が、配下すべてに絶対的な権限を持つようになります。
3. HelloWorld:スキャンを強制するポリシーを書く
まずは、「すべてのプロジェクトでSAST(静的解析)を強制する」という最も基本的かつ強力なポリシーを書いてみましょう。
`policy.yml` に以下の内容を記述します。
scan_execution_policy:
- name: Mandatory SAST Scan
description: “全プロジェクトでSASTスキャンを強制実行し、無効化を禁止する”
enabled: true
rules:
- type: pipeline
branches:
- main
- develop
actions:
- scan: sast
site_profile: # 必要に応じてプロファイルを指定
この設定のキモ:
`enabled: true` にするだけで、開発者がリポジトリ内の `.gitlab-ci.yml` でどれだけ抗おうとも、このスキャンがパイプラインの先頭に強制挿入されます。
4. 承認フローを「コード」で縛る(Scan Result Policy)
脆弱性が見つかった際、「見なかったことにしてマージする」という事態を防ぐのが `scan_result_policy` です。これもポリシーで強制しましょう。
scan_result_policy:
- name: Block merge on critical vulnerabilities
enabled: true
rules:
- type: scan_finding
scanners: [sast]
vulnerabilities_allowed: 0 # 脆弱性が1つでもあればブロック
severity_levels: [critical, high] # 重大・高リスクのみ対象
block_after_first_critical_vulnerability: true
actions:
- type: require_approval
approvals_required: 1
group_approvers_ids:
- 123456 # セキュリティチームのグループIDを指定
現場で震えるほど役立つポイント:
脆弱性が見つかった瞬間、マージボタンが「承認が必要」という状態にロックされます。これこそが、CI/CDパイプラインにおける「信頼できる唯一の情報源(Single Source of Truth)」です。
5. 運用上の極意:開発者を「邪魔しない」ための工夫
セキュリティを強制すると、往々にして開発者から反発を受けます。そこでスペシャリストとしてのアドバイスです。
- ポリシーの可視化: `policy.yml` を読みやすく書き、誰でも「なぜこのスキャンがあるのか」がわかるようにコメントを残してください。
- 例外管理の設計: どうしても即時対応できないプロジェクトのために、「例外承認フロー」をあらかじめポリシーに組み込んでおきましょう。
- 段階的導入: 最初から厳しくせず、まずは「検知のみ(Notify)」から始め、チームの習熟に合わせて「ブロック(Enforce)」に切り替えるのが、摩擦のない導入の秘訣です。
まとめ
GitLabのポリシー管理は、単なる監視ツールではありません。「開発者の意識を変え、組織全体の品質を自動的に底上げするエンジニアリング・インフラ」です。
これをマスターすれば、毎日の作業から「セキュリティ設定の確認」という雑務が消え、あなたは本来注力すべき「価値あるプロダクト開発」に全力を注げるようになります。
まずは、小さなグループで1つのポリシーを強制することから始めてみてください。その瞬間に、あなたのCI/CDパイプラインは「守られた堅牢な城」へと進化するはずです。
何か分からないことがあれば、いつでも聞いてくださいね。一緒に最強のパイプラインを作り上げましょう!