查詢 AWS 資源目前的組態狀態 - AWS Config

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

查詢 AWS 資源目前的組態狀態

介紹進階查詢的預覽功能,可讓您使用生成人工智慧 (生成 AI) 功能以純英文輸入提示,並將其轉換為 ready-to-use 查詢格式。如需詳細資訊,請參閱進階查詢的自然語言查詢處理器

您可以使 AWS Config 用根據單一帳戶和區域或跨多個帳戶和區域的組態屬性來查詢 AWS 資源的目前組態狀態。您可以跨支援的資源清單,針對目前的 AWS 資源狀態中繼資料執行屬性型查詢。 AWS Config 如需所支援資源類型清單的詳細資訊,請參閱《進階查詢支援的資源類型》。

進階查詢提供單一查詢端點和查詢語言,以取得目前的資源狀態中繼資料,而無需執行服務特定的描述 API 呼叫。您可以使用組態彙總工具,從中央帳戶跨多個帳戶和 AWS 區域執行相同的查詢。

功能

AWS Config 使用結構化查詢語言 (SQL) SELECT 語法的子集,對目前的設定項目 (CI) 資料執行以屬性為基礎的查詢和彙總。查詢的複雜性範圍從標籤和/或資源識別碼的比對,到更複雜的查詢,例如檢視所有已停用版本控制的 Amazon S3 儲存貯體。這能讓您不需要執行 AWS 服務特定 API 呼叫,即可查詢所需的目前資源狀態。

它支援 AVGCOUNTMAXMINSUM 等​彙總函數。

您可以將進階查詢用於:

  • 庫存管理 (例如:擷取特定大小的 Amazon EC2 執行個體清單)。

  • 安全性和營運情報 (例如,擷取啟用或停用特定組態屬性的資源清單)。

  • 成本最佳化 (例如,識別未連接到任何 EC2 執行個體的 Amazon EBS 磁碟區清單)。

  • 合規資料;例如,擷取所有一致性套件及其合規狀態的清單。

如需如何使用 AWS SQL 查詢語言的詳細資訊,請參閱何謂 SQL (結構化查詢語言)?

查詢元件

SQL SELECT 查詢元素如以下所示。

概要

SELECT property [, ...] [ WHERE condition ] [ GROUP BY property ] [ ORDER BY property [ ASC | DESC ] [, property [ ASC | DESC ] ...] ]

參數

[ WHERE condition ]

根據您指定的 condition 篩選結果。

[GROUP BY 屬性]

將結果集彙總成資料列群組,並加上特定屬性的符合值。

該組 BY 子句適用於聚合。

[ ORDER BY 屬性 [ ASC | DESC ] [, 屬性 [ ASC | DESC ] ...] ]

依一或多個輸出 properties 排序結果集。

當子句包含多個屬性時,結果集會根據第一個 property 排序,再將值符合第一個屬性的資料列根據第二個 property 排序,以此類推。

範例

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

查詢範例

Query to list all EC2 instances with AMI ID 阿美

查詢:

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\"}" ] }
Query for count of resources grouped by their AWS Config rules compliance status

查詢:

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\"}}" ] }
Query for the compliance status of AWS Conformance packs

查詢:

SELECT resourceId, resourceName, resourceType, configuration.complianceType WHERE resourceType = 'AWS::Config::ConformancePackCompliance'

結果:

{ "QueryInfo": { "SelectFields": [ { "Name": "resourceId" }, { "Name": "resourceName" }, { "Name": "resourceType" }, { "Name": "configuration.complianceType" } ] }, "Results": [ "{\"resourceId\":\"conformance-pack-conformance-pack-ID\",\"configuration\":{\"complianceType\":\"COMPLIANT\"},\"resourceName\":\"MyConformancePack1\",\"resourceType\":\"AWS::Config::ConformancePackCompliance\"}", "{\"resourceId\":\"conformance-pack-conformance-pack-ID\",\"configuration\":{\"complianceType\":\"NON_COMPLIANT\"},\"resourceName\":\"MyConformancePack2\",\"resourceType\":\"AWS::Config::ConformancePackCompliance\"}", "{\"resourceId\":\"conformance-pack-conformance-pack-ID\",\"configuration\":{\"complianceType\":\"NON_COMPLIANT\"},\"resourceName\":\"MyConformancePack3\",\"resourceType\":\"AWS::Config::ConformancePackCompliance\"}" ] }
Query to get counts of AWS resources grouped by account ID

查詢:

aws configservice select-aggregate-resource-config --expression "SELECT COUNT(*), accountId group by accountId" --configuration-aggregator-name my-aggregator

結果:

{ "Results": [ "{\"COUNT(*)\":2407,\"accountId\":\"accountId\"}", "{\"COUNT(*)\":726,\"accountId\":\"accountId\"}" ], "QueryInfo": { "SelectFields": [ { "Name": "COUNT(*)" }, { "Name": "accountId" } ] } }
Query to list all EC2 volumes that are not in use

