Salta al contenuto

Come posso utilizzare il numero di CI registrati al mese per comprendere la fatturazione di AWS Config?

7 minuti di lettura
0

Desidero recuperare il numero di elementi di configurazione (CI) registrati da AWS Config. Quindi desidero utilizzare queste informazioni per comprendere la mia fatturazione AWS Config.

Risoluzione

Per comprendere più agevolmente le tendenze di fatturazione precedenti e attuali, utilizza Amazon Athena per identificare il numero di CI mensili di un account.

Verifica che il bucket Amazon S3 contenga i file di configurazione

Il servizio AWS Config deve essere in grado di fornire correttamente i file della cronologia delle configurazioni al bucket Amazon Simple Storage Service (Amazon S3) designato. AWS Config fornisce gli elementi di configurazione al bucket come file della cronologia delle configurazioni ogni 6 ore. Per ulteriori informazioni, consulta Visualizzazione della cronologia di conformità per AWS le tue risorse con AWS Config.

Completa i seguenti passaggi:

  1. Apri la console AWS Config.
  2. Nel pannello di navigazione, scegli Impostazioni.
  3. Nella sezione Amazon S3 bucket (Bucket Amazon S3), annota il nome del bucket.
  4. Apri la console Amazon S3.
  5. Nel pannello di navigazione, scegli Bucket, quindi seleziona il bucket S3.
  6. Controlla che nel bucket S3 siano presenti i file di configurazione.
    Nota: se i file di configurazione non sono presenti, il ruolo potrebbe non avere le autorizzazioni necessarie. Per ulteriori informazioni, consulta AWS Identity and Access Management (AWS IAM) per Amazon S3.

Crea una tabella in Athena

Apri la console Athena. Quindi crea una tabella con la sintassi per l'ambiente in uso.

Importante: nella seguente sintassi della tabella, sostituisci LOCATION con la posizione e la Regione AWS per gli elementi di AWS Config archiviati nel bucket S3. Per BUCKET-NAME, ACCOUNT-ID, REGION e ORG-ID utilizza le tue informazioni specifiche.

Per l'implementazione standard di AWS Config

Utilizza la seguente sintassi della tabella:

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/';

Per la versione 2 del motore Athena

Se utilizzi la versione 2 del motore Athena, la lunghezza massima della riga per i file di testo è 100 MB. Se disponi di molte risorse, gli elementi di AWS Config archiviati nel bucket S3 designato potrebbero superare questo limite. Ad esempio, AWS Config genera anche file di snapshot della configurazione nella stessa posizione (LOCATION) del bucket e il file di snapshot della configurazione potrebbe superare questo limite. Se superi il limite, quando esegui una query sull'elemento di AWS Config, ricevi un errore simile al seguente:

"HIVE_BAD_DATA: Line too long in text file: <s3_path_to_config_data_object>"

In questo caso, utilizza la seguente sintassi della tabella per indicare ad Athena di eseguire query direttamente sul percorso di Amazon S3 che memorizza i file della cronologia delle configurazioni:

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/')

Nota: il seguente esempio di tabella partiziona la tabella Athena con una proiezione delle partizioni dal /1/1/2021/ al /31/12/2121/. Aggiorna le partizioni in base alle esigenze. Il formato della data del percorso Amazon S3 dei dati di AWS Config non è compatibile con il formato della data della proiezione delle partizioni Athena.

Per gli ambienti AWS Control Tower

Se utilizzi AWS Control Tower, per adattare la struttura dell'account, utilizza la seguente sintassi della tabella per creare la tabella Athena:

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/' -- Bucket name and org should be updated
TBLPROPERTIES (
 'projection.enabled'='true',
 'projection.account.type'='enum',
 'projection.account.values'='<account-id1, accountid2>', -- Enter all account ids
 'projection.region.type'='enum',
 'projection.region.values'='<region-1,region-2,region-3>', -- Enter all regions
 '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/') -- Bucket name and org should be updated

Esempio di query Athena

Il seguente esempio di query recupera il numero di modifiche per risorsa nel mese di febbraio 2021, ordinate in base alle modifiche più frequenti:

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

Quando escludi determinati tipi di risorse da AWS Config Recorder, quest'ultimo registra comunque la creazione e l'eliminazione di tali risorse. Le registrazioni vengono effettuate gratuitamente. Questi CI delle risorse includono i seguenti stati per il campo configurationItemStatus:

  • ResourceNotRecorded
  • ResourceDeletedNotRecorded

Le registrazioni includono anche metadati di base, come resource-id, ARN e CI, ma non includono informazioni sulla configurazione delle risorse e sulle relazioni.

Nota: questa query conta ancora le informazioni ResourceNotRecorded. Per escluderle, esegui questa query:

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-08T%'
        AND configurationItem.configurationItemCaptureTime <= '2021-02-28T%'
        AND configurationItem.configurationItemStatus NOT IN ('ResourceNotRecorded','ResourceDeletedNotRecorded')
GROUP BY  configurationItem.resourceType
ORDER BY  NumberOfChanges DESC

I risultati sono simili al seguente esempio:

resourcetype              resourceid        NumberOfChanges
AWS::EC2::VPC             vpc-9ed00bfa        7
AWS::EC2::Subnet          subnet-4472e248     5
AWS::EC2::SecurityGroup   sg-450c6531         4

Il seguente esempio di query recupera il numero di elementi di configurazione al giorno per il mese di febbraio 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

Nota: per filtrare le risorse non registrate, puoi aggiungere la seguente clausola aggiuntiva prima dell'opzione GROUP BY:

"AND configurationItem.configurationItemStatus NOT IN ('ResourceNotRecorded','ResourceDeletedNotRecorded')"

I risultati sono simili al seguente esempio:

configurationitemcapturetime    NumberOfChanges
2021-02-02    7
2021-02-03    3
2021-02-07   11
...

Nota: quando confronti il numero di CI tra i risultati delle query di Athena e i dati di fatturazione AWS per lo stesso mese e Regione, può essere presente una discrepanza. I dati interrogati da Athena possono essere a cavallo tra due giorni e includere anche gli elementi di configurazione fatturati in mesi adiacenti. I CI di AWS Config vengono misurati in base a quando hai avviato configurationItemCaptureTime.

È consigliabile incrementare di uno il giorno finale specificato rispetto alla fine del mese.

Ad esempio, puoi modificare la query originale utilizzando la seguente query aggiornata.

Query originale:

AND configurationItem.configurationItemCaptureTime <= '2021-02-28T%') result

Query aggiornata:

AND configurationItem.configurationItemCaptureTime <= '2021-03-01T%') result

Nota: l'ultimo giorno del mese viene incrementato di un giorno.

Informazioni correlate

Prezzi di AWS Config

Prezzi di Amazon Athena

Registrazione delle risorse AWS con AWS Config