AWS Lambda实现IAM密钥轮换时出现KeyError: 'action'错误排查
IAM密钥自动化轮换Lambda报错解决方案
报错根因
从你提供的日志可以看到,触发Lambda时传入的event参数为AWS默认测试模板内容:{'key1': 'value1', 'key2': 'value2', 'key3': 'value3'},不存在你代码中需要的action和username字段,因此触发KeyError。
你在EventBridge中配置的常量JSON参数,只有当EventBridge规则触发调用Lambda时才会传入,手动在Lambda控制台点击测试时,默认使用的是独立配置的测试事件,和EventBridge的配置无关。
解决方案
1. 配置正确的Lambda测试事件
- 进入Lambda函数详情页,点击右上角「测试」按钮旁的下拉箭头,选择「配置测试事件」
- 清空默认的hello-world模板内容,填入你在EventBridge中配置的参数:
{"action":"create","username":"secmanagert3"}
- 为测试事件命名后保存,后续使用该事件进行测试即可解决参数缺失的问题。
2. 补充代码参数校验逻辑
优化lambda_handler的健壮性,避免后续参数缺失时直接抛出崩溃级错误:
def lambda_handler(event, context): # 校验必填参数 required_params = ["action", "username"] for param in required_params: if param not in event: err_msg = f"缺少必填参数:{param}" print(err_msg) return { "statusCode": 400, "body": err_msg } # 原有业务逻辑 faction=event["action"] fuser_name=event["username"] if faction == "create": status = create_key(fuser_name) print(status) elif faction == "deactivate": status = deactive_key(fuser_name) print(status) elif faction == "delete": status = delete_key(fuser_name) print(status)
3. 验证EventBridge触发配置
如果手动测试正常,但EventBridge触发时报错,检查如下配置:
- EventBridge规则的目标选择的是对应Lambda函数,输入参数配置确实为「常量(JSON文本)」且内容正确
- Lambda函数的权限配置中,存在允许EventBridge规则调用的资源策略,正常情况下绑定EventBridge目标时AWS会自动生成该权限。
额外注意事项
你当前的代码注释掉了密钥时间差判断的逻辑,现在的实现是每次调用对应action就直接执行创建/停用/删除操作,不会校验密钥的生成时间,需要你补全时间判断逻辑,才能实现你要求的60天生成新密钥、80天停用旧密钥、90天删除旧密钥的周期需求。
内容的提问来源于stack exchange,提问作者RunRabbit
相关产品推荐
相关产品推荐

