Query dello stato di configurazione corrente delle risorse AWS - AWS Config

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Query dello stato di configurazione corrente delle risorse AWS

Presentazione di una funzionalità di anteprima per le query avanzate che consente di utilizzare le funzionalità di intelligenza artificiale generativa (AI generativa) per inserire istruzioni in un inglese semplice e convertirle in un formato di query. ready-to-use Per ulteriori informazioni, consulta Natural language interrogation processor for advanced query.

È possibile utilizzarle AWS Config per interrogare lo stato di configurazione corrente delle AWS risorse in base alle proprietà di configurazione per un singolo account e regione o per più account e regioni. È possibile eseguire query basate sulle proprietà sui metadati dello stato AWS delle risorse correnti su un elenco di risorse che supportano. AWS Config Per ulteriori risorse sull'elenco di tipi di risorsa supportati, consulta Tipi di risorsa supportati per query avanzate.

Le query avanzate forniscono un unico endpoint di query e un linguaggio di query per ottenere i metadati correnti sullo stato delle risorse senza eseguire chiamate API di descrizione specifiche del servizio. Puoi utilizzare gli aggregatori di configurazione per eseguire le stesse query da un account centrale su più account e regioni. AWS

Funzionalità

AWS Config utilizza un sottoinsieme della SELECT sintassi SQL (Structured Query Language) per eseguire query e aggregazioni basate sulle proprietà sui dati degli elementi di configurazione (CI) correnti. Le query variano in termini di complessità, da corrispondenze con identificatori di tag e/o risorse a query più complesse, come la visualizzazione di tutti i bucket Amazon S3 con il controllo delle versioni disabilitato. Ciò ti consente di eseguire esattamente la query dello stato corrente della risorsa di cui hai bisogno senza eseguire le chiamate API specifiche del servizio AWS .

Supporta le funzioni di aggregazione, ad esempio AVG, COUNT, MAX, MIN e SUM.

È possibile utilizzare le query avanzate per:

  • Gestione dell'inventario, ad esempio per recuperare un elenco di istanze Amazon EC2 di dimensioni specifiche.

  • Sicurezza e intelligenza operativa, ad esempio per recuperare un elenco di risorse che hanno una specifica proprietà di configurazione abilitata o disabilitata.

  • Ottimizzazione dei costi, ad esempio per identificare un elenco di volumi Amazon EBS che non sono collegati a nessuna istanza EC2.

  • Dati di conformità, ad esempio per recuperare un elenco di tutti i pacchetti di conformità e il relativo stato di conformità.

Per informazioni su come utilizzare AWS SQL Query Language, consulta What Is SQL (Structured Query Language)? .

Componenti della query

I componenti di query SQL SELECT sono indicati di seguito.

Riepilogo

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

Parametri

[ condizione WHERE ]

I filtri restituiscono risultati in base alla condition specificata.

[ GROUP BY property ]

Aggrega il set di risultati in gruppi di righe con valori corrispondenti per la proprietà specificata.

La clausola GROUP BY è applicabile alle aggregazioni.

[ ORDER BY property [ ASC | DESC ] [, property [ ASC | DESC ] ...] ]

Ordina un set di risultati da uno o più output properties.

Quando la clausola contiene più proprietà, il set di risultati viene ordinato in base alla prima property, quindi in base alla seconda property per le righe che hanno valori corrispondenti per la prima proprietà e così via.

Esempi

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

Query di esempio

Query to list all EC2 instances with AMI ID ami-12345

Query:

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

Risultati:

