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

如何获取AWS IAM用户的最后活动时间Last ActivityTime

AWS IAM控制台「最后活动时间」字段获取方式

client.list_users()返回的PasswordLastUsed字段本身就不适合用来判断用户最后活动时间:它只会记录用户使用根密码/IAM用户密码登录控制台的时间,完全覆盖不了访问密钥调用API、联邦身份登录、角色临时凭证访问这类无密码访问场景,统计逻辑和控制台展示的「Last activity」列不一致。

IAM控制台的最后活动列,底层对接的是IAM Access Advisor的统计数据,统计范围覆盖用户所有类型的访问行为:控制台密码登录、AK/SK接口调用、联邦/角色身份的访问记录,取的是用户最近一次访问任意AWS服务的时间。

你可以通过以下两种方式拿到和控制台完全一致的数据:

方式1:调用Access Advisor官方接口(推荐)

不需要自己拉取全量CloudTrail日志做统计,直接调用IAM内置的Access Advisor接口即可,数据和控制台同源:

  1. 调用generate_service_last_accessed_details接口传入目标用户ARN,生成查询任务拿到任务ID
    对应boto3示例代码:
    import boto3
    iam = boto3.client('iam')
    # 替换为待查询的IAM用户ARN
    user_arn = "arn:aws:iam::你的账号ID:user/用户名"
    job_resp = iam.generate_service_last_accessed_details(Arn=user_arn)
    job_id = job_resp['JobId']
    
  2. 轮询调用get_service_last_accessed_details查询任务状态,直到任务完成
    import time
    while True:
        result = iam.get_service_last_accessed_details(JobId=job_id)
        if result['JobStatus'] == 'COMPLETED':
            break
        time.sleep(2)
    
  3. 遍历返回的各服务访问记录,取所有LastAuthenticated字段的最大值,就是该用户的最后活动时间,和控制台展示值完全匹配
    last_activity = None
    for svc in result['ServicesLastAccessed']:
        if 'LastAuthenticated' not in svc:
            continue
        svc_last_time = svc['LastAuthenticated']
        if not last_activity or svc_last_time > last_activity:
            last_activity = svc_last_time
    print(last_activity)
    

方式2:CloudTrail日志查询(适用更长时间范围场景)

Access Advisor默认仅保留最近400天的访问记录,如果需要查询更早的活动数据,可以开启CloudTrail管理事件审计,过滤userIdentity.arn为目标用户ARN的所有事件,取eventTime字段的最大值即可,该方式可覆盖你CloudTrail日志留存周期内的全部访问行为。

注意事项

  • Access Advisor的数据不是实时生成的,通常存在最多4小时的同步延迟,和控制台展示的延迟规则一致
  • 做闲置用户清理、权限审计时,不要用PasswordLastUsed作为活跃判断依据,会漏掉所有非密码方式的访问,导致误判

AWS IAM控制台最后活动列截图

内容的提问来源于stack exchange,提问作者eugercek

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 20:42:16