本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
查询的当前配置状态 Amazon 资源与 Amazon Config
您可以使用 Amazon Config 根据单个账户和区域的配置属性或跨多个账户和区域查询 Amazon 资源的当前配置状态。您可以对支持的资源列表中的当前 Amazon 资源状态元数据执行基于属性的查询。 Amazon Config 有关支持的资源类型列表的更多信息,请参阅支持的资源类型。
高级查询提供了单一查询终端节点和查询语言以获得当前资源状态元数据,而无需执行特定于服务的描述 API 调用。您可以使用配置聚合器从一个中央账户跨多个账户和 Amazon 地区运行相同的查询。
功能
Amazon Config 使用结构化查询语言 (SQL) SELECT 语法的子集对当前配置项 (CI) 数据执行基于属性的查询和聚合。查询的复杂程度各不相同,从与标签 and/or 资源标识符的匹配到更复杂的查询,例如查看所有禁用版本控制的 Amazon S3 存储桶。这使您可以准确查询所需的当前资源状态,而无需执行 Amazon 特定于服务的 API 调用。
它支持聚合函数,例如、AVGCOUNT、MAX、MIN 和 SUM。
您可以使用高级查询来实现:
-
清单管理;例如,检索特定大小的 Amazon EC2 实例的列表。
-
安全和运营智能;例如,检索已启用或禁用特定配置属性的资源的列表。
-
成本优化;例如,确定未附加到任何 EC2 实例的 Amazon EBS 卷的列表。
-
合规性数据;例如,检索所有合规包及其合规性状态的列表。
有关如何使用 Amazon SQL 查询语言的信息,请参阅什么是 SQL(结构化查询语言)?
限制
注意
高级查询不支持查询尚未配置为由配置记录器记录的资源。 Amazon Config 当发现资源但未配置为由配置记录器记录configurationItemStatus时,将在ResourceNotRecorded中创建配置项目 (CI)。虽然聚合器会聚合这些 CI,但高级查询不支持查询具有 ResourceNotRecorded 的 CI。更新您的记录器设置以启用记录要查询的资源类型。
作为 SQL SELECT 的一个子集,查询语法有以下限制:
-
查询中不支持、
ALLAS、DISTINCT、FROM、HAVING、JOIN和UNION关键字。不支持NULL值查询。 -
不支持在查询中使用复杂
CASE语句来直接创建优先级字段。 -
不支持查询第三方资源。 Third-party 使用高级查询检索的资源的配置字段将设置为
NULL。 -
不支持使用 SQL 查询解包嵌套结构(例如标签)。
-
不支持查询已删除资源。要发现已删除的资源,请参阅查找发现的资源 Amazon Config。
-
针对所有列的
SELECT简写形式(也就是SELECT *)将仅选择 CI 的顶级标量属性。返回的标量属性为、accountIdawsRegion、arn、availabilityZone、configurationItemCaptureTime、resourceCreationTime、resourceId、resourceName、resourceType和version。 -
通配符限制:
-
通配符仅支持属性值,但不支持属性键(例如支持,
...WHERE someKey LIKE 'someValue%'但不支持...WHERE 'someKey%' LIKE 'someValue%')。 -
仅支持后缀通配符(例如,支持
...LIKE 'AWS::EC2::%'和,...LIKE 'AWS::EC2::_'但不支持...LIKE '%::EC2::Instance'和...LIKE '_::EC2::Instance')。 -
通配符匹配项的长度必须至少为 3 个字符(例如,不允许
...LIKE 'ab%'和,...LIKE 'ab_'但允许...LIKE 'abc%'和...LIKE 'abc_')。
注意
“
_”(单下划线)也被视为通配符。 -
-
聚合限制:
-
聚合函数仅可接受一个参数或属性。
-
聚合函数无法采用其他函数作为参数。
-
带有引用聚合函数的
ORDER BY子句的GROUP BY只能包含一个属性。 -
对于所有其他聚合,
GROUP BY子句最多可以包含三个属性。 -
除
ORDER BY子句具有聚合函数外,所有聚合查询都支持分页。例如,如果Y是聚合函数,则GROUP BY X, ORDER BY Y不起作用。 -
不支持聚合中的
HAVING子句。
-
-
不匹配的标识符限制:
不匹配的标识符是拼写相同但大小写不同(大写和小写)的属性。高级查询不支持处理包含不匹配标识符的查询。例如:
-
两个拼写完全相同但大小写不同的属性(
configuration.dbclusterIdentifier和configuration.dBClusterIdentifier)。 -
两个属性,其中一个属性是另一个属性的子集,并且它们的大小写不同(
configuration.ipAddress和configuration.ipaddressPermissions)。
-
高级查询的 CIDR notation/IP 范围行为
CIDR 表示法将转换为 IP 范围以供搜索。
这意味着,"=" 和 "BETWEEN" 会搜索任何包含所提供的 IP 的范围,而不是精确的范围。
要搜索精确的 IP 范围,您需要添加其他条件以排除该范围之外的 IP。
例正在搜索确切的 CIDR 块 10.0.0。 0/24
SELECT * WHERE resourceType = 'AWS::EC2::SecurityGroup' AND configuration.ipPermissions.ipRanges BETWEEN '10.0.0.0' AND '10.0.0.255' AND NOT configuration.ipPermissions.ipRanges < '10.0.0.0' AND NOT configuration.ipPermissions.ipRanges > '10.0.0.255'
例正在搜索确切的 IP 地址 192.168.0。 2/32
SELECT * WHERE resourceType = 'AWS::EC2::SecurityGroup' AND configuration.ipPermissions.ipRanges = '192.168.0.2' AND NOT configuration.ipPermissions.ipRanges > '192.168.0.2' AND NOT configuration.ipPermissions.ipRanges < '192.168.0.2'
数组中的多个属性在高级查询中的表现
当针对对象数组内的多个属性执行查询时,将针对所有数组元素计算匹配项。
例如,对于具有规则 A 和 B 的资源 R,该资源符合规则 A 但不符合规则 B。资源 R 存储为:
{ configRuleList: [ { configRuleName: 'A', complianceType: 'compliant' }, { configRuleName: 'B', complianceType: 'non_compliant' } ] }
此查询将返回 R:
SELECT configuration WHERE configuration.configRuleList.complianceType = 'non_compliant' AND configuration.configRuleList.configRuleName = 'A'
第一个条件configuration.configRuleList.complianceType =
'non_compliant'适用于中的所有元素 R.configRuleList,因为 R 有一条 complianceType = 'non_complitive' 的规则(规则 B),因此该条件被评估为真。
第二个条件configuration.configRuleList.configRuleName适用于中的所有元素 R.configRuleList,因为 R 有一条配置RuleName为 'A' 的规则(规则 A),因此该条件被评估为真。由于两个条件均为 True,因此将返回 R。
支持的资源类型
并非所有 Amazon Config 支持的资源类型都可以在高级查询中查询。此外,配置项目中的某些字段不可搜索。无法搜索的字段可能会在结果中返回并用于查询的SELECT部分,但不能用于查询的其他部分,例如WHEREGROUP BY、或。ORDER BY
有关可搜索字段和资源类型的完整列表,请参阅高级查询支持的资源类型
区域支持
以下区域支持高级查询:
| 区域名称 | 区域 | 端点 | 协议 |
|---|---|---|---|
| 中国(北京) | cn-north-1 | config.cn-north-1.amazonaws.com.cn | HTTPS |
| 中国(宁夏) | cn-northwest-1 | config.cn-northwest-1.amazonaws.com.cn | HTTPS |