
セキュリティレビュー実装例
スピードを落とさない“リスクベース”のレビュー設計
受託開発では、予算と納期の中で安全性を担保する仕組みが必要です。全機能に同じ強度のチェックを当てるのではなく、取り扱うデータと影響範囲に応じて強弱を付けます。機密性・可用性・法的リスクをスコア化し、P0/P1/P2の3段階でゲートを定義します。
- P0(高リスク・支払い/個人情報/管理機能):脅威モデリング必須、プルリクでSAST/Secrets/IaCを全通過、SBOM提出、リリース前に手動レビュー+動的テスト
- P1(中リスク・認証前画面/検索APIなど):自動テスト全通過、手動は変更点に限定
- P2(低リスク・表示のみ・文言変更):自動チェックのみで可、手動は省略可
設計→実装→デプロイの各レイヤーで役割を分けます。設計段階は「データフロー図・権限境界・信頼境界」を簡潔に残すだけでも効果的。実装段階は自動化を厚くし、デプロイ前は差分に絞った人手の確認で仕上げます。品質基準は曖昧にせず、「クリティカル既知脆弱性は0件」「鍵やトークンの露出0」「新規エンドポイントはレート制限と監査ログ必須」など合格条件を事前に合意します。
開発に組み込む自動化の実装例(コード・依存・インフラ)
プルリクエスト中心のチェックリスト
プルリクのテンプレートに、変更のリスク自己申告と最小セットのチェック項目を入れます。例:「外部入力のバリデーション」「権限チェック」「機微データのマスキング」「ログに個人情報を含めない」。P0の場合は脅威モデリングのメモ(1〜2ページ)へのリンクを必須化します。
自動スキャンの柱
- 静的解析(SAST):主要言語向けルールセットを有効化し、シリアライズ、SQL/NoSQLインジェクション、XSS、SSRF、パストラバーサルを高優先で検出
- Secrets検出:APIキーや証明書のコミットをブロック。履歴も定期スキャン
- 依存関係監査+SBOM:ビルド時にSBOMを生成し、既知脆弱性とライセンスを検査
- コンテナ/OSパッケージ:イメージのベース更新と不要権限の検出
- IaCスキャン:セキュアでないセキュリティグループ、公開S3相当、暗号化未設定、KMS/RBACの逸脱を検出
- DAST(軽量版):プレビュー環境に対して主要エンドポイントの動的検査を差分で実行
すべての結果はプルリクに集約し、ブロック条件は「クリティカル/ハイは必ず修正」「ミディアムはP0のみブロック」など明確化。例外は期限付きのリスク受容としてチケット化します。
安全なAI活用
設計メモのたたき台やテスト観点の洗い出しにはChatGPTやClaude、Geminiを使うとスピードが上がります。コーディング補助はCopilotでパターン化。ただし、顧客特有の情報や秘密鍵は投入しない方針を徹底し、必要ならサニタイズスクリプトで自動マスクします。AIが提案したコードはSASTとレビューを必須にします。
運用ルールとワークフローの実例
RACIとSLA
- 責任分担(RACI):開発者=実装/一次対応、レビュー担当=承認、セキュリティ担当=ルール策定/例外審査、PM=優先度判断
- 回答SLA:P0指摘は24時間以内に対応方針、P1は3営業日、P2は次スプリント
- 修正期限:P0は72時間以内のパッチ、P1は7日、P2は30日
日々の流れ
- 設計時:簡易データフロー図とリスクスコアをチケットに添付
- 実装時:ローカルpre-commitでSecrets/SASTの軽量版を実行
- プルリク:自動スキャンが走り、チェックリストに自己宣言。P0は指名レビュー+短時間の同期確認
- プレビュー:テストデータのみで立ち上げ、DASTと主要E2Eを通す
- リリース:承認後に署名付きアーティファクトをデプロイ。監査ログとSBOMを保存
- ふりかえり:週次で未解決指摘の滞留日数、誤検知率、修正リードタイムを可視化
開発体験を損ねないために、誤検知は毎週ルールをチューニングし、レビュー観点は「誰が見ても同じ結論」になるよう具体例付きで更新します。チャットツールにはボットで「ブロック中のプルリク」を通知し、放置を防ぎます。
身近な企業の活用例と学び
社員50名のB2B SaaS企業(中小規模、営業支援ツールを提供)が、顧客向けAPIを拡張するプロジェクトを外部パートナーと推進しました。初回リリース前の負荷試験で、ログにメールアドレスが平文で残る問題と、管理画面の権限チェック漏れが見つかり、計画が2週間遅延。原因は「レビュー観点の属人化」と「P0/P1の区別なし」でした。
改善では、上記のリスクベース設計を導入。APIと管理機能をP0に指定し、プルリクテンプレートに権限・入力検証・レート制限の3点を必須化。SASTとSecretsをプッシュ時に自動実行、SBOMを生成して依存更新を週次に固定。設計メモの骨子はChatGPTで作り、要点をClaudeで要約してレビュー時間を短縮。コードの定型はCopilotに任せ、最終チェックは自動化+人手のダブルで行いました。リリース前の最終確認では、DASTで検出されたリダイレクト周りの1件のみがP1として残り、翌日修正。以降3スプリントの運用で、セキュリティ指摘の平均修正リードタイムは7.2日→2.4日に短縮、誤検知はルール調整で30%減りました。GeminiはAPI仕様書からテストケースを抽出する用途に限定し、機密を含む例は自動マスクしてから投入する運用で事故ゼロを維持しています。
ポイントは、重たい体制を作ることではなく「高リスクにだけ強いゲートを置く」「自動化で“気づける”状態にする」「例外と期限を記録する」の3つです。受託開発ソリューション事業では、要件定義の段階でこの設計をWBSと見積に織り込み、レビューのSLAやログ保全、SBOM提出といった成果物を契約の“普通の作業”として扱うことで、スピードと安全性の両立が現実的になります。