AWS Inspector Java SDK调用异常:nextToken有值但findingArns为空
AWS Inspector Java SDK调用问题排查与示例
问题分析
你遇到的hasFindingArns()返回true但findingArns()为空的情况,核心原因是默认ListFindings调用未指定筛选条件,AWS Inspector会返回空结果(即便存在nextToken),或者你的账号下当前无符合默认条件的扫描结果。另外nextToken仅为分页机制的一部分,无数据时也可能返回空或无效token。
关键参数补充
必须为ListFindingsRequest添加筛选条件,否则调用大概率返回空结果,核心必填/推荐参数:
filter: 指定扫描结果的筛选规则(如时间范围、严重程度、扫描目标ARN等)maxResults: 控制单页返回结果数量,避免分页异常nextToken: 仅当之前调用返回有效token时传入,用于获取下一批结果
修复后的完整示例代码
import software.amazon.awssdk.services.inspector.InspectorClient; import software.amazon.awssdk.services.inspector.model.ListFindingsRequest; import software.amazon.awssdk.services.inspector.model.ListFindingsResponse; import software.amazon.awssdk.services.inspector.model.FindingFilter; import java.time.Instant; public class InspectorFindingsExample { public static void main(String[] args) { try (InspectorClient inspectorClient = InspectorClient.create()) { // 构建筛选条件:获取最近7天的所有扫描结果 FindingFilter filter = FindingFilter.builder() .creationTimeRange(range -> range .beginDate(Instant.now().minusSeconds(7 * 24 * 3600)) .endDate(Instant.now())) .build(); String nextToken = null; do { ListFindingsRequest request = ListFindingsRequest.builder() .filter(filter) .maxResults(50) // 每页最多返回50条 .nextToken(nextToken) .build(); ListFindingsResponse response = inspectorClient.listFindings(request); // 处理返回结果 if (!response.findingArns().isEmpty()) { System.out.println("扫描结果ARN列表:"); response.findingArns().forEach(arn -> System.out.println("- " + arn)); } else { System.out.println("无符合条件的扫描结果"); } nextToken = response.nextToken(); } while (nextToken != null && !nextToken.isEmpty()); } catch (Exception e) { e.printStackTrace(); } } }
额外注意事项
- 确保IAM角色/用户拥有
inspector:ListFindings权限,且权限范围覆盖查询资源 - 若仍返回空结果,先通过AWS控制台确认Inspector存在已完成的扫描任务及结果
- 可按需调整筛选条件,比如添加
severities(CRITICAL、HIGH等)过滤特定严重级别的结果
内容的提问来源于stack exchange,提问作者JavaDuke
相关产品推荐
相关产品推荐

