メインコンテンツへスキップ

認証フロー

AWSops は Amazon Cognito + Lambda@Edge + CloudFront の組み合わせで認証を処理します。

Cognito の構成

項目設定
User Poolawsops-user-pool (セルフサインアップ無効)
ログイン方式メールアドレスまたはユーザー名
パスワードポリシー8 文字以上、大文字/小文字 + 数字必須
OAuthAuthorization Code Grant、OpenID/Email/Profile
トークン有効期間1 時間
ログイン UIカスタムログインページ (/awsops/login) — Cognito Hosted UI 不使用
認証フローUSER_PASSWORD_AUTH (InitiateAuth) via /api/auth

認証フローの詳細

  1. ブラウザが /awsops にアクセス
  2. CloudFront が viewer-request イベントで Lambda@Edge を呼び出し
  3. Lambda@Edge が awsops_token Cookie を確認 → なし/期限切れ
  4. カスタムログインページ /awsops/login へ 302 リダイレクト (Cognito Hosted UI ではない)
  5. ユーザーがメールアドレス/パスワードを入力 → POST /awsops/api/auth (action: login)
  6. サーバーが Cognito InitiateAuth (USER_PASSWORD_AUTH) を呼び出し → IdToken を取得
  7. awsops_token を HttpOnly・Secure・SameSite=Lax の Cookie として設定 (1 時間)
  8. 以降、認証済みリクエストが CloudFront → ALB → EC2 へ転送される
  1. ブラウザが awsops_token Cookie とともにアクセス
  2. Lambda@Edge が JWT を検証 → 有効
  3. リクエストがそのまま CloudFront → ALB → EC2 へ転送される

Lambda@Edge

項目設定
リージョンus-east-1 (Lambda@Edge の必須要件)
ランタイムPython 3.12 (デプロイハンドラー; CDK スタブは Node.js 20)
トリガーCloudFront viewer-request
機能awsops_token JWT Cookie の検証、未認証時は /awsops/login へリダイレクト
ログアウト

HttpOnly Cookie は JavaScript (document.cookie) では削除できません。AWSops は POST /api/auth を通じてサーバーサイドで Cookie を削除します。

関連ページ