查詢:

SELECT resourceId, accountId, awsRegion, resourceType, configuration.volumeType, configuration.size, resourceCreationTime, tags, configuration.encrypted, configuration.availabilityZone, configuration.state.value WHERE resourceType = 'AWS::EC2::Volume' AND configuration.state.value = 'available'

結果:

{ "Results": [ "{\"accountId\":\"accountId\",\"resourceId\":\"vol-0174de9c962f6581c\",\"awsRegion\":\"us-west-2\",\"configuration\":{\"volumeType\":\"gp2\",\"encrypted\":false,\"size\":100.0,\"state\":{\"value\":\"available\"},\"availabilityZone\":\"us-west-2a\"},\"resourceCreationTime\":\"2020-02-21T07:39:43.771Z\",\"tags\":[],\"resourceType\":\"AWS::EC2::Volume\"}", "{\"accountId\":\"accountId\",\"resourceId\":\"vol-0cbeb652a74af2f8f\",\"awsRegion\":\"us-east-1\",\"configuration\":{\"volumeType\":\"gp2\",\"encrypted\":false,\"size\":100.0,\"state\":{\"value\":\"available\"},\"availabilityZone\":\"us-east-1a\"},\"resourceCreationTime\":\"2020-02-21T07:28:40.639Z\",\"tags\":[],\"resourceType\":\"AWS::EC2::Volume\"}" "{\"accountId\":\"accountId\",\"resourceId\":\"vol-0a49952d528ec8ba2\",\"awsRegion\":\"ap-south-1\",\"configuration\":{\"volumeType\":\"gp2\",\"encrypted\":false,\"size\":100.0,\"state\":{\"value\":\"available\"},\"availabilityZone\":\"ap-south-1a\"},\"resourceCreationTime\":\"2020-02-21T07:39:31.800Z\",\"tags\":[],\"resourceType\":\"AWS::EC2::Volume\"}", ], "QueryInfo": { "SelectFields": [ { "Name": "resourceId" }, { "Name": "accountId" }, { "Name": "awsRegion" }, { "Name": "resourceType" }, { "Name": "configuration.volumeType" }, { "Name": "configuration.size" }, { "Name": "resourceCreationTime" }, { "Name": "tags" }, { "Name": "configuration.encrypted" }, { "Name": "configuration.availabilityZone" }, { "Name": "configuration.state.value" } ] } }

範例關係查詢

Find EIPs related to an EC2 instance
SELECT resourceId WHERE resourceType = 'AWS::EC2::EIP' AND relationships.resourceId = 'i-abcd1234'
Find EIPs related to an EC2 network interface
SELECT resourceId WHERE resourceType = 'AWS::EC2::EIP' AND relationships.resourceId = 'eni-abcd1234'
Find EC2 instances and network interfaces related to a security group
SELECT resourceId WHERE resourceType IN ('AWS::EC2::Instance', 'AWS::EC2::NetworkInterface') AND relationships.resourceId = 'sg-abcd1234'

SELECT resourceId WHERE resourceType = 'AWS::EC2::Instance' AND relationships.resourceId = 'sg-abcd1234' SELECT resourceId WHERE resourceType = 'AWS::EC2::NetworkInterface' AND relationships.resourceId = 'sg-abcd1234'
Find EC2 instances, network ACLs, network interfaces and route tables related to a subnet
SELECT resourceId WHERE resourceType IN ('AWS::EC2::Instance', 'AWS::EC2::NetworkACL', 'AWS::EC2::NetworkInterface', 'AWS::EC2::RouteTable') AND relationships.resourceId = 'subnet-abcd1234'
Find EC2 instances, internet gateways, network ACLs, network interfaces, route tables, subnets and security groups related to a VPC
SELECT resourceId WHERE resourceType IN ('AWS::EC2::Instance', 'AWS::EC2::InternetGateway', 'AWS::EC2::NetworkACL', 'AWS::EC2::NetworkInterface', 'AWS::EC2::RouteTable', 'AWS::EC2::Subnet', 'AWS::EC2::SecurityGroup') AND relationships.resourceId = 'vpc-abcd1234'
Find EC2 route tables related to a VPN gateway
SELECT resourceId WHERE resourceType = 'AWS::EC2::RouteTable' AND relationships.resourceId = 'vgw-abcd1234'

限制

注意

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

