Como faço para recuperar o número de itens de configuração que o AWS Config registra a cada mês?
Quero encontrar o número de itens de configuração (ICs) que o AWS Config registra para que eu possa entender o faturamento da minha conta da AWS.
Resolução
Use o Amazon Athena para identificar o número de ICs por mês da sua conta.
Verifique se seu bucket do Amazon S3 contém arquivos de configuração
Verifique se o AWS Config consegue entregar arquivos de histórico de configuração ao bucket designado do Amazon Simple Storage Service (Amazon S3). Normalmente, o AWS Config entrega ao bucket arquivos de histórico de configuração a cada 6 horas.
Para verificar se seu bucket do S3 contém arquivos de configuração, conclua as seguintes etapas:
- Abra o console do AWS Config.
- No painel de navegação, escolha Configurações.
- Na seção Bucket do Amazon S3, anote o nome do bucket.
- Abra o console do Amazon S3 e, em seguida, selecione seu bucket do S3.
- Verifique se o bucket do S3 contém arquivos de configuração.
Observação: se não houver arquivos de configuração, o perfil do AWS Identity and Access Management (IAM) pode não ter as permissões necessárias para o Amazon S3.
Criar uma tabela no Athena
Use o editor de consultas do Amazon Athena para criar uma tabela. No editor de consultas, insira a seguinte instrução:
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/';
Observação: substitua o exemplo de localização do bucket do S3 pela localização do bucket do S3.
Se você estiver usando a versão 2 do mecanismo Athena, o comprimento máximo de linha para arquivos de texto é de 100 MB. Se você tiver um grande número de recursos, os ICs armazenados no bucket designado do AWS Config S3 podem exceder essa cota. Por exemplo, como o AWS Config também envia arquivos de snapshot de configuração na mesma localização do bucket, e o arquivo de snapshot de configuração pode exceder essa cota.
Se exceder essa cota, você receberá um erro semelhante ao seguinte depois de consultar o CI:
"HIVE_BAD_DATA: Linha muito longa no arquivo de texto: s3_path_to_config_data_object"
Para evitar esse problema, execute a instrução da tabela a seguir para que o Athena consulte diretamente o caminho do S3 que armazena os arquivos do histórico de configuração:
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/')
Observação: substitua o exemplo de localização do bucket do S3 pela localização do bucket do S3.
A instrução da tabela anterior particiona a tabela do Athena com projeções de partição de /2021/1/1/ a /2121/12/31/.
Observação: o formato de data do caminho S3 dos dados do AWS Config não é compatível com o formato do tipo de data de projeção das partições do Athena.
Exemplo de consultas do Athena
O exemplo de consulta a seguir recupera o número de ICs para cada dia de fevereiro de 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
Exemplo de saída:
configurationitemcapturetime NumberOfChanges 2021-02-02 7 2021-02-03 3 2021-02-07 11 ...
o exemplo de consulta a seguir recupera o número de alterações por cada recurso em fevereiro de 2021, classificadas pelas alterações mais frequentes:
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
Exemplo de saída:
resourcetype resourceid NumberOfChanges AWS::EC2::VPC vpc-9ed00bfa 7 AWS::EC2::Subnet subnet-4472e248 5 AWS::EC2::SecurityGroup sg-450c6531 4
Observação: ao comparar o número total de ICs entre as saídas da consulta do Athena e os dados de faturamento da AWS para o mesmo mês e região AWS, pode haver uma discrepância. Os dados consultados pelo Athena podem ultrapassar os limites do dia e também incluir ICs cobrados em meses próximos. O AWS Config mede os ICs com base no momento em que configurationItemCaptureTime é iniciado.
A prática recomendada é incrementar o dia final especificado a partir do final do mês em um.
Por exemplo, na consulta a seguir, o dia final é 28 de fevereiro:
AND configurationItem.configurationItemCaptureTime <= '2021-02-28T%') result
Atualize o final do dia para 1.º de março:
AND configurationItem.configurationItemCaptureTime <= '2021-03-01T%') result
Consultar o AWS Config em um ambiente do Control Tower
Como o Control Tower coloca todos os logs de configuração no mesmo bucket do S3, é possível consultar todas as contas nas AWS Organizations.
Para criar uma tabela para uma configuração do Control Tower, execute uma instrução semelhante à seguinte:
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/')
Observação: adicione os IDs de cada conta em sua organização e substitua todas as regiões por suas regiões.
A instrução anterior cria automaticamente partições para contas, ano, mês e dia. Para consultar o número de ICs de um mês específico, execute a seguinte instrução:
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
Para obter o número de alterações de cada recurso do mesmo mês, execute a seguinte instrução:
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
Informações relacionadas
Visualizar o histórico de conformidade dos recursos da AWS com o AWS Config
Vídeos relacionados


Conteúdo relevante
- feita há 2 meseslg...
- feita há um mêslg...
- feita há 2 meseslg...
- Resposta aceitafeita há 4 meseslg...
- AWS OFICIALAtualizada há 3 anos
- AWS OFICIALAtualizada há 4 anos
- AWS OFICIALAtualizada há 4 anos
- AWS OFICIALAtualizada há 6 meses