Skip to content

課題23: Cognito認証基盤 - 医療情報プラットフォームの認証システム

難易度: 🟡 中級


1. 分類情報

項目内容
難易度中級
カテゴリ認証・認可 / セキュリティ
処理タイプリアルタイム
使用IaCCloudFormation
想定所要時間4-5時間

2. ビジネスシナリオ

企業プロファイル: 〇〇株式会社

項目内容
企業名〇〇株式会社
業種医療情報プラットフォーム
設立2021年
従業員数30名
本社東京
事業医療機関向けオンライン診療プラットフォーム
ユーザー医師5000名、患者30万人、医療機関500施設

プラットフォーム概要

3種類のクライアントアプリケーション(患者アプリ、医師ポータル、管理画面)から認証基盤を経由してバックエンドAPIにアクセスする構成です。

認証要件

ユーザー種別認証方式セキュリティ要件
患者メール/パスワード + ソーシャルログインMFA推奨
医師メール/パスワード + 医師免許番号確認MFA必須
管理者メール/パスワード + IP制限MFA必須 + 監査ログ

規制要件

個人情報保護法・医療情報ガイドライン対応

1. 認証強度

  • 医療従事者は多要素認証必須
  • パスワードポリシー: 12文字以上、複雑性要件
  • セッションタイムアウト: 30分

2. アクセス制御

  • 役割ベースのアクセス制御(RBAC)
  • 最小権限の原則
  • 担当患者のみアクセス可能

3. 監査証跡

  • 全ログイン試行の記録
  • アクセスログの7年間保存
  • 異常アクセスの検知

4. データ保護

  • 通信の暗号化(TLS 1.2以上)
  • トークンの安全な管理
  • 個人情報の匿名化

ビジネス要件と KPI

セキュリティ目標

指標目標基準
MFA有効化率> 95%医療従事者は100%
不正ログイン検知< 1分自動ブロック
パスワード漏洩対応< 15分強制リセット
監査ログ保存期間7年規制要件

ユーザー体験目標

指標目標現状の課題
ログイン成功率> 99%-
ログイン時間< 3秒-
パスワードリセットセルフサービス現在は手動
サポート問い合わせ50%削減認証関連が多い

3. 学習目標

習得スキル

1. Amazon Cognito基礎

  • User Pool(ユーザー管理)
  • Identity Pool(一時認証情報)
  • 認証フロー(OAuth 2.0 / OIDC)
  • トークン(ID/Access/Refresh)

2. セキュリティ設定

  • パスワードポリシー
  • MFA(TOTP / SMS)
  • 高度なセキュリティ機能
  • Lambda トリガー

3. API Gateway統合

  • Cognito Authorizer
  • スコープベースアクセス制御
  • カスタム認可
  • APIキー管理

4. CloudFormationによる構築

  • User Pool定義
  • App Client設定
  • API Gateway統合
  • Lambda トリガー設定

4. 使用するAWSサービス

コアサービス

サービス用途重要度
Cognito User Poolユーザー認証管理★★★★★
Cognito Identity PoolAWS認証情報発行★★★☆☆
API GatewayAPI認可★★★★★
Lambdaカスタム処理★★★★☆
CloudFormationインフラ定義★★★★★

支援サービス

サービス用途重要度
CloudWatch Logs認証ログ★★★★☆
SNSMFA SMS送信★★★☆☆
SESメール送信★★★☆☆
WAFAPI保護★★★☆☆

5. 前提条件と事前準備

必要な環境

bash
# AWS CLI バージョン確認
aws --version
# aws-cli/2.x.x 以上

# Node.js(Lambda関数用)
node --version
# v18.x 以上

AWS環境の準備

bash
# 環境変数設定
export AWS_REGION=ap-northeast-1
export PROJECT_NAME=medconnect
export ENVIRONMENT=dev

# 作業ディレクトリ作成
mkdir -p ~/medconnect-cognito/{cfn,lambda,scripts}
cd ~/medconnect-cognito

6. アーキテクチャ設計

認証基盤全体像

