ストーリー
ある朝、チームのSlackに緊急通知が流れてきました。
慌てて会議室に駆けつけると、高橋アーキテクトが深刻な表情で画面を見つめていました。
高橋アーキテクトは一呼吸おいて続けました。
セキュリティバイデザインとは
セキュリティバイデザイン(Security by Design)とは、システムの設計段階からセキュリティを組み込む考え方です。機能を完成させた後にセキュリティ対策を追加するのではなく、最初からセキュリティを前提に設計します。
後付けセキュリティ vs セキュリティバイデザイン
// 後付けセキュリティ:機能実装後にセキュリティを追加
class UserController {
async getUser(req: Request, res: Response) {
// まず機能を作って......
const user = await this.userService.findById(req.params.id);
res.json(user);
// TODO: 認可チェック追加する(忘れがち)
// TODO: 入力バリデーション追加する(忘れがち)
}
}
// セキュリティバイデザイン:最初からセキュリティを組み込む
class UserController {
async getUser(req: Request, res: Response) {
// 1. 入力バリデーション
const userId = validateUUID(req.params.id);
if (!userId) return res.status(400).json({ error: "Invalid user ID" });
// 2. 認可チェック
if (!req.user.canAccess("user", userId)) {
return res.status(403).json({ error: "Forbidden" });
}
// 3. ビジネスロジック(検証済みデータのみ使用)
const user = await this.userService.findById(userId);
if (!user) return res.status(404).json({ error: "Not found" });
// 4. レスポンスフィルタリング(必要な情報のみ返す)
res.json(sanitizeUserResponse(user));
}
}
シフトレフト:セキュリティの前倒し
セキュリティバイデザインの核心は「シフトレフト」です。開発ライフサイクルの早い段階(左側)でセキュリティを考慮することで、コストとリスクを大幅に削減できます。
| フェーズ | 後付けアプローチ | シフトレフト |
|---|---|---|
| 要件定義 | セキュリティ要件なし | セキュリティ要件を定義 |
| 設計 | 機能設計のみ | 脅威モデリング実施 |
| 実装 | 機能コードのみ | セキュアコーディング |
| テスト | 機能テストのみ | セキュリティテスト込み |
| リリース | 脆弱性発覚 → 緊急対応 | 脆弱性なし → 安全にリリース |
| コスト | 修正コスト100倍 | 修正コスト1倍 |
Month 8 で学ぶこと
この1ヶ月で、以下の4つの柱を学びます。
1. 脅威モデリング
STRIDEとDREADを使って、システムに対する脅威を体系的に分析します。
2. ゼロトラスト・認証認可
「何も信頼しない」前提で、認証・認可アーキテクチャを設計します。
3. データ保護
暗号化、シークレット管理、通信保護で機密データを守ります。
4. DevSecOps
SBOMや自動化テストで、セキュリティを継続的に運用します。
まとめ
| ポイント | 内容 |
|---|---|
| セキュリティバイデザイン | 設計段階からセキュリティを組み込む |
| シフトレフト | 早い段階でセキュリティを考慮 |
| コスト削減 | 後付け修正の100分の1のコスト |
| Month 8の柱 | 脅威モデリング、ゼロトラスト、データ保護、DevSecOps |
チェックリスト
- セキュリティバイデザインの考え方を理解した
- シフトレフトの重要性を理解した
- Month 8で学ぶ4つの柱を把握した
次のステップへ
次は「OWASP Top 10」を学びます。Webアプリケーションで最も多い脆弱性トップ10を知り、守るべき対象を明確にしましょう。
推定読了時間: 15分