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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 09:54:03