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

如何通过AWS SNS批量发送Lambda生成的无MFA用户列表至邮箱

解决AWS Lambda批量发送未启用MFA用户列表到SNS的问题

修改后的完整代码

import boto3

def lambda_handler(event, context):
    # 初始化SNS资源
    sns_resource = boto3.resource('sns')
    TOPIC_ARN = 'sns_topic_arn'
    sns_topic = sns_resource.Topic(TOPIC_ARN)
    
    # 初始化IAM资源
    iam = boto3.resource('iam')
    users = iam.users.all()
    
    # 收集所有未启用MFA的用户
    non_mfa_users = []
    for user in users:
        has_mfa = any(user.mfa_devices.all())
        if not has_mfa:
            non_mfa_users.append(user.name)
    
    # 生成消息内容
    if non_mfa_users:
        message = "以下IAM用户未启用MFA:\n" + "\n".join([f"- {username}" for username in non_mfa_users])
    else:
        message = "当前没有未启用MFA的IAM用户。"
    
    # 一次性发送邮件
    sns_topic.publish(Message=message)
    return {
        'statusCode': 200,
        'body': f"已发送包含{len(non_mfa_users)}个未启用MFA用户的通知"
    }

关键修改说明

  • 新增non_mfa_users列表专门存储所有未启用MFA的用户名,避免循环结束后仅保留最后一个用户的信息
  • 把所有用户整理成易读的项目符号列表,生成统一的消息内容后一次性发送
  • 增加空列表判断,避免发送无意义的空内容通知

原代码问题分析

  • 循环外调用publish时,user变量指向的是循环最后一次迭代的用户,因此只会发送该用户的名字
  • 循环内调用publish会为每个用户单独发送一封邮件,不符合批量汇总发送的需求

内容的提问来源于stack exchange,提问作者Richard Alves de Oliveira

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 05:05:25