Comment puis-je récupérer le nombre d'éléments de configuration qu'AWS Config enregistre chaque mois ?
Je souhaite connaître le nombre d'éléments de configuration (CI) enregistrés par AWS Config afin de comprendre la facturation de mon compte AWS.
Résolution
Utilisez Amazon Athena pour identifier le nombre de CI associés à votre compte chaque mois.
Vérifier que votre compartiment Amazon S3 contient des fichiers de configuration
Assurez-vous qu'AWS Config peut fournir des fichiers d'historique de configuration au compartiment Amazon Simple Storage Service (Amazon S3) que vous avez désigné. AWS Config fournit généralement des fichiers d'historique de configuration au compartiment toutes les 6 heures.
Pour vérifier que votre compartiment S3 contient des fichiers de configuration, procédez comme suit :
- Ouvrez la console AWS Config.
- Dans le volet de navigation, sélectionnez Paramètres.
- Dans la section Compartiment Amazon S3, notez le nom du compartiment.
- Ouvrez la console Amazon S3, puis sélectionnez votre compartiment S3.
- Vérifiez que le compartiment S3 contient des fichiers de configuration.
Remarque : S'il n'existe aucun fichier de configuration, votre rôle AWS Identity and Access Management (IAM) ne dispose peut-être pas des autorisations requises pour Amazon S3.
Créer une table dans Athena
Utilisez l'éditeur de requêtes Amazon Athena pour créer une table. Dans l'éditeur de requêtes, saisissez l'instruction suivante :
CREATE EXTERNAL TABLE awsconfig ( fileversion string, configSnapshotId string, configurationitems ARRAY < STRUCT < configurationItemVersion : STRING, configurationItemCaptureTime : STRING, configurationStateId : BIGINT, awsAccountId : STRING, configurationItemStatus : STRING, resourceType : STRING, resourceId : STRING, resourceName : STRING, ARN : STRING, awsRegion : STRING, availabilityZone : STRING, configurationStateMd5Hash : STRING, resourceCreationTime : STRING > > ) ROW FORMAT SERDE 'org.apache.hive.hcatalog.data.JsonSerDe' LOCATION 's3://BUCKET-NAME/AWSLogs/ACCOUNT-ID/Config/REGION/';
Remarque : Remplacez l'exemple d'emplacement du compartiment S3 par l'emplacement de votre compartiment S3.
Si vous utilisez le moteur Athena version 2, la longueur de ligne maximale pour les fichiers texte est de 100 Mo. Si vous disposez d'un grand nombre de ressources, les CI stockés dans le compartiment AWS Config S3 désigné peuvent dépasser cette limite. Par exemple, dans la mesure où AWS Config fournit également des fichiers d'instantanés de configuration au même emplacement de compartiment, le fichier d'instantané de configuration peut dépasser le quota.
Si vous dépassez le quota, une erreur similaire à l’erreur suivante s'affiche lorsque vous interrogez le CI :
« HIVE_BAD_DATA: Line too long in text file: s3_path_to_config_data_object »
Pour éviter ce problème, exécutez l'instruction de table suivante afin qu'Athena interroge directement le chemin S3 qui stocke les fichiers d'historique de configuration :
CREATE EXTERNAL TABLE awsconfig ( fileversion string, configSnapshotId string, configurationitems ARRAY < STRUCT < configurationItemVersion : STRING, configurationItemCaptureTime : STRING, configurationStateId : BIGINT, awsAccountId : STRING, configurationItemStatus : STRING, resourceType : STRING, resourceId : STRING, resourceName : STRING, ARN : STRING, awsRegion : STRING, availabilityZone : STRING, configurationStateMd5Hash : STRING, resourceCreationTime : STRING > > ) PARTITIONED BY (`year` string,`month` string,`day` string) ROW FORMAT SERDE 'org.apache.hive.hcatalog.data.JsonSerDe' LOCATION 's3://BUCKET-NAME/AWSLogs/ACCOUNT-ID/Config/REGION/' TBLPROPERTIES ( 'projection.enabled'='true', 'projection.year.interval'='1', 'projection.year.range'='2021,2121', 'projection.year.type'='integer', 'projection.month.interval'='1', 'projection.month.range'='1,12', 'projection.month.type'='integer', 'projection.day.interval'='1', 'projection.day.range'='1,31', 'projection.day.type'='integer', 'storage.location.template'='s3://BUCKET-NAME/AWSLogs/ACCOUNT-ID/Config/REGION/${year}/${month}/${day}/ConfigHistory/')
Remarque : Remplacez l'exemple d'emplacement du compartiment S3 par l'emplacement de votre compartiment S3.
L'instruction de table précédente partitionne la table Athena avec des projections de partition allant de /2021/1/1/ à /2121/12/31/.
Remarque : Le format de date de chemin S3 des données AWS Config n'est pas compatible avec le format de type de date de projection de partition Athena.
Exemples de requête Athena
L'exemple de requête suivant permet de récupérer le nombre de CI pour chaque jour de février 2021 :
SELECT result.configurationitemcapturetime, count(result.configurationitemcapturetime) AS NumberOfChanges FROM (SELECT regexp_replace(configurationItem.configurationItemCaptureTime, '(.+)(T.+)', '$1') AS configurationitemcapturetime FROM default.awsconfig CROSS JOIN UNNEST(configurationitems) AS t(configurationItem) WHERE "$path" LIKE '%ConfigHistory%' AND configurationItem.configurationItemCaptureTime >= '2021-02-01T%' AND configurationItem.configurationItemCaptureTime <= '2021-02-28T%') result GROUP BY result.configurationitemcapturetime ORDER BY result.configurationitemcapturetime
Exemple de sortie :
configurationitemcapturetime NumberOfChanges 2021-02-02 7 2021-02-03 3 2021-02-07 11 ...
L'exemple de requête suivant permet de récupérer le nombre de modifications pour chaque ressource en février 2021, triées selon les modifications les plus fréquentes :
SELECT configurationItem.resourceType, configurationItem.resourceId, COUNT(configurationItem.resourceId) AS NumberOfChanges FROM default.awsconfig CROSS JOIN UNNEST(configurationitems) AS t(configurationItem) WHERE "$path" LIKE '%ConfigHistory%' AND configurationItem.configurationItemCaptureTime >= '2021-02-01T%' AND configurationItem.configurationItemCaptureTime <= '2021-02-28T%' GROUP BY configurationItem.resourceType, configurationItem.resourceId ORDER BY NumberOfChanges DESC
Exemple de sortie :
resourcetype resourceid NumberOfChanges AWS::EC2::VPC vpc-9ed00bfa 7 AWS::EC2::Subnet subnet-4472e248 5 AWS::EC2::SecurityGroup sg-450c6531 4
Remarque : Lorsque vous comparez le nombre total de CI entre les sorties des requêtes Athena et les données de facturation AWS pour le même mois et la même région AWS, une divergence peut apparaître. Les données interrogées par Athena peuvent dépasser les limites du nombre de jours et inclure également des CI facturés les mois suivants. AWS Config mesure les CI en fonction de l'heure à laquelle configurationItemCaptureTime est lancé.
Il est recommandé d'augmenter d'un jour la date de fin de mois.
Par exemple, dans la requête suivante, le jour de fin est le 28 février :
AND configurationItem.configurationItemCaptureTime <= '2021-02-28T%') result
Mettez à jour la fin de la journée au 1er mars :
AND configurationItem.configurationItemCaptureTime <= '2021-03-01T%') result
Interroger AWS Config dans un environnement Control Tower
Étant donné que Control Tower place tous les journaux de configuration dans le même compartiment S3, vous pouvez interroger tous les comptes dans AWS Organizations.
Pour créer une table pour la configuration de Control Tower, exécutez une instruction similaire à l’instruction suivante :
CREATE EXTERNAL TABLE awsconfig ( fileversion string, configSnapshotId string, configurationitems ARRAY < STRUCT < configurationItemVersion : STRING, configurationItemCaptureTime : STRING, configurationStateId : BIGINT, awsAccountId : STRING, configurationItemStatus : STRING, resourceType : STRING, resourceId : STRING, resourceName : STRING, ARN : STRING, awsRegion : STRING, availabilityZone : STRING, configurationStateMd5Hash : STRING, resourceCreationTime : STRING > > ) PARTITIONED BY (`account` string,`region` string,`year` string,`month` string,`day` string) ROW FORMAT SERDE 'org.apache.hive.hcatalog.data.JsonSerDe' LOCATION 's3://bucket-name/org-id/AWSLogs/' TBLPROPERTIES ( 'projection.enabled'='true', 'projection.account.type'='enum', 'projection.account.values'='account-id1, accountid2', 'projection.region.type'='enum', 'projection.region.values'='us-east-1,us-east-2,us-west-2', 'projection.year.interval'='1', 'projection.year.range'='2021,2121', 'projection.year.type'='integer', 'projection.month.interval'='1', 'projection.month.range'='1,12', 'projection.month.type'='integer', 'projection.day.interval'='1', 'projection.day.range'='1,31', 'projection.day.type'='integer', 'storage.location.template'='s3://bucket-name/org-id/AWSLogs/${account}/Config/${region}/${year}/${month}/${day}/ConfigHistory/')
Remarque : Ajoutez les ID de chaque compte de votre organisation et remplacez toutes les régions par vos régions.
L'instruction précédente crée automatiquement des partitions pour les comptes, l'année, le mois et le jour. Pour interroger le nombre de CI d'un mois donné, exécutez l'instruction suivante :
SELECT result.configurationitemcapturetime, count(result.configurationitemcapturetime) AS NumberOfChanges FROM (SELECT regexp_replace(configurationItem.configurationItemCaptureTime, '(.+)(T.+)', '$1') AS configurationitemcapturetime FROM default.awsconfig CROSS JOIN UNNEST(configurationitems) AS t(configurationItem) WHERE "$path" LIKE '%ConfigHistory%' AND year='2024' AND month='9') result GROUP BY result.configurationitemcapturetime ORDER BY result.configurationitemcapturetime
Pour obtenir le nombre de modifications apportées à chaque ressource au cours du même mois, exécutez l'instruction suivante :
SELECT configurationItem.resourceType, configurationItem.resourceId, COUNT(configurationItem.resourceId) AS NumberOfChanges FROM default.awsconfig CROSS JOIN UNNEST(configurationitems) AS t(configurationItem) WHERE "$path" LIKE '%ConfigHistory%' AND year='2024' AND month='9' GROUP BY configurationItem.resourceType, configurationItem.resourceId ORDER BY NumberOfChanges DESC
Informations connexes
Consultation de l'historique de conformité de vos ressources AWS avec AWS Config
Vidéos associées


Contenus pertinents
- demandé il y a 12 jourslg...
- demandé il y a un anlg...
- demandé il y a 5 moislg...
- demandé il y a 10 moislg...
- demandé il y a un anlg...
- AWS OFFICIELA mis à jour il y a un an
- Comment définir le nombre ou la taille des fichiers lorsque j'exécute une requête CTAS dans Athena ?AWS OFFICIELA mis à jour il y a 4 ans
- AWS OFFICIELA mis à jour il y a 3 mois