You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否按用户组筛选AWS Cognito指标?获取分组及单个用户登录次数

AWS Cognito按用户组/单个用户统计登录次数的解决方案

AWS CloudWatch提供的原生Cognito指标确实只有整个用户池维度的登录数据,没有直接支持按用户组或单个用户统计的选项。要实现需求,只能通过自定义方案来达成,以下是两种可行思路:

一、借助Cognito触发器记录登录事件

利用Cognito的Post Authentication触发器,在用户成功登录后触发Lambda函数,完成登录数据的自定义记录:

  • 从触发器事件中提取用户ID、所属用户组(若存在)、登录时间等核心信息
  • 将这些数据写入Amazon DynamoDB表,表结构可设计为包含user_id、group_name、login_timestamp等字段
  • 后续通过DynamoDB的查询或扫描操作,就能按用户组聚合统计登录次数,或查询单个用户的登录记录

示例Lambda逻辑片段(Python):

import boto3
import time

dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table('CognitoLoginEvents')

def lambda_handler(event, context):
    user_id = event['request']['userAttributes']['sub']
    group_names = event['request']['groupConfiguration']['groups'] if 'groupConfiguration' in event['request'] else []
    login_time = int(time.time())
    
    table.put_item(
        Item={
            'user_id': user_id,
            'login_timestamp': login_time,
            'group_names': group_names
        }
    )
    
    return event

二、通过CloudTrail日志分析登录行为

AWS CloudTrail会记录Cognito的InitiateAuth和AdminInitiateAuth API调用事件,这些事件包含用户ID等关键信息:

  • 开启CloudTrail并确保覆盖Cognito相关事件的记录
  • 将CloudTrail日志导出到Amazon S3,再通过Amazon Athena创建表进行查询分析
  • 编写SQL语句按用户ID聚合统计登录次数;若要按用户组统计,需额外从Cognito导出用户组与用户的关联数据,再在Athena中完成关联查询

Athena查询示例(统计单个用户登录次数):

SELECT userIdentity.principalId AS user_id, COUNT(*) AS login_count
FROM cloudtrail_logs
WHERE eventName IN ('InitiateAuth', 'AdminInitiateAuth')
AND eventSource = 'cognito-idp.amazonaws.com'
AND errorCode IS NULL  # 仅统计成功登录事件
GROUP BY userIdentity.principalId
ORDER BY login_count DESC;

总结

目前Cognito没有原生支持按用户组或单个用户的登录次数统计,必须通过自定义事件记录或日志分析实现:

  • 触发器方案实时性高、数据结构灵活,但需要维护Lambda和DynamoDB资源
  • CloudTrail方案无需额外开发触发器,但日志存在延迟,且用户组关联需额外处理

内容的提问来源于stack exchange,提问作者Антон Чернобровкин

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 13:46:05