如何编写AWS CLI查询以完整获取Inspector2检测结果的指定字段?
正确的AWS Inspector2 list-findings查询命令
要同时获取Severity、Title、Instance ID和资源类型,核心是在--query参数里正确遍历Inspector2返回的嵌套结构,同时兼容不同资源类型的字段路径差异(比如EC2实例和ECR镜像的资源细节存储路径不一样)。
可用命令示例
aws inspector2 list-findings --query 'findings[*].{Severity: findingDetails.severity, Title: findingDetails.title, InstanceId: resourceDetails.awsEc2InstanceDetails.instanceId || resourceDetails.awsEcrContainerImageDetails.repositoryUri, ResourceType: resourceType}'
参数说明
- Severity/Title:这两个字段固定在
findingDetails节点下,直接提取即可,不会因为资源类型变化而移位。 - InstanceId:不同资源的标识字段路径不同,用
||逻辑运算符覆盖多场景:- EC2实例取
awsEc2InstanceDetails.instanceId - ECR镜像取
awsEcrContainerImageDetails.repositoryUri
你可以根据自己的检测场景,添加其他资源类型的路径(比如S3桶的对应字段)。
- EC2实例取
- ResourceType:直接提取顶层的
resourceType字段,能明确区分资源类型(比如AWS_EC2_INSTANCE、AWS_ECR_CONTAINER_IMAGE)。
优化空值显示
如果不想让空字段显示None,可以用字符串拼接的方式替换空值,比如把InstanceId的提取逻辑改成:
InstanceId: join('', [resourceDetails.awsEc2InstanceDetails.instanceId, resourceDetails.awsEcrContainerImageDetails.repositoryUri])
这样空值会被替换成空字符串,输出更整洁。
示例输出
执行命令后会得到结构化结果,类似:
[ { "Severity": "CRITICAL", "Title": "CVE-2023-XXXX: libssl高危漏洞", "InstanceId": "i-0123456789abcdef0", "ResourceType": "AWS_EC2_INSTANCE" }, { "Severity": "HIGH", "Title": "CVE-2023-YYYY: Docker权限绕过风险", "InstanceId": "123456789012.dkr.ecr.us-east-1.amazonaws.com/my-app-repo", "ResourceType": "AWS_ECR_CONTAINER_IMAGE" } ]
内容的提问来源于stack exchange,提问作者techguy101
相关产品推荐
相关产品推荐

