

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 使用查询 AWS 资源的当前配置状态 AWS Config
<a name="querying-AWS-resources"></a>


|  | 
| --- |
| 为高级查询引入了预览功能，允许您使用生成式人工智能（生成人工智能）功能以通俗易懂的英语输入提示并将其转换为 ready-to-use查询格式。有关更多信息，请参阅[适用于高级查询的自然语言查询处理器](https://docs.aws.amazon.com/config/latest/developerguide/query-assistant.html)。 | 

您可以使用 AWS Config 根据单个账户和区域的配置属性或跨多个账户和区域查询 AWS 资源的当前配置状态。您可以对支持的资源列表中的当前 AWS 资源状态元数据执行基于属性的查询。 AWS Config 有关支持的资源类型列表的更多信息，请参阅[支持的高级查询资源类型](https://github.com/awslabs/aws-config-resource-schema/tree/master/config/properties/resource-types)。

*高级查询*提供了单一查询终端节点和查询语言以获得当前资源状态元数据，而无需执行特定于服务的描述 API 调用。您可以使用配置聚合器从一个中央账户跨多个账户和 AWS 地区运行相同的查询。

**Topics**
+ [功能](#query-features)
+ [查询组件](query-components.md)
+ [查询编辑器（控制台）](query-using-sql-editor-console.md)
+ [查询编辑器（AWS CLI）](query-using-sql-editor-cli.md)
+ [自然语言查询处理器](query-assistant.md)
+ [示例查询](example-query.md)
+ [关系查询示例](examplerelationshipqueries.md)
+ [限制](#query-limitations)
+ [CIDR 范围 notation/IP](#query-cidr-notation)
+ [一个数组中有多个属性](#array-property-query-behavior)
+ [区域支持](#query-regionsupport)

## 功能
<a name="query-features"></a>

AWS Config 使用结构化查询语言 (SQL) `SELECT` 语法的子集对当前配置项 (CI) 数据执行基于属性的查询和聚合。查询的复杂程度各不相同，从与标签 and/or 资源标识符的匹配到更复杂的查询，例如查看所有禁用版本控制的 Amazon S3 存储桶。这使您可以准确查询所需的当前资源状态，而无需执行 AWS 特定于服务的 API 调用。

它支持聚合函数，例如、`AVG``COUNT`、`MAX`、`MIN` 和 `SUM`。

您可以使用高级查询来实现：
+ 清单管理；例如，检索特定大小的 Amazon EC2 实例的列表。
+ 安全和运营智能；例如，检索已启用或禁用特定配置属性的资源的列表。
+ 成本优化；例如，确定未附加到任何 EC2 实例的 Amazon EBS 卷的列表。
+ 合规性数据；例如，检索所有合规包及其合规性状态的列表。

有关如何使用 AWS SQL 查询语言的信息，请参阅[什么是 SQL（结构化查询语言）？](https://aws.amazon.com/what-is/sql/) 。

## 限制
<a name="query-limitations"></a>

**注意**  
高级查询不支持查询尚未配置为由配置记录器记录的资源。 AWS Config 当发现资源但未配置为由配置记录器记录`configurationItemStatus`时，将在`ResourceNotRecorded`中创建配置项目 (CIs)。虽然聚合器会聚合这些数据 CIs，但高级查询不支持 CIs 使用进行`ResourceNotRecorded`查询。更新您的记录器设置以启用记录要查询的资源类型。

作为 SQL `SELECT` 的一个子集，查询语法有以下限制：
+ 查询中不支持、`ALL``AS`、`DISTINCT`、`FROM`、`HAVING`、`JOIN` 和 `UNION` 关键字。不支持 `NULL` 值查询。
+ 不支持在查询中使用复杂 `CASE` 语句来直接创建优先级字段。
+ 不支持查询第三方资源。使用高级查询检索的第三方资源的配置字段将设置为。`NULL`
+ 不支持使用 SQL 查询解包嵌套结构（例如标签）。
+ 不支持查询已删除资源。要发现已删除的资源，请参阅[查找发现的资源 AWS Config](https://docs.aws.amazon.com/config/latest/developerguide/looking-up-discovered-resources.html)。
+ 针对所有列的 `SELECT` 简写形式（也就是 `SELECT *`）将仅选择 CI 的顶级标量属性。返回的标量属性为、`accountId``awsRegion`、`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 范围行为
<a name="query-cidr-notation"></a>

CIDR 表示法将转换为 IP 范围以供搜索。

这意味着，`"="` 和 `"BETWEEN"` 会搜索任何包含所提供的 IP 的范围，而不是精确的范围。

要搜索精确的 IP 范围，您需要添加其他条件以排除在范围 IPs 之外。

**Example 搜索确切的 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'
```

**Example 搜索确切的 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 name="array-property-query-behavior"></a>

当针对对象数组内的多个属性执行查询时，将针对所有数组元素计算匹配项。**

例如，对于具有规则 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\$1complitive' 的规则（规则 B），因此该条件被评估为真。

第二个条件适用`configuration.configRuleList.configRuleName`于 R 中的所有元素configRuleList，因为 R 的规则（规则 A）为 configRuleName = 'A'，因此该条件被评估为真。由于两个条件均为 True，因此将返回 R。

## 区域支持
<a name="query-regionsupport"></a>

以下区域支持高级查询：

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/config/latest/developerguide/querying-AWS-resources.html)