セキュリティツールの展開方法:「クロール、ウォーク、ラン」フレームワーク
要約: 段階的アプローチ
この段階的アプローチは、セキュリティツールをスムーズに導入し、ビルドを継続的に実行するのに役立ちます。出荷を保護する一連の小さなステップと考えてください。これにより、より信頼性が高く安全な開発プロセスが保証されます。
| スキャンモード | 開発者への影響 | 設定/セットアップ | 目的と結果 |
|---|---|---|---|
| クロール・フェイルオープン(監査モード、アラートなし) | 開発者への影響なし; 開発者に見えない | プッシュ/コミットごとにスキャンし、結果をログに記録 | データ収集、ルール調整、誤検知抑制; ビルドは常に成功 |
| ウォーク・フェイルオープン(通知モード、アラートあり) | 開発者はPR/IDEで警告を確認 | PRデコレーション/IDEプラグインを有効化 | 開発者は実行可能なフィードバックを受け取り、信頼を築き、自発的に問題を修正 |
| ラン・フェイルクローズド(ブロックモード) | 高/重大な問題でビルドがブロック | 品質ゲートを有効化し、新しい重大な発見でビルドをブロック | 新しい脆弱性が本番環境に到達するのを防止; 開発者は失敗を尊重 |
はじめに: 「ビッグバン」導入が失敗する理由
DevSecOpsプロジェクトは、「ビッグバン」導入で簡単に軌道を外れることがあります。これは、チームが新しいSASTまたはコンテナスキャナーツールを取得し、すぐに「ブロックモード」をオンにしたときによく発生します。例えば、XYZ社のソフトウェア開発チームは、新しいスキャナーツールの初日に「ブロックモード」を有効にしました。

一晩で、ツールは緊急の注意を要する数百の軽微なセキュリティ問題を指摘し、開発プロセス全体を事実上停止させました。
開発者がこれらの問題を解決しようと奮闘する中、重要なプロジェクトの締め切りが守られず、ツールに対する信頼が失われるというフラストレーションが生じました。このシナリオはリスクを浮き彫りにし、より段階的なアプローチが必要である理由を示しています。
結果として通常は問題が発生します:
- ビルドの破損: 開発者は重要な修正を展開できません。
- アラート疲労: チームを圧倒する大量の誤検知。
- シャドウIT: フラストレーションを感じたチームがセキュリティチェックを回避して作業を進めます。
これらの問題を避けるために、一度にすべてを変えようとするのではなく、進化的なアプローチを取るべきです。それが「クロール、ウォーク、ラン」フレームワークの目的です。
最近の研究では、段階的な展開を実施する組織が、展開頻度の測定可能な改善と、失敗からの迅速な回復を経験し、DevSecOpsの信頼性を向上させていることが示されています。
このフレームワークを、ダウンタイムの削減やビルド成功率の向上といった実証済みのパフォーマンス成果に結び付けることで、エンジニアリングリーダーがその価値を認識できるようにします。

