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

在AWS Lambda提取GuardDuty findings IP时遇类型错误求助

解决GuardDuty Findings提取IP时的TypeError问题

这个错误其实很好排查,咱们一步步拆解问题根源:

错误原因分析

你遇到的TypeError: list indices must be integers or slices, not str,核心问题是用字符串索引了列表对象:

  • GuardDuty的get_findings接口返回的Findings字段始终是一个列表(哪怕你只传入单个Finding ID),你直接用loadFindings['Findings']['Resource'],相当于给列表传了字符串索引,自然会报错。
  • 另外,每个Finding里的NetworkInterfaces也是列表(一个云资源可能绑定多个网卡),同样不能直接用字符串索引。

修复后的代码

我不仅帮你修复了IP提取的问题,还优化了冗余的代码逻辑(比如没必要反复转JSON、手动维护position变量):

import json
import boto3
from pprint import pprint

def lambda_handler(event, context):
    client = boto3.client('guardduty')
    Det_ID = '5ab1b6808e98faaabd947a01af9ed970'
    
    # 获取所有Finding ID,boto3直接返回字典,无需转JSON
    response = client.list_findings(DetectorId=Det_ID)
    id_list = response['FindingIds']
    
    findings_list = []
    # 直接遍历ID列表,不用手动维护position
    for finding_id in id_list:
        # 获取单个Finding详情
        all_findings = client.get_findings(
            DetectorId=Det_ID,
            FindingIds=[finding_id]
        )
        
        # 从Findings列表中取出第一个元素(因为我们只查了一个ID)
        finding = all_findings['Findings'][0]
        
        # 增加空值判断,避免部分Finding没有网卡或公网IP导致报错
        if 'Resource' in finding and 'NetworkInterfaces' in finding['Resource']:
            # 遍历每个网卡,提取公网IP
            for interface in finding['Resource']['NetworkInterfaces']:
                if 'PublicIp' in interface:
                    public_ip = interface['PublicIp']
                    print(f"Finding {finding_id} 的公网IP:{public_ip}")
                    findings_list.append({
                        'finding_id': finding_id,
                        'public_ip': public_ip
                    })
    
    return {
        'statusCode': 200,
        'body': json.dumps(findings_list)
    }

额外优化说明

  1. 去掉冗余的JSON转义:boto3返回的响应本身就是Python字典,不需要用json.dumps再json.loads,既浪费资源又没必要。
  2. 增加空值校验:不是所有GuardDuty Finding都包含资源网卡信息,加判断能避免意外的KeyError。
  3. 简化循环逻辑:直接遍历ID列表的元素,不用手动维护position变量,代码更简洁易读。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 10:14:48