EXERCISE 90分

ストーリー

高橋アーキテクト
理論は十分だ。実際のシステムに対してデータ保護設計を行ってみよう

高橋アーキテクトが新しいプロジェクトの要件書を広げました。

高橋アーキテクト
今回はECサイトだ。個人情報、決済情報、注文履歴…機密性の異なるデータを適切に保護する設計を作ってほしい

課題概要

項目内容
対象システムECサイト(Web + モバイルアプリ)
課題数6つ
合計時間90分
評価基準各課題の設計ドキュメントを作成すること

システムのデータ一覧

  • ユーザープロフィール(名前、メール、住所、電話番号)
  • 認証情報(パスワードハッシュ、MFAシード)
  • 決済情報(クレジットカード番号、有効期限)
  • 注文履歴(注文内容、金額、配送先)
  • 商品データ(名前、価格、説明、画像)
  • 操作ログ(アクセス履歴、操作内容)

課題1: データ分類を行おう(15分)

上記のデータ一覧を4段階のレベルに分類してください。

解答例(自分で分類してから確認しよう)
データレベル分類理由
商品データ(名前、価格、説明)Level 1(公開)公開情報
商品画像Level 1(公開)公開情報
注文履歴Level 2(内部)ビジネスデータ
操作ログLevel 2(内部)内部運用データ
ユーザー名前Level 3(機密)個人情報
メールアドレスLevel 3(機密)個人情報
住所Level 3(機密)個人情報
電話番号Level 3(機密)個人情報
パスワードハッシュLevel 4(最高機密)認証情報
MFAシードLevel 4(最高機密)認証情報
クレジットカード番号Level 4(最高機密)PCI DSS対象
カード有効期限Level 4(最高機密)PCI DSS対象

課題2: 暗号化戦略を設計しよう(15分)

レベル別の暗号化戦略を策定してください。暗号化アルゴリズム、鍵管理方式を明記してください。

解答例(自分で設計してから確認しよう)
レベル保存時暗号化通信時暗号化鍵管理
Level 1なし(DBの透過暗号化のみ)TLS 1.2+-
Level 2DBの透過暗号化(TDE)TLS 1.2+AWS KMS
Level 3フィールドレベル暗号化(AES-256-GCM)TLS 1.2+AWS KMS + エンベロープ暗号化
Level 4フィールドレベル暗号化(AES-256-GCM)TLS 1.3HSM + エンベロープ暗号化
// エンベロープ暗号化の設計
const encryptionConfig = {
  level3: {
    algorithm: "aes-256-gcm",
    kekSource: "AWS KMS",
    dekRotation: "90日",
    kekRotation: "365日",
  },
  level4: {
    algorithm: "aes-256-gcm",
    kekSource: "AWS CloudHSM",
    dekRotation: "30日",
    kekRotation: "180日",
    additionalProtection: "トークナイゼーション(カード番号)",
  },
};

課題3: シークレット管理を設計しよう(15分)

システムで使用するシークレットを一覧化し、管理方針を策定してください。

解答例(自分で設計してから確認しよう)
シークレット保存場所ローテーション間隔アクセス権限
DB接続パスワードAWS Secrets Manager90日(自動)App Server のみ
JWT署名鍵AWS Secrets Manager30日Auth Service のみ
Stripe APIキーAWS Secrets Manager180日Payment Service のみ
TLS証明書ACM(AWS Certificate Manager)自動更新ALB のみ
暗号化マスターキーAWS KMS365日Encryption Service のみ
SendGrid APIキーAWS Secrets Manager90日Notification Service のみ
// シークレットアクセスのIAMポリシー
const iamPolicy = {
  Version: "2012-10-17",
  Statement: [
    {
      Effect: "Allow",
      Action: "secretsmanager:GetSecretValue",
      Resource: "arn:aws:secretsmanager:*:*:secret:myapp/payment/*",
      Condition: {
        StringEquals: {
          "aws:PrincipalTag/Service": "payment-service",
        },
      },
    },
  ],
};

課題4: データマスキングを実装しよう(15分)