フェーズ1: クロール (可視性とベースライニング)
目標: 開発者のワークフローを妨げることなく、既存の技術的負債を完全に可視化すること。最初の2週間でリポジトリの90%をカバーし、測定可能な成功と明確な進捗ベンチマークを確保することを目指します。
- この初期段階では、セキュリティツールを非侵入的にCI/CDパイプラインに統合することでデータ収集に集中します。
- 設定: ツールをAudit ModeでFail Openに設定し、開発者に通知せず、ビルドをブロックせずにすべての発見をログに記録します。
- アクション: コードのプッシュまたはコミットごとにスキャンをトリガーします。
- 結果: スキャナーはすべての発見をダッシュボードにログし、重大な脆弱性が検出されてもすべてのビルドが正常に通過します。
💡 プロのヒント: このフェーズを利用してスキャナーを慎重に調整してください。特定のルール(例: “コード内のマジックナンバー”)が過剰なノイズを引き起こす場合(例: リポジトリ全体で500回)、調整または一時的に無効化して、次に進む前に実行可能な問題に集中することを検討してください。
なぜこれが重要か: この「安全基準」を確立することで、セキュリティチームは既存の技術的負債の量と性質を理解し、デプロイメントに影響を与えることなくルール設定を洗練することができます。
フェーズ2: 歩く(フィードバックと教育)
目標: 開発者に対して、開発の進行を妨げることなく、日常のワークフローに統合された実行可能でタイムリーなセキュリティフィードバックを提供すること。
- ノイズが減少したら、開発者に発見を見える化します。ツールをFail Openモードに保ちつつ、通知モードに切り替えてアラートを有効にします。
- 設定: プルリクエストの装飾(コメント)やIDEプラグインなど、開発ツールにフィードバックを統合します。
- 結果: 開発者はコードレビューの過程でリアルタイムのセキュリティフィードバックを受け取ります。例: “⚠️ 高重大度: ハードコードされた秘密が42行目に導入されました。”
開発者は問題を即座に修正するか、後で解決するために誤検知を文書化することができます。
なぜこれが重要なのか: このフェーズはセキュリティと開発者の間に信頼を築きます。セキュリティは協力的なガイドとして見られ、ゲートキーパーではありません。開発者はツールの存在に慣れ、フィードバックループが直接的で実行可能であるため、自発的に問題を修正し始めます。
これらのポジティブな行動を強化するために、チームが早期の成功を祝うことを奨励します。例えば、「高重大度の発見がゼロの最初のPRがマージされた」といった迅速な成功事例を共有することで、勢いをつけ、より多くの開発者が自発的な修正に向かうよう促します。
フェーズ3: 実行(ゲートと施行)
目標: セキュリティゲートを施行することで、新しい高リスクの脆弱性がプロダクションに到達するのを防ぎます。
- 開発者の調整と教育を行った後、重大な問題を含むビルドをブロックすることでポリシーを強制するビルドブレーカーまたは品質ゲートをアクティブにします。
- 設定: 高および重大な脆弱性を含むビルドを停止するために、ツールをFail Closedモードに設定します。中程度および低程度の問題は警告として残し、過度の混乱を避けます。
- 重要なニュアンス: 現在の変更によって導入された新しい脆弱性(例: 現在のPRで)に対してのみブロックを検討し、既存の問題はバックログ項目として追跡し、時間をかけて修正します。
- 結果: 開発者が例えば重大なSQLインジェクションの脆弱性を導入した場合、ビルドは失敗し、修正されるか、文書化された免除が承認されるまでマージできません。
なぜこれが重要か: ツールとチームが十分に調整され教育されているため、誤検知率は低いです。開発者はビルドの失敗を真のセキュリティ信号として尊重し、それに対抗することはありません。
次のステップ
ビルドをブロックする段階的な戦略を持っている今、次のステップはこれらのツールをどこに統合して開発者の生産性を最大化するかを決定することです。
次の記事では、摩擦のないセキュリティを探求し、開発者のIDEやPRワークフローにセキュリティツールをシームレスに埋め込み、コンテキストスイッチを減らし、採用を増やす方法を紹介します。
よくある質問 (FAQ)
「Crawl, Walk, Run」フレームワークとは何ですか?
新しいセキュリティツールを問題なく使い始めるための簡単なステップバイステップの方法です。まず、静かに情報を収集します(Crawl)。次に、開発者に問題を示して学び、修正できるようにします(Walk)。最後に、悪いコードをブロックしてソフトウェアを安全に保ちます(Run)。これにより、チームはセキュリティツールをスムーズに採用し、途中で信頼を得ることができます。
なぜすぐにビルドをブロックしてはいけないのか?
初日からビルドをブロックすると、ツールが一度に多くの問題を指摘し、開発者が作業できなくなる可能性があります。これにより、フラストレーションが生じ、プロジェクトが遅れることがあります。ゆっくり始めることで、まず騒がしいアラートを見つけて修正し、ツールが正確で信頼できるようになったときにのみブロックが行われます。
各ステップにどれくらいの時間がかかるべきか?
通常、Crawlフェーズは数週間続き、十分なデータを収集します。Walkフェーズは、開発者がアラートを見て問題を修正することに慣れるため、より多くの時間がかかります。ツールが十分に調整され、チームがコードがマージされる前に問題を修正することに慣れたら、Runに移行します。
「Fail Open」とは何で、いつ使用するのか?
「Fail Open」とは、ツールが問題を見つけてもコードのマージを止めないことを意味します。CrawlおよびWalkフェーズでこれを使用し、データを収集し、開発者に問題について教える際に邪魔しないようにします。


