AWS Lambda Python解析Config触发事件JSON遇字符串索引错误求助
问题解决:解析JSON字符串并实现IAM用户自动删除
核心错误修复
你遇到的「string indices must be integers」错误,本质是**event['invokingEvent']是JSON格式的字符串,而非字典**,直接用字典索引访问自然会报错。解决方法是先用json.loads()将其解析为Python字典,再进行字段访问。
完整实现代码
以下是修正后的Lambda代码,包含用户身份校验、用户删除的完整逻辑:
import json import boto3 import logging # 配置日志 logger = logging.getLogger() logger.setLevel(logging.INFO) # 初始化IAM客户端 iam = boto3.client('iam') # 替换为你自己的IAM用户名(或ARN,根据校验需求调整) ALLOWED_CREATOR = 'your-own-iam-username' def lambda_handler(event, context): try: # 1. 解析invokingEvent字符串为字典 invoking_event = json.loads(event['invokingEvent']) # 2. 校验事件类型是否为IAM用户创建 change_type = invoking_event['configurationItemDiff']['changeType'] if change_type != 'CREATE': logger.info(f"非创建用户事件,类型为{change_type},跳过处理") return # 3. 获取新创建的IAM用户名 new_user_name = invoking_event['configurationItem']['resourceName'] logger.info(f"检测到新创建的IAM用户:{new_user_name}") # 4. 获取事件创建者身份(根据实际EventBridge事件结构调整) # 注:可根据你的事件结构从event['detail']或invokingEvent的其他字段提取更精确的身份信息 creator = invoking_event['configurationItem']['awsAccountId'] # 5. 校验创建者是否为允许的用户 if creator != ALLOWED_CREATOR: logger.warning(f"创建者{creator}非授权用户,将删除用户{new_user_name}") # 5.1 先移除用户所在的所有组 groups = iam.list_groups_for_user(UserName=new_user_name)['Groups'] for group in groups: iam.remove_user_from_group(GroupName=group['GroupName'], UserName=new_user_name) logger.info(f"已将用户{new_user_name}从组{group['GroupName']}移除") # 5.2 删除IAM用户 iam.delete_user(UserName=new_user_name) logger.info(f"已成功删除非授权用户{new_user_name}") else: logger.info(f"创建者为授权用户{ALLOWED_CREATOR},保留用户{new_user_name}") except Exception as e: logger.error(f"处理事件时出错:{str(e)}") raise e
关键说明
- JSON解析:必须通过
json.loads(event['invokingEvent'])将字符串转为字典,才能正常访问内部字段。 - 身份校验:示例中使用账号ID作为校验依据,实际可根据需求改用ARN、用户名等更精准的标识,需匹配你的EventBridge事件中携带的创建者信息。
- 用户删除步骤:删除IAM用户前需先将其从所有组中移除,否则会触发报错;若用户存在访问密钥、登录资料等,可额外添加
delete_access_key、delete_login_profile等逻辑完善清理流程。
关于SNS的疑问
不需要使用SNS:你的场景是Lambda直接由EventBridge触发并执行删除逻辑,SNS的作用是消息通知(如发送告警邮件),属于可选增强功能,而非实现核心需求的必要组件。如果需要在删除用户时收到通知,可以在Lambda中添加SNS客户端调用发送消息,但不影响核心逻辑的运行。
内容的提问来源于stack exchange,提问作者Pyg Argus
相关产品推荐
相关产品推荐

