

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 使用 查詢 AWS 資源的目前組態狀態 AWS Config
<a name="querying-AWS-resources"></a>


|  | 
| --- |
| 介紹進階查詢的預覽功能，可讓您使用生成式人工智慧 （生成式 AI) 功能以純英文輸入提示，並將其轉換為ready-to-use查詢格式。如需詳細資訊，請參閱[進階查詢的自然語言查詢處理器](https://docs.aws.amazon.com/config/latest/developerguide/query-assistant.html)。 | 

您可以使用 根據單一帳戶和區域的組態屬性 AWS Config ，或跨多個帳戶和區域來查詢 AWS 資源的目前組態狀態。您可以在 AWS Config 支援的資源清單中，針對目前的 AWS 資源狀態中繼資料執行屬性型查詢。如需所支援資源類型清單的詳細資訊，請參閱《[進階查詢支援的資源類型](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 表示法/IP 範圍](#query-cidr-notation)
+ [陣列中的多個屬性](#array-property-query-behavior)
+ [區域支援](#query-regionsupport)

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

AWS Config 使用結構化查詢語言 `SELECT` (SQL) 語法的子集，對目前的組態項目 (CI) 資料執行屬性型查詢和彙總。查詢的複雜性範圍從標籤和/或資源識別符的比對，到更複雜的查詢，例如檢視所有已停用版本控制的 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>

**注意**  
進階查詢不支援查詢未設定為由組態記錄器記錄的資源。當資源被發現但未設定為由組態記錄器記錄`configurationItemStatus`時， 會在 `ResourceNotRecorded`中使用 AWS Config 建立組態項目 (CIs)。雖然彙總工具會彙總這些 CI，但進階查詢不支援查詢具有 `ResourceNotRecorded` 的 CI。請更新您的記錄器設定，以啟用要查詢之資源類型的記錄。

做為 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'`)。
  + 萬用字元符合項目的長度必須至少為三個字元 (例如，允許 `...LIKE 'abc%'` 和 `...LIKE 'abc_'`，但不允許 `...LIKE 'ab%'` 和 `...LIKE 'ab_'`)。
**注意**  
系統也會將 "`_`" (單底線) 視為萬用字元。
+ 彙總限制：
  + 彙總函數只能接受單一引數或屬性。
  + 彙總函數無法將其他函數視為引數。
  + 具有 `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 表示法/IP 範圍行為
<a name="query-cidr-notation"></a>

CIDR 標記法會轉換為 IP 範圍以供搜尋。

這意味著 `"="` 和 `"BETWEEN"` 會搜尋包含所提供 IP 的任何範圍，而不是確切的 IP。

若要搜尋確切的 IP 範圍，您需要新增其他條件以排除範圍以外的 IP。

**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 中的 ALL 元素，因為 R 具有 complianceType = 'non\$1compliant' 的規則 （規則 B)，因此會將條件評估為 true。

第二個條件`configuration.configRuleList.configRuleName`會套用至 R.configRuleList 中的 ALL 元素，因為 R 具有 configRuleName = 'A' 的規則 （規則 A)，因此條件會評估為 true。由於這兩個條件都為 True，R 將被傳回。

## 區域支援
<a name="query-regionsupport"></a>

下列區域支援進階查詢：

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