Complete a 3 Question Survey and Earn a re:Post Badge
Help improve AWS Support Official channel in re:Post and share your experience - complete a quick three-question survey to earn a re:Post badge!
Wie kann ich die Anzahl der Konfigurationselemente abrufen, die AWS Config jeden Monat aufzeichnet?
Ich möchte die Anzahl der CIs (configuration items, Konfigurationselemente) ermitteln, die AWS Config aufzeichnet, damit ich die Rechnungsstellung für mein AWS-Konto verstehen kann.
Lösung
Verwende Amazon Athena, um die Anzahl der CIs pro Monat für dein Konto zu ermitteln.
Überprüfen, ob dein Amazon S3-Bucket Konfigurationsdateien enthält
Vergewissere dich, dass AWS Config die Konfigurationsverlaufsdateien an den angegebenen Amazon Simple Storage Service (Amazon S3)-Bucket übermitteln kann. AWS Config übermittelt in der Regel alle 6 Stunden Konfigurationsverlaufsdateien an den Bucket.
Um zu überprüfen, ob dein S3-Bucket Konfigurationsdateien enthält, führe die folgenden Schritte aus:
- Öffne AWS Config-Konsole.
- Wähle im Navigationsbereich Einstellungen aus.
- Notiere dir im Abschnitt Amazon S3-Bucket den Bucket-Namen.
- Öffne die Amazon S3-Konsole und wähle dann deinen S3-Bucket aus.
- Stelle sicher, dass der S3-Bucket Konfigurationsdateien enthält.
Hinweis: Wenn keine Konfigurationsdateien vorhanden sind, hat deine AWS Identity and Access Management (IAM)-Rolle möglicherweise nicht die erforderlichen Berechtigungen für Amazon S3.
Eine Tabelle in Athena erstellen
Verwende den Abfrage-Editor von Amazon Athena, um eine Tabelle zu erstellen. Gib im Abfrage-Editor die folgende Anweisung ein:
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/';
Hinweis: Ersetze den Speicherort des S3-Beispiel-Buckets durch den deines S3-Buckets.
Wenn du Athena-Engine Version 2 verwendest, beträgt die maximale Zeilenlänge für Textdateien 100 MB. Wenn du über eine große Anzahl von Ressourcen verfügst, können die CIs, die im vorgesehenen AWS Config S3-Bucket gespeichert werden, das Kontingent überschreiten. Da AWS Config beispielsweise auch Konfigurations-Snapshot-Dateien im selben Bucket-Speicherort liefert, könnte die Konfigurations-Snapshot-Datei das Kontingent überschreiten.
Wenn du das Kontingent überschreitest, erhältst du eine Fehlermeldung, die der folgenden ähnelt, nachdem du die CI abgefragt hast:
„HIVE_BAD_DATA: Line too long in text file: s3_path_to_config_data_object“
Führe die folgende Tabellenanweisung aus, damit Athena direkt den S3-Pfad abfragt, in dem die Konfigurationsverlaufsdateien gespeichert sind, um dieses Problem zu vermeiden:
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/')
Hinweis: Ersetze den Speicherort des S3-Beispiel-Buckets durch den deines S3-Buckets.
Die vorangehende Tabellenanweisung partitioniert die Athena-Tabelle mit Partitionsprojektionen von /2021/1/1/ bis /2121/12/31/.
Hinweis: Das Datumsformat des S3-Pfads für AWS Config-Daten ist nicht mit dem Datumstypformat der Projektion von Athena-Partition kompatibel.
Beispiel für Athena-Abfragen
Die folgende Beispielabfrage ruft die Anzahl der CIs für jeden Tag im Februar 2021 ab:
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
Beispielausgabe:
configurationitemcapturetime NumberOfChanges 2021-02-02 7 2021-02-03 3 2021-02-07 11 ...
Die folgende Beispielabfrage ruft die Anzahl der Änderungen für jede Ressource im Februar 2021 ab, sortiert nach den am häufigsten vorgenommenen Änderungen:
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
Beispielausgabe:
resourcetype resourceid NumberOfChanges AWS::EC2::VPC vpc-9ed00bfa 7 AWS::EC2::Subnet subnet-4472e248 5 AWS::EC2::SecurityGroup sg-450c6531 4
Hinweis: Wenn du die Gesamtzahl der CIs zwischen Athena-Abfrageausgaben und AWS-Abrechnungsdaten für denselben Monat und dieselbe AWS-Region vergleichst, kann eine Diskrepanz auftreten. Die Daten, die von Athena abgefragt werden, können Tagesgrenzen überschreiten und auch CIs enthalten, die in den Folgemonaten fakturiert wurden. AWS Config misst CIs auf der Grundlage des Zeitpunkts, zu dem configurationItemCaptureTime initiiert wird.
Es ist ein bewährtes Verfahren, den Endtag vom Monatsende um einen Tag zu erhöhen.
In der folgenden Abfrage ist der Endtag zum Beispiel der 28. Februar:
AND configurationItem.configurationItemCaptureTime <= '2021-02-28T%') result
Aktualisiere das Ende des Tages auf den 1. März:
AND configurationItem.configurationItemCaptureTime <= '2021-03-01T%') result
AWS Config in einer Control Tower-Umgebung abfragen
Da Control Tower alle Konfigurationsprotokolle in demselben S3-Bucket ablegt, kannst du alle Konten in AWS Organizations abfragen.
Um eine Tabelle für die Einrichtung von Control Tower zu erstellen, führe eine Anweisung aus, die der folgenden ähnelt:
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/')
Hinweis: Füge die IDs für jedes Konto in deiner Organisation hinzu, und ersetze alle Regionen durch deine Regionen.
Die vorangehende Anweisung erstellt automatisch Partitionen für Konten, Jahr, Monat und Tag. Führe die folgende Anweisung aus, um die Anzahl der CIs eines bestimmten Monats abzufragen:
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
Führe die folgende Anweisung aus, um die Anzahl der Änderungen für jede Ressource im selben Monat zu ermitteln:
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
Ähnliche Informationen
Anzeigen des Compliance-Verlaufs für deine AWS-Ressourcen mit AWS Config
Ähnliche Videos


Relevanter Inhalt
- AWS OFFICIALAktualisiert vor 4 Jahren