多層防御

複数のセキュリティ層を重ねて、1 つの層が突破されても他の層で防御する設計原則

セキュリティ設計

多層防御とは

多層防御 (Defense in Depth) は、複数のセキュリティ層を重ねて、1 つの層が突破されても他の層で防御する設計原則である。城の堀・城壁・天守閣のように、複数の防御線を設ける。

AWS での多層防御

インターネット
  ↓ CloudFront (DDoS 防御, Shield)
  ↓ WAF (SQL インジェクション, XSS ブロック)
  ↓ API Gateway (認証, スロットリング)
  ↓ Lambda (入力バリデーション, ビジネスロジック)
  ↓ DynamoDB (IAM ポリシー, 暗号化)
防御 AWS サービス
エッジ DDoS, Bot Shield, CloudFront
アプリケーション SQLi, XSS WAF
認証・認可 不正アクセス Cognito, IAM
アプリケーションロジック 入力バリデーション Lambda
データ 暗号化, アクセス制御 KMS, IAM
監視 異常検知 GuardDuty, CloudTrail

各層の具体的な対策

# 層 1: WAF
WebACL:
  Rules:
    - Name: AWSManagedRulesCommonRuleSet
    - Name: AWSManagedRulesSQLiRuleSet
    - Name: RateLimit
      Statement:
        RateBasedStatement: { Limit: 2000 }

# 層 2: API Gateway 認証
Auth:
  DefaultAuthorizer: CognitoAuth

# 層 3: Lambda の入力バリデーション
const result = schema.safeParse(input);
if (!result.success) return { statusCode: 400 };

# 層 4: DynamoDB の最小権限
Policies:
  - DynamoDBCrudPolicy:
      TableName: !Ref Table

多層防御の原則

最小権限の原則で必要最小限の権限のみを付与し、1 つの対策に依存せず多層化する。障害時は安全側に倒すフェイルセーフを設計し、全層でログを記録して監視する。

単一防御の危険性

❌ WAF だけに依存:
  WAF のルールをバイパスする新しい攻撃 → 防御なし

✅ 多層防御:
  WAF をバイパス → API Gateway の認証で阻止
  認証をバイパス → Lambda のバリデーションで阻止
  バリデーションをバイパス → DynamoDB の IAM で阻止

多層防御の背景や設計思想は関連書籍に詳しい。

関連用語