{ "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

Query:

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

Risultati:

{ "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

Query:

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

Risultati:

{ "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

Query:

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

Risultati:

{ "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

Query:

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'

Risultati:

{ "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" } ] } }

Esempi di query sulle relazioni

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'

O

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'

Limitazioni

Nota

L'interrogazione avanzata non supporta l'interrogazione di risorse che non sono state configurate per essere registrate dal registratore di configurazione. AWS Config crea elementi di configurazione (CI) con ResourceNotRecorded in configurationItemStatus quando una risorsa è stata scoperta ma non è configurata per essere registrata dal registratore di configurazione. Sebbene un aggregatore aggreghi questi CI, la query avanzata non supporta le query sui CI con ResourceNotRecorded. Aggiorna le impostazioni del registratore per abilitare la registrazione dei tipi di risorse su cui eseguire le query.

Come sottoinsieme di SQL SELECT, la sintassi di query ha le limitazioni seguenti:

  • In una query non sono supportate le parole chiave ALL, AS, DISTINCT, FROM, HAVING, JOIN e UNION. Le query con valore NULL non sono supportate.

  • Non sono supportate query su risorse di terze parti. Per le risorse di terze parti recuperate utilizzando query avanzate, il campo di configurazione sarà impostato su NULL.

  • Non sono supportate strutture annidate (come i tag) da decomprimere con le query SQL.

  • La notazione CIDR viene convertita in intervalli IP per la ricerca. Ciò significa che "=" e "BETWEEN" cercano qualsiasi intervallo che includa l'IP fornito, anziché uno esatto. Per cercare un intervallo IP esatto, è necessario aggiungere ulteriori condizioni per escludere gli IP al di fuori dell'intervallo. Ad esempio, per cercare 10.0.0.0/24 e solo quel blocco IP, puoi eseguire:

    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'

    Per 192.168.0.2/32, puoi effettuare la ricerca in modo simile:

    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'
  • Quando esegui query su più proprietà all'interno di un array di oggetti, le corrispondenze vengono calcolate su tutti gli elementi dell'array. Ad esempio, per una risorsa R con le regole A e B, la risorsa è conforme alla regola A ma non conforme alla regola B. La risorsa R viene archiviata come:

    { configRuleList: [ { configRuleName: 'A', complianceType: 'compliant' }, { configRuleName: 'B', complianceType: 'non_compliant' } ] }

    La risorsa R verrà restituita da questa query:

    SELECT configuration WHERE configuration.configRuleList.complianceType = 'non_compliant' AND configuration.configRuleList.configRuleName = 'A'

    La prima condizione configuration.configRuleList.complianceType = 'non_compliant' viene applicata a TUTTI gli elementi in R.configRuleList, poiché R ha una regola (regola B) con complianceType = 'non_compliant', la condizione viene valutata come vera. La seconda condizione configuration.configRuleList.configRuleName viene applicata a TUTTI gli elementi in R.configRuleList, poiché R ha una regola (regola A) con configRuleName = 'A', la condizione viene valutata come vera. Poiché entrambe le condizioni sono true, verrà restituita la risorsa R.

  • Il formato abbreviato SELECT per tutte le colonne (cioè SELECT *) seleziona solo le proprietà scalari di livello superiore di un elemento di configurazione. Le proprietà scalari restituite sono accountId, awsRegion, arn, availabilityZone, configurationItemCaptureTime, resourceCreationTime, resourceId, resourceName, resourceType e version.

  • Limitazioni dei caratteri jolly:

    • I caratteri jolly sono supportati solo per i valori di proprietà e non per le chiavi di proprietà (ad esempio, ...WHERE someKey LIKE 'someValue%' è supportato, mentre ...WHERE 'someKey%' LIKE 'someValue%' non è supportato).

    • Supporto solo per caratteri jolly suffisso (ad esempio, ...LIKE 'AWS::EC2::%' e ...LIKE 'AWS::EC2::_' sono supportati, mentre ...LIKE '%::EC2::Instance' e ...LIKE '_::EC2::Instance' non sono supportati).

    • Le corrispondenze con caratteri jolly devono contenere almeno tre caratteri (ad esempio, ...LIKE 'ab%' e ...LIKE 'ab_' non sono consentiti, mentre ...LIKE 'abc%' e ...LIKE 'abc_' sono consentiti).

    Nota

    Anche il carattere "_" (trattino basso singolo) viene considerato come un carattere jolly.

  • Limitazioni delle aggregazioni:

    • Le funzioni di aggregazione possono accettare un solo argomento o una sola proprietà.

    • Le funzioni di aggregazione non possono accettare altre funzioni come argomenti.

    • GROUP BY con una clausola ORDER BY che fa riferimento a funzioni aggregate può contenere una sola proprietà.

    • Per tutte le altre aggregazioni, le clausole GROUP BY possono contenere fino a tre proprietà.

    • L'impaginazione è supportata per tutte le query aggregate tranne quando la clausola ORDER BY ha una funzione di aggregazione. Ad esempio, GROUP BY X, ORDER BY Y non funziona se Y è una funzione di aggregazione.

    • Nessun supporto per le clausole HAVING nelle aggregazioni.

  • Limitazioni degli identificatori non corrispondenti:

    Gli identificatori non corrispondenti sono proprietà che hanno la stessa ortografia ma lettere maiuscole e minuscole diverse. La query avanzata non supporta l'elaborazione di query che contengono identificatori non corrispondenti. Per esempio:

    • Due proprietà con la stessa ortografia ma con lettere maiuscole e minuscole diverse (configuration.dbclusterIdentifier e configuration.dBClusterIdentifier).

    • Due proprietà in cui una proprietà è un sottoinsieme dell'altra e hanno lettere maiuscole e minuscole diverse (configuration.ipAddress e configuration.ipaddressPermissions).

Supporto nelle regioni

Le query avanzate sono supportate nelle seguenti regioni geografiche:

Nome della regione Regione Endpoint Protocollo
US East (Ohio) us-east-2 config.us-east-2.amazonaws.com HTTPS
US East (N. Virginia) us-east-1 config.us-east-1.amazonaws.com HTTPS
Stati Uniti occidentali (California settentrionale) us-west-1 config.us-west-1.amazonaws.com HTTPS
US West (Oregon) us-west-2 config.us-west-2.amazonaws.com HTTPS
Africa (Cape Town) af-south-1 config.af-south-1.amazonaws.com HTTPS
Asia Pacifico (Hong Kong) ap-east-1 config.ap-east-1.amazonaws.com HTTPS
Asia Pacific (Hyderabad) ap-south-2 config.ap-south-2.amazonaws.com HTTPS
Asia Pacifico (Giacarta) ap-southeast-3 config.ap-southeast-3.amazonaws.com HTTPS
Asia Pacifico (Melbourne) ap-southeast-4 config.ap-southeast-4.amazonaws.com HTTPS
Asia Pacifico (Mumbai) ap-south-1 config.ap-south-1.amazonaws.com HTTPS
Asia Pacifico (Osaka-Locale) ap-northeast-3 config.ap-northeast-3.amazonaws.com HTTPS
Asia Pacifico (Seoul) ap-northeast-2 config.ap-northeast-2.amazonaws.com HTTPS
Asia Pacifico (Singapore) ap-southeast-1 config.ap-southeast-1.amazonaws.com HTTPS
Asia Pacifico (Sydney) ap-southeast-2 config.ap-southeast-2.amazonaws.com HTTPS
Asia Pacifico (Tokyo) ap-northeast-1 config.ap-northeast-1.amazonaws.com HTTPS
Canada (Centrale) ca-central-1 config.ca-central-1.amazonaws.com HTTPS
Canada occidentale (Calgary) ca-west-1 config.ca-west-1.amazonaws.com HTTPS
Europa (Francoforte) eu-central-1 config.eu-central-1.amazonaws.com HTTPS
Europa (Irlanda) eu-west-1 config.eu-west-1.amazonaws.com HTTPS
Europa (Londra) eu-west-2 config.eu-west-2.amazonaws.com HTTPS
Europa (Milano) eu-south-1 config.eu-south-1.amazonaws.com HTTPS
Europa (Parigi) eu-west-3 config.eu-west-3.amazonaws.com HTTPS
Europa (Spagna) eu-south-2 config.eu-south-2.amazonaws.com HTTPS
Europa (Stoccolma) eu-north-1 config.eu-north-1.amazonaws.com HTTPS
Europa (Zurigo) eu-central-2 config.eu-central-2.amazonaws.com HTTPS
Israele (Tel Aviv) il-central-1 config.il-central-1.amazonaws.com HTTPS
Medio Oriente (Bahrein) me-south-1 config.me-south-1.amazonaws.com HTTPS
Medio Oriente (Emirati Arabi Uniti) me-central-1 config.me-central-1.amazonaws.com HTTPS
Sud America (São Paulo) sa-east-1 config.sa-east-1.amazonaws.com HTTPS
AWS GovCloud (Stati Uniti orientali) us-gov-east-1 config.us-gov-east-1.amazonaws.com HTTPS
AWS GovCloud (Stati Uniti occidentali) us-gov-west-1 config.us-gov-west-1.amazonaws.com HTTPS