Interrogation de l'état de configuration actuel des ressources AWS - AWS Config

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Interrogation de l'état de configuration actuel des ressources AWS

Présentation d'une fonctionnalité d'aperçu pour les requêtes avancées qui vous permet d'utiliser les fonctionnalités de l'intelligence artificielle générative (IA générative) pour saisir des instructions dans un anglais simple et les convertir dans un format de ready-to-use requête. Pour plus d’informations, consultez Processeur de requêtes en langage naturel pour les requêtes avancées.

Vous pouvez l'utiliser AWS Config pour interroger l'état de configuration actuel des AWS ressources en fonction des propriétés de configuration d'un seul compte et d'une seule région ou de plusieurs comptes et régions. Vous pouvez effectuer des requêtes basées sur les propriétés par rapport aux métadonnées de l'état actuel des AWS ressources dans une liste de ressources prises en charge. AWS Config Pour plus d'informations sur la liste des types de ressources pris en charge, consultez Types de ressources pris en charge pour les requêtes avancées.

Les requêtes avancées fournissent un point de terminaison de requête unique et un langage de requête pour obtenir les métadonnées de l'état actuel des ressources sans effectuer d'appels d'API de description spécifiques au service. Vous pouvez utiliser des agrégateurs de configuration pour exécuter les mêmes requêtes à partir d'un compte central sur plusieurs comptes et AWS régions.

Fonctionnalités

AWS Config utilise un sous-ensemble de la SELECT syntaxe du langage de requête structuré (SQL) pour effectuer des requêtes basées sur les propriétés et des agrégations sur les données des éléments de configuration (CI) actuels. La complexité des requêtes varie, allant de correspondances avec des identifiants de balises et/ou de ressources à des requêtes plus complexes, telles que l'affichage de tous les compartiments Amazon S3 dont le versionnement est désactivé. Cela vous permet d'obtenir exactement l'état actuel de la ressource dont vous avez besoin sans effectuer d'appels d'API spécifiques au service AWS .

Il prend en charge les fonctions d'agrégation telles que AVG, COUNT, MAX, MIN et SUM.

Vous pouvez utiliser une requête avancée pour :

  • la gestion des stocks : par exemple, pour récupérer la liste des instances Amazon EC2 d'une taille particulière.

  • la sécurité et l'intelligence opérationnelle : par exemple, pour récupérer la liste des ressources dont une propriété de configuration spécifique est activée ou désactivée.

  • l'optimisation des coûts : par exemple, pour dresser la liste des volumes Amazon EBS qui ne sont attachés à aucune instance EC2.

  • Données de conformité ; par exemple, pour récupérer une liste de tous vos packs de conformité et de leur statut de conformité.

Pour plus d'informations sur l'utilisation du langage de requête AWS SQL, voir Qu'est-ce que le langage SQL (langage de requête structuré) ? .

Composants d'une requête

Les composants de la requête SQL SELECT sont les suivants.

Résumé

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

Paramètres

[ Condition WHERE ]

Filtre les résultats en fonction de la condition que vous spécifiez.

[ GROUP BY property ]

Agrège le jeu de résultats en groupes de lignes avec des valeurs correspondantes pour la propriété donnée.

La clause GROUP BY s'applique aux agrégations.

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

Trie un jeu de résultats par une ou properties de sortie.

Lorsque la clause contient plusieurs propriétés, le jeu de résultats est trié selon le premier élément property, puis selon le deuxième élément property pour les lignes ayant des valeurs correspondantes pour la première propriété, et ainsi de suite.

Exemples

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

Exemples de requêtes

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

Interrogation :

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

Résultats :

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

Interrogation :

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

Résultats :

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

Interrogation :

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

Résultats :

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

Interrogation :

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

Résultats :

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

Interrogation :

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'

Résultats :

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

Exemples de requêtes relationnelles

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'

OU

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'

Limites

Note

La requête avancée ne prend pas en charge l'interrogation de ressources qui n'ont pas été configurées pour être enregistrées par l'enregistreur de configuration. AWS Config crée des éléments de configuration (CI) ResourceNotRecorded dans le configurationItemStatus lorsqu'une ressource a été découverte mais n'est pas configurée pour être enregistrée par l'enregistreur de configuration. Bien qu'un agrégateur agrège ces CI, les requêtes avancées ne permettent pas d'interroger les CI avec ResourceNotRecorded. Mettez à jour les paramètres de votre enregistreur afin d'activer l'enregistrement des types de ressources que vous souhaitez interroger.

