多層防御
複数のセキュリティ層を重ねて、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 で阻止
多層防御の背景や設計思想は関連書籍に詳しい。