AWS Config
开发人员指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

查询 AWS 资源的当前配置状态

AWS Config 允许您基于配置属性查询 AWS 资源的当前配置状态。您可以针对 AWS Config 支持的所有资源中的当前 AWS 资源状态元数据执行基于属性的临时查询。该高级查询功能提供了单一查询终端节点和强大的查询语言来获得当前资源状态元数据,而无需执行特定于服务的描述 API 调用。

AWS Config 使用结构化查询语言 (SQL) SELECT 语法的一部分来对当前配置项 (CI) 数据执行基于属性的查询和聚合。查询的复杂程度不同,既可以是简单的标签和/或资源标识符匹配,也可以是更复杂的查询,例如查看禁用了版本控制所有 Amazon S3 存储桶。这样,您就可以精确地查询您所需的当前资源状态,而无需执行特定于 AWS 服务的 API 调用。

您可以使用高级查询来实现:

  • 清单管理;例如,检索特定大小的 Amazon EC2 实例的列表。

  • 安全和运营智能;例如,检索已启用或禁用特定配置属性的资源的列表。

  • 成本优化;例如,确定未挂载到任何 EC2 实例的 Amazon EBS 卷的列表。

功能

查询语言支持基于 AWS Config 支持的所有 AWS 资源类型的 CI 属性查询 AWS 资源,包括配置数据、标签和关系。它是 SQL SELECT 命令的一个子集,带有一些限制,如下一节中所述。它支持聚合函数,例如 AVGCOUNTMAXMINSUM

限制

