如何在AWS Config高级查询中获取非合规资源名称及原因
AWS Config高级查询:获取非合规资源详情及解决名称为空问题
核心问题分析
configuration.targetResourceName为空:该字段并非所有资源类型都支持,多数场景下AWS Config不会填充此值,需改用更可靠的字段获取资源名称。- 非合规原因字段:非合规原因存储在
evaluationResult.annotation中,这是规则评估后返回的说明信息。
修正后的查询语句
通用查询(兼容大多数资源类型)
SELECT resourceName AS 资源名称, resourceId AS 资源ID, resourceType AS 资源类型, configuration.complianceType AS 合规类型, evaluationResult.annotation AS 非合规原因 WHERE configuration.complianceType = 'NON_COMPLIANT'
针对特定资源类型的精准查询(如EC2实例/S3桶)
如果通用的resourceName仍为空,可针对资源类型从配置属性中提取名称,以EC2实例和S3桶为例:
SELECT CASE WHEN resourceType = 'AWS::EC2::Instance' THEN configuration.tags[?].value WHERE key='Name' WHEN resourceType = 'AWS::S3::Bucket' THEN configuration.name ELSE resourceName END AS 资源名称, resourceId AS 资源ID, resourceType AS 资源类型, configuration.complianceType AS 合规类型, evaluationResult.annotation AS 非合规原因 WHERE configuration.complianceType = 'NON_COMPLIANT'
关键说明
resourceName字段:这是AWS Config顶层的标准字段,绝大多数资源类型都会填充该值,比configuration.targetResourceName更可靠。evaluationResult.annotation:包含规则返回的非合规具体原因(比如"安全组允许0.0.0.0/0访问端口22"),若规则未配置返回原因,该字段可能为空。- CASE语句适配特定资源:部分资源的名称存储在配置属性的特定位置(比如EC2实例的Name标签),通过CASE语句针对性提取,可确保名称字段不为空。
内容的提问来源于stack exchange,提问作者Tina
相关产品推荐
相关产品推荐