各データフィールドのマスキングルールを定義し、TypeScriptで実装してください。

解答例(自分で実装してから確認しよう)
const maskingConfig: Record<string, (value: string) => string> = {
  email: (v) => {
    const [local, domain] = v.split("@");
    return `${local[0]}${"*".repeat(local.length - 1)}@${domain}`;
  },
  phone: (v) => v.replace(/\d(?=\d{4})/g, "*"),
  creditCard: (v) => `****-****-****-${v.slice(-4)}`,
  address: (v) => {
    const parts = v.split(/[都道府県]/);
    return parts[0] + "***" + (parts.length > 1 ? "***" : "");
  },
  name: (v) => v[0] + "*".repeat(v.length - 1),
};

// コンテキスト別のマスキングレベル
type ViewContext = "owner" | "admin" | "support" | "analytics";

const getMaskingLevel = (context: ViewContext, field: string): "full" | "masked" | "hidden" => {
  const rules: Record<ViewContext, Record<string, "full" | "masked" | "hidden">> = {
    owner: { email: "full", phone: "full", creditCard: "masked", name: "full" },
    admin: { email: "masked", phone: "masked", creditCard: "hidden", name: "masked" },
    support: { email: "masked", phone: "masked", creditCard: "hidden", name: "full" },
    analytics: { email: "hidden", phone: "hidden", creditCard: "hidden", name: "hidden" },
  };
  return rules[context]?.[field] ?? "hidden";
};

課題5: 通信保護を設計しよう(15分)

全ての通信経路を列挙し、それぞれの保護方式を定義してください。

解答例(自分で設計してから確認しよう)
経路プロトコル認証方式備考
ブラウザ → CDNHTTPS (TLS 1.3)-HSTS preload
CDN → API GatewayHTTPS (TLS 1.2+)APIキーCloudFront → ALB
API Gateway → AppHTTP (内部)Bearer TokenVPC内部通信
App → DatabaseTLS証明書認証RDS SSL
App → RedisTLSパスワードElastiCache TLS
App → StripeHTTPS (TLS 1.2+)APIキー外部API
App → App(内部)mTLSクライアント証明書サービス間通信

課題6: データ保存期間ポリシーを作成しよう(15分)

各データの保存期間と削除・匿名化の方針を策定してください。

解答例(自分で策定してから確認しよう)
データ保存期間削除方式法的根拠
セッションログ30日完全削除運用上の判断
操作ログ1年アーカイブ後削除監査要件
注文履歴7年匿名化税法上の保管義務
決済情報取引完了後90日完全削除PCI DSS
ユーザー個人情報退会後30日完全削除個人情報保護法
アクセスログ90日完全削除運用上の判断
バックアップ90日自動消去運用上の判断
// 自動削除ジョブの設計
const retentionJobs = [
  { cron: "0 2 * * *", task: "deleteExpiredSessions" },      // 毎日2時
  { cron: "0 3 * * 0", task: "archiveOldLogs" },             // 毎週日曜3時
  { cron: "0 4 1 * *", task: "anonymizeOldOrders" },         // 毎月1日4時
  { cron: "0 5 1 * *", task: "deleteExpiredPaymentData" },   // 毎月1日5時
];

達成度チェック

課題テーマ完了
課題1データ分類[ ]
課題2暗号化戦略[ ]
課題3シークレット管理[ ]
課題4データマスキング[ ]
課題5通信保護[ ]
課題6データ保存期間ポリシー[ ]

まとめ

ポイント内容
データ分類4段階でデータの重要度を分類
暗号化レベルに応じた暗号化戦略を策定
シークレット集中管理 + ローテーション
マスキングコンテキスト別の表示制御

チェックリスト

  • 全データを4段階に分類できた
  • レベル別の暗号化戦略を策定できた
  • シークレット一覧と管理方針を作成できた
  • データマスキングを実装できた
  • 全通信経路の保護方式を定義できた
  • データ保存期間ポリシーを作成できた

次のステップへ

お疲れさまでした。データ保護設計の演習が完了しました。 次はStep 4のチェックポイントです。


推定所要時間: 90分