Cognito Email Restriction - knpy/yuka-app GitHub Wiki

Cognito Email制限設定(Pre-sign-up Lambda)

概要

特定のメールアドレスのみがサインアップできるように制限するLambda関数の設定。

セットアップ手順

1. Lambda関数の作成

exports.handler = async (event) => {
    console.log('Pre-sign-up trigger event:', JSON.stringify(event, null, 2));
    
    // 許可されたメールアドレスのリスト
    const allowedEmails = [
        '[email protected]',
        // 必要に応じて追加
    ];
    
    const userEmail = event.request.userAttributes.email;
    
    if (!allowedEmails.includes(userEmail)) {
        throw new Error(`アクセスが許可されていないメールアドレスです: ${userEmail}`);
    }
    
    // 許可されている場合はそのまま通す
    return event;
};

2. Lambda関数の設定

  • Function name: cognito-pre-signup-email-restriction
  • Runtime: Node.js 18.x
  • Handler: index.handler

3. Lambda実行ロールの設定

基本のLambda実行権限に加えて、必要に応じてCloudWatch Logsの権限を付与。

4. Cognito User Poolでのトリガー設定

  1. Cognito User Pool コンソールにアクセス
  2. User pool propertiesLambda triggers
  3. Pre sign-up に作成したLambda関数を設定

5. 設定の確認

  • テスト用の許可されたメールアドレスでサインアップテスト
  • 許可されていないメールアドレスでのサインアップ拒否をテスト

環境変数での管理(推奨)

Lambda関数で環境変数を使用して許可メールアドレスを管理:

const allowedEmails = process.env.ALLOWED_EMAILS ? 
    process.env.ALLOWED_EMAILS.split(',').map(email => email.trim()) : 
    ['[email protected]'];

環境変数 ALLOWED_EMAILS に以下のように設定:

トラブルシューティング

よくある問題

  1. Lambda関数が実行されない

    • User Poolのトリガー設定を確認
    • Lambda関数の権限設定を確認
  2. エラーメッセージが表示されない

    • CloudWatch Logsでエラーログを確認
    • エラーメッセージの形式を確認
  3. 許可されたユーザーもブロックされる

    • メールアドレスの大文字小文字を確認
    • 空白文字の確認

セキュリティ考慮事項

  • 許可メールアドレスのリストは環境変数で管理
  • CloudWatch Logsでの機密情報ログ出力に注意
  • 定期的な許可リストの見直し
⚠️ **GitHub.com Fallback** ⚠️