如何从AWS SSM合规查询结果中提取Status为COMPLIANT的字段?
问题原因
你当前代码仅访问了合规项列表的第一个元素L1[0],因此只能拿到第一个合规项的状态。需要遍历整个合规项列表,同时增加条件判断筛选出Status为COMPLIANT的条目即可。
修正后代码
import boto3 client = boto3.client('ec2') ssm_client = boto3.client('ssm') reservations = client.describe_instances().get("Reservations", []) instances = [] INSTANCE_ID_KEY = "InstanceId" # 提取所有实例信息 for reservation in reservations: instances.extend(reservation.get("Instances", [])) # 存储所有状态为COMPLIANT的合规项 compliant_items = [] for instance in instances: instance_id = instance[INSTANCE_ID_KEY] ssm_resp = ssm_client.list_compliance_items( ResourceIds=[instance_id], ResourceTypes=['ManagedInstance'] ) all_items = ssm_resp.get('ComplianceItems', []) # 遍历筛选合规项 for item in all_items: if item.get('Status') == 'COMPLIANT': compliant_items.append(item) # 按需打印需要的字段,示例如下 print(f"实例ID: {instance_id}, 合规类型: {item['ComplianceType']}, 条目ID: {item['Id']}, 状态: {item['Status']}") # 可后续对compliant_items做其他处理 print(f"\n共查询到 {len(compliant_items)} 条状态为COMPLIANT的合规条目")
补充说明
- 代码增加了空列表兜底逻辑,避免接口返回为空时触发索引报错
- 如果合规项数量较多需要分页,可判断接口返回的
NextToken参数,循环调用接口拉取全量数据后再筛选 - 所有符合要求的合规条目都存储在
compliant_items列表中,可直接遍历提取你需要的具体字段
内容的提问来源于stack exchange,提问作者Dexter
相关产品推荐
相关产品推荐