作为 SQL SELECT 的一个子集,查询语法有以下限制:

  • 不支持在查询中使用 FROMASJOINDISTINCTHAVINGALL 关键字。

  • 当针对对象数组内的多个属性执行查询时,将针对所有数组元素(即,将平展对象数组进行索引)计算匹配项。例如,如果数据库具有 { "a": [ { "b": 1, "c": 2, ... }, { "b": 3, "c": 4, ... } ] } 形式的文档,则类似 SELECT a WHERE a.b=1 AND a.c=4 的查询将会匹配此文档,即使没有单个数组元素具有指定的值 { "b": 1, "c": 4 }

  • 针对所有列的 SELECT 简写形式(也就是 SELECT *)将仅选择 CI 的顶级标量属性。返回的标量属性为 accountIdawsRegionarnavailabilityZoneconfigurationItemCaptureTimeresourceCreationTimeresourceIdresourceNameresourceTypeversion

  • 通配符限制:

    • 通配符仅支持属性值,但不支持属性键(例如支持 ...WHERE someKey LIKE 'someValue%',但不支持 ...WHERE 'someKey%' LIKE 'someValue%')。

    • 仅支持后缀通配符(例如,支持 ...LIKE 'AWS::EC2::%',但不支持 ...LIKE '%::EC2::Instance')。

    • 通配符匹配项的长度必须至少为 3 个字符(例如,不允许 ...LIKE 'ab%',但允许 ...LIKE 'abc%'

  • 聚合限制:

    • 聚合中的 GROUP BY 子句可能仅包含一个属性。

    • 聚合函数仅可接受一个参数或属性。

    • 聚合函数无法采用其他函数作为参数。

    • 对聚合查询不支持分页;最多返回 500 条结果。

    • 不支持聚合中的 HAVING 子句。

查询使用 SQL 查询编辑器进行查询(控制台)

先决条件

您必须具有针对 Config:SelectResource API 的权限。有关更多信息,请参阅 AWS Config API 参考中的 SelectResourceConfig API

您必须拥有针对 AWSConfigUserAccess IAM 托管策略的权限。有关更多信息,请参阅 授予 AWS Config 管理权限

  1. 登录 AWS 管理控制台 并通过以下网址打开 AWS Config 控制台:https://console.amazonaws.cn/config/

  2. 选择 Advanced query (高级查询) 来查询您的资源配置。

  3. Advanced query (高级查询) 页面上,执行以下任一操作:

    • 若要使用示例查询作为起点,请选择 Sample SQL queries (示例 SQL 查询),然后从示例 SQL 查询列表中选择适当的查询。

      此查询将显示在 SQL 查询编辑器中。如果需要,您可以编辑此查询。

    • 要创建您自己的查询,可在 SQL 查询编辑器中编辑您的查询。

      属性及其数据类型的更新列表在 GitHub 中提供。

  4. 选择 Run query (运行查询)。查询结果将显示在查询编辑器下方的表中。

    注意

    非聚合查询结果将会分页。通过向下滚动可自动检索下一页。

使用 SQL 查询编辑器进行查询 (CLI)

要在本地计算机上安装 AWS CLI,请参阅 AWS CLI 用户指南 中的安装 AWS CLI

使用 SQL 查询编辑器查询资源配置数据 (CLI)

  1. 打开命令提示符或终端窗口。

  2. 键入以下命令查询您的资源配置数据。

    aws configservice select-resource-config --expression "SELECT resourceId WHERE resourceType='AWS::EC2::Instance'"

    根据您的查询时,输出将如下所示:

    { "QueryInfo": { "SelectFields": [ { "Name": "resourceId" } ] }, "Results": [ "{\"resourceId\":\"ResourceId\"}", "{\"resourceId\":\"ResourceId\"}", "{\"resourceId\":\"ResourceId\"}", "{\"resourceId\":\"ResourceId\"}", "{\"resourceId\":\"ResourceId\"}", "{\"resourceId\":\"ResourceId\"}", "{\"resourceId\":\"ResourceId\"}" ] }

示例查询

用于列出具有 AMI ID ami-12345 的所有 EC2 实例的查询

SELECT resourceId, resourceType, configuration.instanceType, configuration.placement.tenancy, configuration.imageId, availabilityZone WHERE resourceType = 'AWS::EC2::Instance' AND configuration.imageId = 'ami-12345'

结果

{ "QueryInfo": { "SelectFields": [ { "Name": "resourceId" }, { "Name": "resourceType" }, { "Name": "configuration.instanceType" }, { "Name": "configuration.placement.tenancy" }, { "Name": "configuration.imageId" }, { "Name": "availabilityZone" } ] }, "Results": [ "{\"resourceId\":\"resourceid\",\"configuration\":{\"imageId\":\"ami-12345\",\"instanceType\":\"t2.micro\",\"placement\":{\"tenancy\":\"default\"}},\"availabilityZone\":\"us-west-2c\",\"resourceType\":\"AWS::EC2::Instance\"}", "{\"resourceId\":\"resourceid\",\"configuration\":{\"imageId\":\"ami-12345\",\"instanceType\":\"t2.micro\",\"placement\":{\"tenancy\":\"default\"}},\"availabilityZone\":\"us-west-2a\",\"resourceType\":\"AWS::EC2::Instance\"}", "{\"resourceId\":\"resourceid\",\"configuration\":{\"imageId\":\"ami-12345\",\"instanceType\":\"t2.micro\",\"placement\":{\"tenancy\":\"default\"}},\"availabilityZone\":\"us-west-2c\",\"resourceType\":\"AWS::EC2::Instance\"}", "{\"resourceId\":\"resourceid\",\"configuration\":{\"imageId\":\"ami-12345\",\"instanceType\":\"t1.micro\",\"placement\":{\"tenancy\":\"default\"}},\"availabilityZone\":\"us-west-2a\",\"resourceType\":\"AWS::EC2::Instance\"}", "{\"resourceId\":\"resourceid\",\"configuration\":{\"imageId\":\"ami-12345\",\"instanceType\":\"t2.micro\",\"placement\":{\"tenancy\":\"default\"}},\"availabilityZone\":\"us-west-2c\",\"resourceType\":\"AWS::EC2::Instance\"}", "{\"resourceId\":\"resourceid\",\"configuration\":{\"imageId\":\"ami-12345\",\"instanceType\":\"t2.micro\",\"placement\":{\"tenancy\":\"default\"}},\"availabilityZone\":\"us-west-2c\",\"resourceType\":\"AWS::EC2::Instance\"}", "{\"resourceId\":\"resourceid\",\"configuration\":{\"imageId\":\"ami-12345\",\"instanceType\":\"t2.micro\",\"placement\":{\"tenancy\":\"default\"}},\"availabilityZone\":\"us-west-2c\",\"resourceType\":\"AWS::EC2::Instance\"}" ] }

用于列出按资源的 AWS Config 规则合规性状态分组的资源计数的查询

SELECT configuration.complianceType, COUNT(*) WHERE resourceType = 'AWS::Config::ResourceCompliance' GROUP BY configuration.complianceType

结果

{ "QueryInfo": { "SelectFields": [ { "Name": "configuration.complianceType" }, { "Name": "COUNT(*)" } ] }, "Results": [ "{\"COUNT(*)\":163,\"configuration\":{\"complianceType\":\"NON_COMPLIANT\"}}", "{\"COUNT(*)\":2,\"configuration\":{\"complianceType\":\"COMPLIANT\"}}" ] }