コンポーネント役割
Patient App患者向けモバイルアプリ
Doctor Portal医師向けWebポータル
Admin Console管理者向けWeb画面
User Poolユーザー認証管理(患者・医師・管理者)
Usersユーザーデータ(患者・医師・管理者)
Groupsグループ管理(patients・doctors・admins)
MFA多要素認証(TOTP・SMS)
App Clientsアプリケーションクライアント設定
Lambda Triggersカスタム認証処理(PreSignUp・PostAuth)
Cognito AuthorizerAPIリクエストのトークン検証
API Endpoints保護されたAPIエンドポイント(/patients /doctors /admin)

7. トラブルシューティング演習

演習7-1: MFA設定の問題

状況: 医師ユーザーがMFAを設定しようとしているが、「MFA設定が利用できません」というエラーが表示される。

エラーメッセージ:

InvalidParameterException: User pool does not have MFA enabled

課題:

  1. MFAが有効になっていない原因を特定してください
  2. CloudFormationテンプレートを修正してください
  3. 既存ユーザーへの影響を確認してください

演習7-2: トークンの検証エラー

状況: 有効なはずのアクセストークンでAPI呼び出しをしているが、401 Unauthorizedエラーが返される。

エラーログ:

API Gateway execution log:
Unauthorized request: JWT token expired

Token exp claim: 1704067200 (2024-01-01 00:00:00)
Current time: 1704153600 (2024-01-02 00:00:00)

課題:

  1. トークン期限切れの原因を確認してください
  2. リフレッシュトークンによる更新処理を実装してください
  3. クライアント側のトークン管理を改善してください

8. 設計課題

設計課題8-1: ソーシャルログイン対応

課題: 患者向けアプリにGoogleとAppleでのソーシャルログインを追加してください。

要件:

  • Google / Apple Sign-Inの統合
  • 既存メールユーザーとのアカウントリンク
  • ソーシャルログインユーザーの属性マッピング
  • MFA要件の調整(ソーシャルログインはMFA不要)

成果物:

  1. Identity Provider設定
  2. 属性マッピング設計
  3. CloudFormationテンプレート

9. 発展課題

発展課題9-1: リスクベース認証

シナリオ: 不正アクセスを検知し、リスクレベルに応じて追加認証を要求する仕組みを実装したい。

技術要件:

  • Cognitoの高度なセキュリティ機能の活用
  • 異常なログインパターンの検出
  • リスクスコアに基づくMFA要求
  • ブロックリスト/許可リストの管理

成果物:

  1. リスク評価ロジック設計
  2. Lambda トリガー実装
  3. 監視ダッシュボード

10. 学習のまとめ

学習チェックリスト

Cognito基礎

  • User Pool / Identity Pool の違いを説明できる
  • OAuth 2.0 / OIDC フローを理解した
  • ID/Access/Refresh トークンの役割を説明できる
  • App Clientの設定ができる

セキュリティ

  • パスワードポリシーを適切に設定できる
  • MFAを設定できる
  • Lambda トリガーを実装できる
  • 監査ログを設定できる

API Gateway統合

  • Cognito Authorizerを設定できる
  • スコープベースのアクセス制御ができる
  • グループベースのアクセス制御ができる

CloudFormation

  • User Poolを定義できる
  • App Clientを定義できる
  • Lambda トリガーを統合できる

11. コスト見積もり

想定コスト(月額)

Cognito料金体系

  • 最初の50,000 MAU: 無料
  • 50,001〜100,000 MAU: $0.0055/MAU
  • 100,001以上: $0.0046/MAU
  • 高度なセキュリティ: $0.05/MAU

想定コスト(MAU 35,000)

項目数量月額(USD)
Cognito基本料金35,000 MAU$0 (無料枠内)
高度なセキュリティ35,000 MAU$1,750
SMS MFA5,000通/月$40
API Gateway1M リクエスト$3.50
Lambda500K 呼び出し$0.10
CloudWatch Logs10GB$5.00
小計約 $1,800(約 ¥270,000)

📝 補足:

  • 高度なセキュリティを無効にすると大幅にコスト削減可能
  • 開発環境では $5/月 程度

リソースのクリーンアップ

bash
# CloudFormationスタック削除
aws cloudformation delete-stack --stack-name medconnect-api-gateway-dev
aws cloudformation delete-stack --stack-name medconnect-cognito-dev

# 削除完了を待機
aws cloudformation wait stack-delete-complete --stack-name medconnect-cognito-dev

echo "Cleanup completed!"

次の課題: 課題24

前の課題: 課題22