1. 基本スペック比較
2. セキュリティ詳細分析
攻撃への耐性評価
凡例: ◎=耐性強, △=中程度, ◯=脆弱
規制準拠状況
3. 実装・運用の複雑度
セットアップ所要時間
SMS
├─ Cognito 設定: 30 分
├─ ユーザー属性: 即座
└─ 合計: 1 時間
メール
├─ SES ドメイン認証: 1~2 日
├─ SES 本番申請: 2~3 日待機
├─ Cognito 設定: 1 時間
├─ Lambda設定(オプション): 2~3 時間
└─ 合計: 4~6 日
TOTP
├─ Cognito 設定: 15 分
├─ 認証アプリ選定: 30 分
├─ ユーザー教育: 1 時間
└─ 合計: 2 時間
インフラストラクチャ
4. コスト分析(月間認証数別)
直接コスト(¥換算、1ドル=120円で概算)
月間 1,000 件
月間 10,000 件
月間 100,000 件
間接コスト(人的リソース)
年間コスト(時給¥2,000で換算)
- SMS: 初期¥32,000 + 年間¥712,000 = ¥744,000
- メール: 初期¥80,000 + 年間¥848,000 = ¥928,000
- TOTP: 初期¥16,000 + 年間¥184,000 = ¥200,000
5. ユーザーシナリオ別対応
ログイン時の体験フロー
SMS ユーザー
1. ログイン画面に電話番号入力
2. "SMS送信しました"と表示 (1~30秒待機)
3. スマートフォンでSMS受信
4. 6桁コード確認
5. コード入力
完了 (所要時間: 30秒~2分)
メール ユーザー
1. ログイン画面に進む
2. "メール送信しました"と表示
3. メールアプリを開く
4. メールから6桁コード確認 (5秒~数分)
5. コード入力
完了 (所要時間: 1~5分)
TOTP ユーザー
1. ログイン画面に進む
2. 認証アプリ開く
3. 現在の6桁コード確認(待機なし)
4. コード入力
完了 (所要時間: 5~10秒)
リカバリシナリオ
SMS: 電話紛失・SIM失効時
問題: SMS受信不可
対応案:
① セカンダリ電話番号を設定 → 即時切り替え (推奨)
② ヘルプデスク: 属性を手動更新 (10分~1時間)
③ セキュリティ Q&A (別途実装必須)
復旧難度: ⭐⭐☆☆☆ (容易)
メール: メールアカウント侵害時
問題: メール受信不可 + MFA機能喪失
対応案:
① セカンダリメール設定 → 即時切り替え
② ヘルプデスク: 属性手動更新 + 属性の確認済みフラグ更新
⚠️ 重大: メール侵害時は全MFA失われる可能性
復旧難度: ⭐⭐⭐☆☆ (困難, セキュリティリスク高)
TOTP: 認証アプリ削除時
問題: TOTP生成不可
対応案:
① バックアップコード利用 (一度限り, 自分で実施可)
② バックアップコード紛失時: ヘルプデスク対応 (要新規セットアップ)
復旧難度: ⭐⭐⭐⭐☆ (困難, バックアップコード必須)
6. デバイス・属性管理の仕様
Cognito 属性の扱い
セカンダリ (バックアップ) オプション
7. ユースケース別推奨方式
ユースケース表
8. 実装・導入チェックリスト
SMS 導入前チェック
☐ 想定月間認証数を把握(コスト試算)
☐ キャリア別配送遅延時間を確認(timeout 設定用)
☐ 国別SMS配送ルール確認(中国・イランは困難)
☐ SMS未配送時の復旧フロー設計
☐ セカンダリ方式(再試行 or 他方式切り替え)決定
☐ ヘルプデスク体制構築
☐ 複数キャリアでテスト実施
☐ user_pool の phone_number 属性を必須にしない(柔軟性維持)
☐ 本格運用前の検証期間 (1週間以上)
メール導入前チェック
☐ SES ドメイン認証(SPF/DKIM/DMARC)準備完了
☐ SES 本番環境申請を実施(承認待ち)
☐ IAM ロール設定(Cognito → SES アクセス権)
☐ パスワードリセット統一の要否判断
└─ 必須の場合: Custom SMS Sender Lambda 設計
☐ KMS 暗号化キーの準備
☐ Bounce/Complaint レート監視体制構築
☐ 迷惑メール対策(ユーザーへのホワイトリスト登録依頼等)
☐ メール本文テンプレート作成
☐ 送信失敗時の再試行ロジック設計
☐ SES 送信レート制限把握(初期値: 14メール/秒)
☐ 本格運用前テスト期間 (2週間以上)
TOTP 導入前チェック
☐ 推奨認証アプリを複数選定(Google Authenticator, Authy等)
☐ バックアップコード生成・保管フロー設計
☐ バックアップコード紛失時の復旧プロセス確認
☐ 段階的導入スケジュール決定(全員必須 vs 任意)
☐ デバイス時刻ズレ対策(NTP設定確認)
☐ ユーザー教育資料準備(QRコード読み込み方法等)
☐ ヘルプデスク向けトレーニング
☐ 二台目TOTP(デバイス紛失時)の必須化検討
☐ バックアップコード再生成プロセスのテスト
☐ 本格運用前テスト期間 (1週間)
9. よくあるトラブルと対応
凡例: ★=多い/困難, ◯=中程度, ◎=少ない/容易
10. 最終判断マトリックス
あなたのプロジェクトはどれに当てはまる?
Q1. セキュリティが最優先か?
YES → Q2 へ
NO → Q3 へ
Q2. グローバル展開か?
YES → ⭐ TOTP を強く推奨
NO → TOTP 推奨 (メール次点)
Q3. コスト最適化が重要か?
YES → ⭐ TOTP 推奨 (スケール時)
or メール(コスト固定)
NO → Q4 へ
Q4. 導入期限は?
1週間以内 → SMS 推奨
2週間以内 → SMS or TOTP
1ヶ月以上 → TOTP 推奨
結論パターン:
┌────────────────────────────────┐
│ ⭐ TOTP: 全般的に推奨 │
│ 特に B2B / グローバル / 長期 │
│ │
│ ◎ メール: B2C国内 / 中期導入 │
│ 初期投資後、コスト固定が魅力 │
│
│ △ SMS: 短期ローンチ / 非テク層 │
│ セキュリティ・スケーラビリティ │
│ 面で課題あり │
└────────────────────────────────┘
参考文献
- AWS 公式ドキュメント
- Cognito MFA Configuration
- Custom SMS/Email Sender Lambda
- SES Event Publishing
- セキュリティ基準
- NIST SP 800-63-3: Authentication
- PCI-DSS v3.4: Multi-Factor Auth
- OWASP Authentication Cheat Sheet
- 業界ベストプラクティス
- AWS Well-Architected Framework
- AWS Security Best Practices
作成日: 2026年6月
対象バージョン: AWS Cognito (2026年5月以降)
更新予定: セキュリティアップデート時またはCognito仕様変更時
コメント