En tant que sous-ensemble de la commande SQL SELECT, la syntaxe de requête présente les limitations suivantes :

  • Pas de prise en charge pour les mots clés ALL, AS, DISTINCT, FROM, HAVING, JOIN et UNION mots clés dans une requête. Les requêtes de valeur NULL ne sont pas prises en charge.

  • Pas de prise en charge des requêtes sur des ressources tierces. Les ressources tierces récupérées à l'aide de requêtes avancées auront le champ de configuration défini comme NULL.

  • Pas de prise en charge des structures imbriquées (comme les balises) à décompresser avec des requêtes SQL.

  • La notation CIDR est convertie en plages d'adresses IP pour la recherche. Cela signifie que "=" et "BETWEEN" recherchent toute plage qui inclut l'adresse IP fournie, plutôt qu'une adresse exacte. Pour rechercher une plage exacte d'adresses IP, vous devez ajouter des conditions supplémentaires afin d'exclure les adresses IP situées en dehors de cette plage. Par exemple, pour rechercher 10.0.0.0/24 et uniquement ce bloc d'adresses IP, vous pouvez procéder comme suit :

    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'

    Pour 192.168.0.2/32, vous pouvez effectuer une recherche similaire :

    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'
  • Lors de l'interrogation de plusieurs propriétés dans un tableau d'objets, les correspondances sont calculées sur les éléments de tableau. Par exemple, pour une ressource R avec des règles A et B, la ressource est conforme à la règle A, mais non conforme à la règle B. La ressource R est stockée sous la forme suivante :

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

    R sera renvoyée par cette requête :

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

    La première condition configuration.configRuleList.complianceType = 'non_compliant' est appliquée à TOUS les éléments de R.configRuleList, car R possède une règle (règle B) avec ComplianceType = 'non_compliant', la condition est évaluée comme vraie. La deuxième condition configuration.configRuleList.configRuleName est appliquée à TOUS les éléments de R.configRuleList, car R a une règle (règle A) avec configRuleName = « A », la condition est évaluée comme vraie. Comme les deux conditions sont vraies, R sera renvoyée.

  • La commande SELECT raccourcie permettant de sélectionner toutes les colonnes (à savoir SELECT *) sélectionne uniquement les propriétés scalaires de niveau supérieur d'un élément de configuration. Les propriétés scalaires renvoyées sont accountId, awsRegion, arn, availabilityZone, configurationItemCaptureTime, resourceCreationTime, resourceId, resourceName, resourceType et version.

  • Limitations propres aux caractères génériques :

    • Les caractères génériques sont pris en charge uniquement pour les valeurs de propriété et non pour les clés de propriété (par exemple, ...WHERE someKey LIKE 'someValue%' est pris en charge, mais ...WHERE 'someKey%' LIKE 'someValue%' n'est pas pris en charge).

    • Prise en charge uniquement des caractères génériques en suffixe (par exemple, ...LIKE 'AWS::EC2::%' et ...LIKE 'AWS::EC2::_' sont pris en charge, mais ...LIKE '%::EC2::Instance' et ...LIKE '_::EC2::Instance' ne sont pas pris en charge).

    • Les correspondances d'un caractère générique doivent compter au moins trois caractères (par exemple, ...LIKE 'ab%' et ...LIKE 'ab_' ne sont pas autorisés, alors que ...LIKE 'abc%' et ...LIKE 'abc_' le sont).

    Note

    Le « _ » (tiret du bas simple) est également traité comme un caractère générique.

  • Limitations propres aux agrégations :

    • Les fonctions d'agrégation peuvent accepter un seul argument ou une seule propriété.

    • Les fonctions d'agrégation ne peuvent pas accepter d'autres fonctions comme arguments.

    • GROUP BY avec une clause ORDER BY faisant référence à des fonctions d'agrégation ne peut contenir qu'une seule propriété.

    • Pour toutes les autres agrégations, les clauses GROUP BY peuvent contenir jusqu'à trois propriétés.

    • La pagination est prise en charge pour toutes les requêtes agrégées, sauf lorsque la clause ORDER BY comporte une fonction d'agrégation. Par exemple, GROUP BY X, ORDER BY Y ne fonctionne pas si Y est une fonction d'agrégation.

    • Pas de prise en charge des clauses HAVING dans les agrégations.

  • Limites des identifiants non concordants :

    Les identifiants non concordants sont des propriétés qui ont la même orthographe mais une casse différente (majuscules et minuscules). La requête avancée ne permet pas de traiter les requêtes qui contiennent des identifiants non concordants. Par exemple :

    • Deux propriétés qui ont exactement la même orthographe, mais une casse différente (configuration.dbclusterIdentifier et configuration.dBClusterIdentifier).

    • Deux propriétés où l'une est un sous-ensemble de l'autre et qui ont une casse différente (configuration.ipAddress et configuration.ipaddressPermissions).

Prise en charge de la région

Les requêtes avancées sont prises en charge dans les régions suivantes :

Nom de la région Région Point de terminaison Protocole
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
USA Ouest (Californie du Nord) us-west-1 config.us-west-1.amazonaws.com HTTPS
US West (Oregon) us-west-2 config.us-west-2.amazonaws.com HTTPS
Afrique (Le Cap) af-south-1 config.af-south-1.amazonaws.com HTTPS
Asie-Pacifique (Hong Kong) ap-east-1 config.ap-east-1.amazonaws.com HTTPS
Asie-Pacifique (Hyderabad) ap-south-2 config.ap-south-2.amazonaws.com HTTPS
Asie-Pacifique (Jakarta) ap-southeast-3 config.ap-southeast-3.amazonaws.com HTTPS
Asie-Pacifique (Melbourne) ap-southeast-4 config.ap-southeast-4.amazonaws.com HTTPS
Asia Pacific (Mumbai) ap-south-1 config.ap-south-1.amazonaws.com HTTPS
Asie-Pacifique (Osaka) ap-northeast-3 config.ap-northeast-3.amazonaws.com HTTPS
Asia Pacific (Seoul) ap-northeast-2 config.ap-northeast-2.amazonaws.com HTTPS
Asie-Pacifique (Singapour) ap-southeast-1 config.ap-southeast-1.amazonaws.com HTTPS
Asia Pacific (Sydney) ap-southeast-2 config.ap-southeast-2.amazonaws.com HTTPS
Asia Pacific (Tokyo) ap-northeast-1 config.ap-northeast-1.amazonaws.com HTTPS
Canada (Central) ca-central-1 config.ca-central-1.amazonaws.com HTTPS
Canada Ouest (Calgary) ca-west-1 config.ca-west-1.amazonaws.com HTTPS
Europe (Francfort) eu-central-1 config.eu-central-1.amazonaws.com HTTPS
Europe (Irlande) eu-west-1 config.eu-west-1.amazonaws.com HTTPS
Europe (Londres) eu-west-2 config.eu-west-2.amazonaws.com HTTPS
Europe (Milan) eu-south-1 config.eu-south-1.amazonaws.com HTTPS
Europe (Paris) eu-west-3 config.eu-west-3.amazonaws.com HTTPS
Europe (Espagne) eu-south-2 config.eu-south-2.amazonaws.com HTTPS
Europe (Stockholm) eu-north-1 config.eu-north-1.amazonaws.com HTTPS
Europe (Zurich) eu-central-2 config.eu-central-2.amazonaws.com HTTPS
Israël (Tel Aviv) il-central-1 config.il-central-1.amazonaws.com HTTPS
Moyen-Orient (Bahreïn) me-south-1 config.me-south-1.amazonaws.com HTTPS
Moyen-Orient (EAU) me-central-1 config.me-central-1.amazonaws.com HTTPS
Amérique du Sud (São Paulo) sa-east-1 config.sa-east-1.amazonaws.com HTTPS
AWS GovCloud (USA Est) us-gov-east-1 config.us-gov-east-1.amazonaws.com HTTPS
AWS GovCloud (US-Ouest) us-gov-west-1 config.us-gov-west-1.amazonaws.com HTTPS