做為 SQL SELECT 的子集,其查詢語法有下列限制:

  • 查詢中不支援 ALLASDISTINCTFROMHAVINGJOINUNION 關鍵字。不支援 NULL 值查詢。

  • 不支援查詢第三方資源。使用進階查詢擷取的第三方資源,會將組態欄位設定為 NULL

  • 不支援使用 SQL 查詢解壓縮的巢狀結構 (例如標籤)。

  • CIDR 標記法會轉換為 IP 範圍以供搜尋。這意味著 "=""BETWEEN" 會搜尋包含所提供 IP 的任何範圍,而不是確切的 IP。若要搜尋確切的 IP 範圍,您需要新增其他條件以排除範圍以外的 IP。例如,若要搜尋 10.0.0.0/24 並且只搜尋該 IP 區塊,您可以執行下列動作:

    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'

    對於 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.config 中的所有元素RuleList,因為 R 具有符合性類型 = '不符合' 的規則(規則 B),因此條件評估為真。第二個條件適用configuration.configRuleList.configRuleName於 R.config 中的所有元素RuleList,因為 R 具有 configRuleName = 'A' 的規則(規則 A),條件評估為真。由於這兩個條件都為 True,R 將被傳回。

  • SELECT 所有欄位速記 (也就是 SELECT *) 只會選取 CI 最上層的純量屬性。傳回的純量屬性為 accountIdawsRegionarnavailabilityZoneconfigurationItemCaptureTimeresourceCreationTimeresourceIdresourceNameresourceTypeversion

  • 萬用字元限制:

    • 只支援對屬性值使用萬用字元,對屬性金鑰不支援 (例如:支援 ...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.dbclusterIdentifierconfiguration.dBClusterIdentifier)。

    • 兩個屬性,其中一個屬性是另一個屬性的子集,並且具有不同的大小寫 (configuration.ipAddressconfiguration.ipaddressPermissions)。

區域支援

下列區域支援進階查詢:

區域名稱 區域 端點 通訊協定
美國東部 (俄亥俄) us-east-2 config.us-east-2.amazonaws.com HTTPS
美國東部 (維吉尼亞北部) us-east-1 config.us-east-1.amazonaws.com HTTPS
美國西部 (加州北部) us-west-1 config.us-west-1.amazonaws.com HTTPS
美國西部 (奧勒岡) us-west-2 config.us-west-2.amazonaws.com HTTPS
非洲 (開普敦) af-south-1 config.af-south-1.amazonaws.com HTTPS
亞太區域 (香港) ap-east-1 config.ap-east-1.amazonaws.com HTTPS
亞太區域 (海德拉巴) ap-south-2 config.ap-south-2.amazonaws.com HTTPS
亞太區域 (雅加達) ap-southeast-3 config.ap-southeast-3.amazonaws.com HTTPS
亞太區域 (墨爾本) ap-southeast-4 config.ap-southeast-4.amazonaws.com HTTPS
亞太區域 (孟買) ap-south-1 config.ap-south-1.amazonaws.com HTTPS
亞太區域 (大阪) ap-northeast-3 config.ap-northeast-3.amazonaws.com HTTPS
亞太區域 (首爾) ap-northeast-2 config.ap-northeast-2.amazonaws.com HTTPS
亞太區域 (新加坡) ap-southeast-1 config.ap-southeast-1.amazonaws.com HTTPS
亞太區域 (雪梨) ap-southeast-2 config.ap-southeast-2.amazonaws.com HTTPS
亞太區域 (東京) ap-northeast-1 config.ap-northeast-1.amazonaws.com HTTPS
加拿大 (中部) ca-central-1 config.ca-central-1.amazonaws.com HTTPS
加拿大西部 (卡加利) ca-west-1 config.ca-west-1.amazonaws.com HTTPS
歐洲 (法蘭克福) eu-central-1 config.eu-central-1.amazonaws.com HTTPS
歐洲 (愛爾蘭) eu-west-1 config.eu-west-1.amazonaws.com HTTPS
歐洲 (倫敦) eu-west-2 config.eu-west-2.amazonaws.com HTTPS
歐洲 (米蘭) eu-south-1 config.eu-south-1.amazonaws.com HTTPS
歐洲 (巴黎) eu-west-3 config.eu-west-3.amazonaws.com HTTPS
歐洲 (西班牙) eu-south-2 config.eu-south-2.amazonaws.com HTTPS
歐洲 (斯德哥爾摩) eu-north-1 config.eu-north-1.amazonaws.com HTTPS
歐洲 (蘇黎世) eu-central-2 config.eu-central-2.amazonaws.com HTTPS
以色列 (特拉維夫) il-central-1 config.il-central-1.amazonaws.com HTTPS
中東 (巴林) me-south-1 config.me-south-1.amazonaws.com HTTPS
中東 (阿拉伯聯合大公國) me-central-1 config.me-central-1.amazonaws.com HTTPS
南美洲 (聖保羅) sa-east-1 config.sa-east-1.amazonaws.com HTTPS
AWS GovCloud (美國東部) us-gov-east-1 config.us-gov-east-1.amazonaws.com HTTPS
AWS GovCloud (美國西部) us-gov-west-1 config.us-gov-west-1.amazonaws.com HTTPS